设计分享 | 基于51单片机实现温度监测报警系统

嵌入式工程师成长日记

https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484116&idx=1&sn=296e1e88a12f54734a1155325aba7f9d&chksm=cf43078cf8348e9a23a2cbed1d3bb065abef6d130295fafdc891d50371be40972087321b63f5&token=1620569802&lang=zh_CN#rdicon-default.png?t=M85Bhttps://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484116&idx=1&sn=296e1e88a12f54734a1155325aba7f9d&chksm=cf43078cf8348e9a23a2cbed1d3bb065abef6d130295fafdc891d50371be40972087321b63f5&token=1620569802&lang=zh_CN#rd

具体功能实现

利用DS18B20实时检测温度并显示在LCD1602显示屏上,同时可以通过K1,K2,K3,K4设置最高温度和最低温度利用AT24C02可以实现掉电不丢失,最后当检测温度大于或小于最高温时,会在LCD1602显示屏上显示OV:H或OV:L。

使用器件:

AT89C52、LCD1602显示屏、4只按键、AT24C02、DS18B20

实际图和运行图 :

 

 

由测试图中的LCD1602显示屏可以得出:当前室温是24.18℃,最高温限制为21℃,最低温限制为-2℃。

 知识介绍:

AT24C02芯片介绍

AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息。
存储介质:EEPROM
通讯接口:I2C总线

DS18B20芯片介绍

DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。[1]  DS18B20数字温度传感器接线方便,封装成后可应用于多种场合。

通过单总线协议进行通信(One-Wire)

管脚定义图:

温度寄存器格式:

DS18B20功能命令:

初始化时序:

初始化代码:

unsigned char onewire_init(void)

{

unsigned char i;

unsigned char ackbit;

onewire_dq=1;

onewire_dq=0;

i = 247;while (--i);  //delay 500us

onewire_dq=1;

i = 32;while (--i);   //delay 70us

ackbit = onewire_dq;

i = 247;while (--i);  //delay 500us

return ackbit;

}

读/写时序:

读时序代码:

unsigned char onewire_receivebit(void)

{

unsigned char i;

unsigned char Bit;

onewire_dq=0;

i = 2;while (--i); //delay 9us

onewire_dq=1;

i = 2;while (--i); //delay 9us

Bit = onewire_dq;

i = 22;while (--i); //delay 50us

return Bit;

}

写时序代码:

unsigned char onewire_sendbit(unsigned char Bit)

{

unsigned char i;

onewire_dq=0;

i = 4;while (--i); //delay 14us

onewire_dq  =Bit;

i = 22;while (--i); //delay 50us

onewire_dq=1;

}

全双工,半双工,单工的区别

单工:只支持信号在一个方向上传输(正向或反向),任何时候不能改变信号的传输方向。

半双工:半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。半双工通信实际上是一种可切换方向的单工通信。

全双工:全双工通信允许数据同时在两个方向上传输,即有两个信道,因此允许同时进行双向传输。

主函数代码(C语言)KEIL5实现:

#include <REGX52.H>

#include "LCD1602.h"

#include "onewire.h"

#include "DS18B20.h"

#include "key.h"

#include "AT24C02.h"

float t,tshow;

char tlow,thigh;

unsigned char keynum;

void Delay5ms() //@11.0592MHz

{

unsigned char i, j;

i = 54;

j = 199;

do

{

while (--j);

} while (--i);

}

void main()

{

LCD_Init();

LCD_ShowString(1,1,"T:");

LCD_ShowString(2,1,"TH:");

LCD_ShowString(2,9,"TL:");

thigh = AT24C02_ReadByte(0);

tlow = AT24C02_ReadByte(1);

while(1)

{

LCD_ShowSignedNum(2,4,thigh,3);

LCD_ShowSignedNum(2,12,tlow,3);

keynum = key();

ds18b20_convert();

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);

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)

{

tlow = -55;

}

}

if(tshow>thigh)

{

LCD_ShowString(1,13,"OV:H");

}

else if(tshow<tlow){

LCD_ShowString(1,13,"OV:L");

}

else{

LCD_ShowString(1,13,"    ");

}

AT24C02_WriteByte(0,thigh);

Delay5ms();

AT24C02_WriteByte(1,tlow);

Delay5ms();

}

}

}

问题解答 :

Q:代码超出版本限制如何解决?如图:

A:用注册机对KEIL5软件进行重新破解,破解步骤链接:

Q:延时函数如何快速自动生成?

A:在STC-ISP中根据红色方框进行设计

Q:为什么使用AT24C02代码后还是会出现掉电丢失?

A:因为写字节AT24C02_WriteByte();还需要延时时间,最低时间要达到10ms,而单片机执行一条指令的时间为1us。

嵌入式工程师成长日记

https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484116&idx=1&sn=296e1e88a12f54734a1155325aba7f9d&chksm=cf43078cf8348e9a23a2cbed1d3bb065abef6d130295fafdc891d50371be40972087321b63f5&token=1620569802&lang=zh_CN#rdicon-default.png?t=M85Bhttps://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247484116&idx=1&sn=296e1e88a12f54734a1155325aba7f9d&chksm=cf43078cf8348e9a23a2cbed1d3bb065abef6d130295fafdc891d50371be40972087321b63f5&token=1620569802&lang=zh_CN#rd

  • 1
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值