历史上的今天
返回首页

历史上的今天

今天是:2026年01月31日(星期六)

2023年01月31日 | 基于51单片机实现温度监测报警系统

2023-01-31 来源:zhihu

具体功能实现

利用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


#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

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。


推荐阅读

史海拾趣

Charcroft Electronics Ltd公司的发展小趣事

Charcroft Electronics Ltd公司深知人才是企业发展的核心力量。因此,公司注重人才培养和团队建设,通过内部培训、外部引进等方式,打造了一支高素质、专业化的员工队伍。这支队伍不仅具备丰富的行业经验和专业技能,还具备创新意识和团队协作精神,为公司的持续发展提供了有力的人才保障。

芯邦(Chipsbank)公司的发展小趣事

近年来,芯邦科技的营收规模逐渐增大,从2020年到2022年,公司的营业收入分别达到了0.99亿元、1.75亿元和1.92亿元。尽管增速呈现下降趋势,但芯邦科技在电子行业中依然保持着稳健的市场表现。同时,公司也注重研发投入,不断提升产品的技术水平和市场适应性。

鞍山圣罗佳(ASL)公司的发展小趣事

在全球半导体市场竞争日益激烈的背景下,芯邦科技面临着来自国际巨头的挑战。然而,公司凭借在半导体设计领域的深厚积累和不断创新的精神,逐步形成了自己的核心竞争力。同时,芯邦也积极寻求与国际合作伙伴的合作机会,共同推动半导体产业的发展。

以上五个故事简要概述了芯邦科技在电子行业中的发展起来的关键节点和里程碑事件。这些故事不仅展现了芯邦科技在技术创新、产品线拓展、资本运作、市场表现和国际竞争等方面的努力和成就,也预示着公司未来发展的广阔前景和无限可能。

First Sensor公司的发展小趣事

随着公司业务的不断发展,芯邦开始积极布局UWB(超宽带通信)产品线。UWB技术以其高速率、高精度和低功耗的特点,在智能家居、物联网等领域展现出巨大的应用潜力。芯邦通过研发UWB等信息传输技术及产品,致力于从移动存储及智能家电市场出发,以手机及移动智能设备、车规及汽车周边产品应用、智能家居及物联网领域为目标市场,打造多系列产品线格局,提升公司的市场竞争力。

Barry Industries Inc公司的发展小趣事

在国内市场取得一定成绩后,Barry Industries Inc开始积极拓展国际市场。公司参加了多个国际电子展会,与国际知名企业建立了合作关系,成功将产品打入国际市场。同时,Barry还积极寻求与国际先进技术的交流与合作,不断提升自身的技术水平和产品质量。

Black Box Corporation公司的发展小趣事

Black Box意识到,在电子行业中,不同的行业细分市场有着不同的需求和特点。因此,公司决定采取深耕行业细分市场的策略,针对金融、教育、制造等不同行业提供定制化的解决方案。这一策略使Black Box能够更好地满足客户的实际需求,提高了客户满意度和忠诚度。

问答坊 | AI 解惑

电力线损管理

如何才能管理好线损主要 体现在以下四个方面。      实际线损可分为理论线损和管理线损两大类。理论线损是正常的线路上的电能损耗;管理线损是由计量设备误差、管理 不善以及电力网元件漏电引起的电能损 耗。由于这种损耗无规律 ...…

查看全部问答>

WINCE中怎么判断字符串是否存在中文啊?

是宽字符的,网上看到_ismbblead(),但是这个函数在wince中不支持 如何能够判断呢? 还有如何得到这个中文字符的第一个拼音呢?谢谢…

查看全部问答>

求助GPRS模块的简单问题

我在做一个控制GPRS发送信息的小程序,最后输入AT+CMGS输入信息内容以后要CTRL+Z才能发送,可是在我的程序中就是不 能吧信息内容发送,应该是CTRL+Z出错了 ,到底该怎么输入才能发送出去啊 ;我的发送按钮程序如下,请大家帮忙看下啊 .. void __f ...…

查看全部问答>

触摸屏校正的奇怪问题

1.首先拿到LCD,烧完让他跑起来。 2.用wince自带的校正程序校正。然后用PB或者EVC的工具连接wince的注册表。找到下面对应的值。 [HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\TOUCH] \"CalibrationData\"=\"这里每人的值都不一样\" 在$(_FLATRE ...…

查看全部问答>

我的mfc程序为什么一上来编译就有很多错误?

我在定制好CE6.0的平台后,建立了一个MFC Smart Deviece Application 。选的Dialog其他的没有设置。然后进去了。我想看看是否有错,创建完之后我就build solution一下,但是报出了57个错误和11个警告。我都疯了。会不会是因为我的SDK没有定制好? ...…

查看全部问答>

申请学习使用开发板

希望这个东西能给我撒,我会好好利用的。…

查看全部问答>

求助版主主

想寻找一ARM芯片 看了一些ST32F10XXX的,但没找到 要求有10路以上的ADC 及10路左右输入捕捉 及PWM…

查看全部问答>

为什么找不到TI 2812测试程序中引用的#include \"DSP281x_Examples.h\"这个头文件?

为什么找不到TI 2812测试程序中引用的#include \\"DSP281x_Examples.h\\"这个头文件? 哪位大侠给指点一下啊,是不是TI给的测试程序有问题啊???…

查看全部问答>

【设计工具】赛灵思28Gbps 串行收发器技术白皮书

    近日,全球可编程平台领导厂商赛灵思公司(Xilinx Inc., 纳斯达克:XLNX)宣布推出具有 28Gbps 串行收发器,支持下一代 100 - 400Gbps 应用的 Virtex®-7 HT FPGA。该系列 28nm FPGA 使得通信设备商可以开发更高集成以及带宽 ...…

查看全部问答>