温度上下限报警程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uchar code table2[]=" 00:00:00 ";
//以下三个是定义LCD的引脚
sbit lcden=P2^2;
sbit lcdwrite=P2^1;
sbit lcdrs=P2^0;
//定义四个功能开关
sbit s1=P1^4;
sb
sbit s=P1^7;
{ write_data(table1[num]);
delay(5); }
/*write_com(0x80+0x40);
for (num=0;num<16;num++)
{ write_data(table2[num]);
delay(5); }*/
TMOD=0x01;
TL0=(65536-50000)%256;//定时50ms
write_data(0x30+ge);
}
//温度显示
void write_wendu(uchar add,uchar da)
{
uchar shi,ge;
shi=da/10;
ge=da%10;
write_com(0x80+add);
write_data(0x30+shi);
write_data(0x30+ge);
write_data(0xdf);
}
//键盘扫描
void keyscan()
{
s=0;
if(s1==0)//如果S1按下去,执行相应的操作
{
delay(5);//消除抖动
if(s1==0)
{ flag=1;
num++;
while(!s1);
if(num==1)
{
TR0=0;//关定时器
write_com(0x80+5);//选定上限
{
xiaxian++;//调下限并显示加1
if(xiaxian>=100) xiaxian=0;
write_wendu(4,xiaxian);
write_com(0x80+5);
}
if(num==2)//调上限分并显示加1
{
shangxian++;
if(shangxian>=100) shangxian=0;
}
}
}
if(s3==0)
{ delay(5);
if(s3==0)
{ while(!s3);
if(num==1)//调下限并显示减1
{
xiaxian--;
if(xiaxian==-1) xiaxian=99;
write_wendu(4,xiaxian);
write_com(0x80+5);
}
if(num==2)//调上限并显示减1
else BEEF= 1;
time++;
if(time==20)//1s定时到
{ time=0;
sec++;//秒加1
if(sec==60)
{ sec=0;
min++;//分钟加1
if(min==60)
{ min=0;
hour++;//小时加1
if(hour==24)
{ hour=0;
}
write_hms(8,hour);
{
min++;
if(min==60) min=0;
write_hms(11,min);
write_com(0x80+0x40+12);
}
if(num==5)//调时并显示加1
{
hour++;
if(hour==24) hour=0;
write_hms(8,hour);
write_com(0x80+0x40+9);
//定义二极管
sbit LED1=P1^0;
sbit BEEF=P3^7;
uchar time;
char hour,min,sec,day,num,wendu,tec=35,flag=0;
char shangxian=10,xiaxian=0;
//延时程序
void delay(uint z)
{ uint x,y;
#include "reg51.h"
#include "18b20.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="Min:00 wendu C" ;
uchar code table1[]="Max:10 00:00:00 ";
write_hms(8,hour);
write_com(0x80+0x40+9);
}
}
}
}
}
//主函数
void main ()
{
init();
while(1)
{
keyscan();
}
}
//中断定时
void timer0() interrupt 1
{
TL0=(65536-50000)%256;//定时50ms
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//lcd的写指令
void write_com(uchar com)
{
lcdrs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//lcd的写数据
void write_data(uchar da)
{
write_com(0x80+0x40+9);
}
if(num==6)//恢复
{
num=0;
write_com(0x0c);
TR0=1;//重复开定时器
}
}
if(num!=0)
{ if(s2==0)//如果s2按下调理参数
{
delay(5);
if(s2==0)
{
while(!s2);
if(num==1)
write_com(0x80+0x40+15);
}
if(num==4)//调分并显示减1
{
min--;
if(min==-1) min=59;
write_hms(11,min);
write_com(0x80+0x40+12);
}
if(num==5)//调时并显示减1
{
hour--;
if(hour==-1) hour=23;
write_com(0x06); //移动光标
write_com(0x01);//清除LCD的显示内容
for (num=0;num<16;num++)
{ write_data(table[num]);
delay(5); }
write_com(0x80+0x40);
for (num=0;num<16;num++)
{ lcdrs=1;
lcden=0;
P0=da;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
//初始化
void init()
{
uchar num;
lcdwrite=0;
lcden=0;
write_com(0x38); //16*2显示,5*7点阵,8位数据
write_com(0x0c);//显示开,关光标
TH0=(65536-50000)/256;
wendu=ReadTemp();
write_wendu(12, wendu);
if(shangxian < wendu || wendu < xiaxian) LED1=0; //当温度大于上限或者小于下限时LED灯亮
else LED1= 1;
if(shangxian < wendu || wendu < xiaxian || hour==12) BEEF=0;//当温度大于上限或者小于下限时报警
TH0=(65536-50000)/256;
EA=1;
ET0=1;
TR0=1;
}
//时间走动
write_hms(uchar add,uchar da)
{
uchar shi,ge;
shi=da/10;
ge=da%10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_com(0x0f);
}
}
if(num==2)//选定下限
{
write_com(0x80+0x40+5);
}
if(num==3)//选定miao
{
write_com(0x80+0x40+15);
}
if(num==4)//选定fen
{
write_com(0x80+0x40+12);
}
if(num==5)//选定shi
{
shangxian--;
if(shangxian==-1) shangxian=99;
write_wendu1(4,shangxian);
write_com(0x80+0x40+5);
}
if(num==3)//调秒并显示减1
{
sec--;
if(sec==-1) sec=59;
write_hms(14,sec);
write_wendu1(4,shangxian);
write_com(0x80+0x40+5);
}
if(num==3)//调秒并显示加1
{
sec++;
if(sec==60) sec=0;
write_hms(14,sec);
write_com(0x80+0x40+15);
}
if(num==4)//调分并显示加1
}
write_hms(11,min);
}
write_hms(14,sec);
}
}
write_data(0xdf);
}
//调节上限温度
void write_wendu1(uchar add, char da)
{
uchar shi,ge;
shi=da/10;
ge=da%10;
write_com(0x80+0x40+add);
write_data(0x30+shi);
write_data(0x30+ge);
相关文档
最新文档