設(shè)計要求
1. 測量溫度值精度為±1℃; 2. 系統(tǒng)允許的誤差范圍為1℃以內(nèi); 3. 系統(tǒng)可由用戶預(yù)設(shè)溫度值,測溫范圍為-55℃~+125℃; 4. 通過DS18B20傳感器和系統(tǒng)連接,能實時準(zhǔn)確檢測到現(xiàn)場溫度; 5. 把現(xiàn)場實時檢測到的溫度值通過LCD1602液晶顯示出來; 6. 報警溫度設(shè)定和報警:根據(jù)需要可以設(shè)置報警溫度,并且當(dāng)達到報警溫度時會發(fā)出報警提示;
內(nèi)容介紹
本文介紹一種基于AT89C52的溫度監(jiān)控報警系統(tǒng)設(shè)計,系統(tǒng)采用DS18B20作為溫度監(jiān)測元件,測量范圍-55℃-~+125℃,使用LCD1602液晶模塊顯示測取的溫度值,通過按鍵設(shè)置溫度報警上下限。若當(dāng)前獲取的溫度不在設(shè)定溫度上下限范圍內(nèi)時,蜂鳴器報警,LED燈點亮,指示當(dāng)前報警信息。
系統(tǒng)框架
系統(tǒng)框圖.jpg (35.85 KB, 下載次數(shù): 95)
下載附件
2019-9-18 18:15 上傳
仿真結(jié)果
仿真結(jié)果運行.jpg (187.68 KB, 下載次數(shù): 98)
下載附件
2019-9-18 18:15 上傳
部分程序如下 /***********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寫數(shù)據(jù)**************/ 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');
|