找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1207|回复: 2
收起左侧

求教大神 C51单片机 报警器响10s 开启灭火装置

[复制链接]
ID:459782 发表于 2019-1-7 14:04 | 显示全部楼层 |阅读模式
C51单片机代码##这是主要的代码 需要添加一个 报警器响了10s 开启另一个装置的代码  求教
#include"LCD.H"
#include"AD0832.H"
#include"DAC0832.H"
#include"DS18B20.H"
sbit qx=P1^3;  //定义取消报警按键
sbit sp=P1^5;  //定义报警
sbit d1=P1^6;  //定义指示灯
sbit d2=P1^7;
unsigned char n=0;
unsigned char Serial[64]={0};
unsigned char dd[]={0};    //定义浓度
unsigned char CTemp[]={0}; //定义温度
unsigned char code tab[]="0123456789. ";
unsigned char code T[8]={0x18,0x18,0x0F,0x1F,0x18,0x18,0x1F,0x0F};
void delayms(long dly)  //延时程序
{
int i;
char j;
for(i=0;i<dly;i++)
for(j=0;j<120;j++);
}
void speak()    //报警子程序
{
   sp=0;
   delayms(1000);
   sp=1;
}
int main (void)
{
  unsigned char i=255,v=0,temp=0;
IT0=1;        //中断定义
EX0=1;
EA=1;
    delayms(600);
LCD_Init();
WriteStringToLcd(0,0,"Nd:");  //调用显示
WriteStringToLcd(7,0,"ppm");
WriteStringToLcd(0,1,"Wd:");
Write_self(T);
Write_selfString(8,1,0);
delayms(200);
while(1)
{

v=ReadAdc0832(0);    //浓度计算显示
dd[0]=tab[v/51];   
dd[1]=tab[10];
dd[2]=tab[10*v/51%10];
dd[3]=tab[100*v/510%10];
WriteStringToLcd(3,0,dd);
if(v/51>=1.0)    //浓度超额报警
  {
   d1=1;d2=0;speak();delayms(50);
  }
else
{
      d1=1;d2=1;
}  
temp=ReadTempreture(Serial,9); //温度计算显示
if(temp>100)
{
  CTemp[0]=tab[temp/100];
  CTemp[1]=tab[temp%100/10];
  CTemp[2]=tab[temp%100%10];
}
else
{
  CTemp[0]=tab[temp/10];
  CTemp[1]=tab[temp%10];
  CTemp[2]=tab[11];
  if(temp>32)      //温度超额报警
  {
   d1=0;d2=1;speak();delayms(50);
  }
  else
  {
   d1=1;d2=1;
  }
}
delayms(200);
WriteStringToLcd(5,1,CTemp);
  }
}
void int0() interrupt 0 using 1  //中断程序
{
  sp=1;
  d1=1;
  d2=1;
  delayms(1000000000);
}
回复

使用道具 举报

ID:258164 发表于 2019-1-7 17:42 | 显示全部楼层
定时器中断就可以实现,报警器开始响就开始定时,10s时间到,打开另一个装置的开关。
至于定时器的时间,你可以设置100ms或者1s都可以,然后设置一个计时变量累加到10s就行了。
回复

使用道具 举报

ID:274129 发表于 2019-1-12 14:18 | 显示全部楼层
利用单片机的定时器实现,在定时中断函数里面进行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表