51单片机_13-2 DS18B20温度报警器
时间:2023-05-29 11:37:00
文章目录
- 要求
- 效果
- 资源
- main函数
要求
1、利用总线OneWire与DS18B20通信
2、从DS18B读取并显示20中的温度LCD上
3.当温度超过边界时,显示温度报警边界LCD警告右上角
4、K1、K2.调节温度下界,K3、K4负责调节温度上界
5、开机时从AT24C在02中读取温度边界,并在调节温度边界时将调节后的温度边界节中AT24C02为了下次停电后不再调节温度边界
效果
资源
工程文件压缩包
链接:https://pan.baidu.com/s/1n5Zpnr8Kohkz_m5ZBDC7wQ
提取码:p12y
main函数
#include
#include "Delay.H" #include "Key.H" #include "AT24C02.H" #include "LCD1602.H" #include "DS18B20.H" ///温度显示 void Show_Temperature(float T){ ///温度正负号 if(T<0){ LCD_ShowString(1,1,"-"); T=-T; } else{ LCD_ShowString(1,1," "); } ///显示整数部分 LCD_ShowNum(1,2,T,3); LCD_ShowString(1,5,"."); ///小数显示,取两位 LCD_ShowNum(1,6,(unsigned long)(T*100)%100,2); } //温度阈值显示 void Show_Temperature_Range(char Tl,char Th){ //Tl显示 LCD_ShowString(2,1,"Tl:"); if(Tl<0){ LCD_ShowString(2,4,"-"); Tl=-Tl; }else{ LCD_ShowString(2,4,"+"); }LCD_ShowNum(2,5,Tl,3); //Th显示 LCD_ShowString(2,9,"Th:"); if(Th<0){ LCD_ShowString(2,12,"-"); Th=-Th; }else{ LCD_ShowString(2,12,"+"); }LCD_ShowNum(2,13,Th,3); } //温度阈值调整 void Adjust_TR(char *Tl,char *Th,unsigned char KeyNum){ //Tl调整 if(KeyNum==1)(*Tl)--; if((*Tl)<(*Th) & KeyNum==2)(*Tl)++; //Th调整 if((*Th)>(*Tl) & KeyNum==3)(*Th)--; if(KeyNum==4)(*Th)++; //51单片机自带 温度传感器测温范围 if((*Tl)>125 || (*Tl)<-55)(*Tl)=-55; if((*Th)>125 || (*Th)<-55)(*Th)=125; //温度存储,两次访问之间给5ms缓冲 AT24C02_WriteByte(0,*Tl); Delayms(5); AT24C02_WriteByte(1,*Th); Delayms(5); } //温度警报 void Over_TR(float T,char Tl,char Th){ //低温警报 if(T<Tl) LCD_ShowString(1,12,"OE:Tl"); //高温警报 if(T>Th) LCD_ShowString(1,12,"OE:Th"); //气温正常,警报擦除 if(T>Tl & T<Th) LCD_ShowString(1,12," "); } void main(){ float T; char Tl,Th; unsigned char KeyNum; DS18B20_ConvertT(); //延时1s,等待温度转换完毕,避免读出默认值 Delays(1); LCD_Init(); //气温阈值读取 Tl=AT24C02_ReadByte(0); Th=AT24C02_ReadByte(1); while(1){ //温度显示 DS18B20_ConvertT(); T=DS18B20_ReadT(); //温度阈值合法性检测 KeyNum=key(); if(KeyNum)Adjust_TR(&Tl,&Th,KeyNum); //温度阈值显示 Show_Temperature(T); Show_Temperature_Range(Tl,Th); //温度警报 Over_TR(T,Tl,Th); } }