锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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);
	}
}
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章