设计要求
1. 测量温度值精度为±1℃; 2. 系统允许的误差范围为1℃以内; 3. 系统可由用户预设温度值,测温范围为-55℃~+125℃; 4. 通过DS18B20传感器和系统连接,能实时准确检测到现场温度; 5. 把现场实时检测到的温度值通过LCD1602液晶显示出来; 6. 报警温度设定和报警:根据需要可以设置报警温度,并且当达到报警温度时会发出报警提示;
内容介绍
本文介绍一种基于AT89C52的温度监控报警系统设计,系统采用DS18B20作为温度监测元件,测量范围-55℃-~+125℃,使用LCD1602液晶模块显示测取的温度值,通过按键设置温度报警上下限。若当前获取的温度不在设定温度上下限范围内时,蜂鸣器报警,LED灯点亮,指示当前报警信息。
系统框架
仿真结果
部分程序如下 /***********Main主程序**************/ void main() { init(); Init_time(); Init_DS18B20(); while(1) { if(s1==0||s1num>=1) {keyscan(); TR0 = 0; D1 =1; D2 = 1;} else { ReadTemp(); write_temp_value(0,temp_value); comp(); } } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /***********LCD初始化程序**************/ void init() { lcden=0; lcdrw=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); write_com(0x80+9); write_data('H'); write_data(':'); write_data('+'); write_data('2'); write_data('0'); write_data(0xdf); write_data('C'); write_com(0x80+9+0x40); write_data('L'); write_data(':'); write_data('+'); write_data('1'); write_data('0'); write_data(0xdf); write_data('C'); h=0x14; l=0+0x0a; D1=1; D2=1; figh=0; figl=1; } /***********LCD写指令**************/ voidwrite_com(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } /***********LCD写数据**************/ voidwrite_data(uchar date) { lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; } /***********LCD显示读取温度值**************/ voidwrite_temp_value(uchar add,char date) { uchar bai,shi,ge; bai=date/100; shi=date%100/10; ge=date%10; if((bai|shi)==0) shi=0x70; if(bai==0) bai=0x70; write_com(0x80+add); if(fig==0&&shi!=0x70) { write_data('-'); write_data(0x30+shi); } if(fig==0&&shi==0x70) { write_data(0x30+0x70); write_data('-'); } if(fig==1)write_data(0x30+bai); if(fig==1)write_data(0x30+shi); write_data(0x30+ge); write_data(0xdf); write_data('C');
|