51单片机温度报警器设计与实现(附B站演示)

项目演示视频51单片机——温度报警器_哔哩哔哩_bilibili

一、项目介绍

本项目基于 STC89C52 单片机 设计实现了一个温度报警器系统,可以:

  • 读取 DS18B20 温度传感器数据;

  • 在 LCD1602 上实时显示当前温度;

  • 用户通过按键可设置上下限报警阈值;

  • 当温度超过设定阈值时,在 LCD 上显示“OV:H”或“OV:L”报警提示;

  • 通过 EEPROM(AT24C02)实现掉电记忆功能;

  • 支持按键消抖及定时扫描(使用 Timer0 中断);

二、硬件组成

序号名称功能说明
1STC89C52主控芯片
2DS18B20数字温度传感器
3LCD1602温度显示屏
4蜂鸣器(可扩展)超温声音报警
5按键模块设置温度阈值
6AT24C02 EEPROM存储上下限设置值
7定时器 Timer0按键消抖

三、功能亮点

  • 实时显示当前温度(精确到两位小数);

  • 超过上限温度显示 “OV:H”,低于下限温度显示 “OV:L”;

  • 上下限温度通过 4 个按键设置(支持按键防抖);

  • 阈值保存在 EEPROM 中,掉电后不丢失;

  • 按键值实时反映到 LCD 界面。

四、LCD1602 显示说明

内容
第1行T: 当前温度 + 超温状态
第2行TH: 上限值,TL: 下限值

T:+026.37   OV:H
TH:+030   TL:+015

五、主函数代码(项目代码已上传)

#include <REGX52.H>
#include "LCD1602.h"
#include "DS18B20.h"
#include "Key.h"
#include "Delay.h"
#include "AT24C02.h"
#include "Timer0.h"
unsigned char KeyNum;

float T,TShow;
char THigh,TLow;
void main()
{
	DS18B20_ConvertT();
	Delay(1000);
	THigh=AT24C02_ReadByte(0);
	TLow=AT24C02_ReadByte(1);
	if(THigh>125 ||TLow<-55 ||THigh<=TLow ){
		THigh=20;
		TLow=15;
	}
	LCD_Init();
	LCD_ShowString(1,1,"T:");
	LCD_ShowString(2,1,"TH:");
	LCD_ShowString(2,9,"TL:");
	Timer0_Init();
	while(1){
		KeyNum=Key();
		//温度读取及显示
		DS18B20_ConvertT();
		T=DS18B20_ReadT();
		if(T<0){
			LCD_ShowChar(1,3,'-');
			TShow=-T;
		}
		else{
			LCD_ShowChar(1,3,'+');
			TShow=T;
		}
		LCD_ShowNum(1,4,TShow,3);
		LCD_ShowChar(1,7,'.');
		LCD_ShowNum(1,8,(unsigned long)(TShow*100)%100,2);
		LCD_ShowSignedNum(2,4,THigh,3);
		LCD_ShowSignedNum(2,12,TLow,3);
		
		//阈值判断及显示
		if(KeyNum){
			if(KeyNum==1){
			THigh++;
			if(THigh>125) {THigh=125;}
		}
		if(KeyNum==2){
			THigh--;
			if(THigh<=TLow) {THigh++;}
		}
		if(KeyNum==3){
			TLow++;
			if(TLow>=THigh){TLow--;}
		}
		if(KeyNum==4){
			TLow--;
			if(TLow<-55) {THigh=-55;}
		}
		LCD_ShowSignedNum(2,4,THigh,3);
		LCD_ShowSignedNum(2,12,TLow,3);
		AT24C02_WriteByte(0,THigh);
		Delay(5);
		AT24C02_WriteByte(1,TLow);
		Delay(5);
		
		}
		if(T>THigh)
		{
			LCD_ShowString(1,13,"OV:H");
		}
		else if(T<TLow)
		{
			LCD_ShowString(1,13,"OV:L");
		}
		else
		{
			LCD_ShowString(1,13,"    ");
		}
		
		
	}
}

void Timer0_Routine() interrupt 1
{
		static unsigned int T0Count;//静态局部变量,
		TL0 = 0x66;		//设置定时初值
	  TH0 = 0xFC;		//设置定时初值
		T0Count++;
		if(T0Count>=20){
			T0Count=0;
			Key_Loop();
		}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jingjing~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值