基于51单片机的数字温度报警器分解.docx
- 文档编号:10231340
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:19
- 大小:270.88KB
基于51单片机的数字温度报警器分解.docx
《基于51单片机的数字温度报警器分解.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字温度报警器分解.docx(19页珍藏版)》请在冰豆网上搜索。
基于51单片机的数字温度报警器分解
基于51单片机的数字温度报警器
摘要:
随着传感器在生产生活中更加广泛的应用,一种新型的数字式温度传感器实现对温度的测试与控制得到了更快的开发。
本文设计了一种基于单片机AT89C52的温度检测及报警系统。
该系统将温度传感器DS18B20接到单片机的一个端口上,单片机对温度传感器进行循环采集。
将采集到的温度值与设定的上下限进行比较,当超出设定范围的上下限时,通过单片机控制的报警电路就会发出报警信号,从而实现了本次课程设计的要求。
该系统设计和布线简单、结构紧凑、体积小、重量轻、抗干扰能力较强、性价比高、扩展方便,在工农业等领域的温度检测中有广阔的应用前景。
本次课程设计的测量范围为0℃--99℃,测量误差为±2℃。
关键字:
温度传感器、单片机、报警、数码管显示
一、概述
本次设计可以应用到许多我们用过的软件设计,将前面所学的知识融汇在一起实现温度监测及其报警的功能,来提醒农民当前大棚内温度是否适合农作物的生长。
电子技术是在十九世纪末、二十世纪初开始发展起来的新兴技术,在二十世纪发展最迅速,应用最广泛,成为近代科学技术发展的一个重要标志。
随着电子技术的飞速发展,电子技术在日常生活中得到了广泛的应用,各类转换电路的不断推出以及电子产品的快速更新,电子技术已成为世界发展和人们生活中必不可少的工具。
本次课设应用Protues软件设计一个温度检测报警系统,用温度传感器DS18B20采集大棚内的温度,当大棚内的温度高于30℃。
或低于15℃。
时,电路发出报警信号并显示当前温度,达到提醒农民的效果。
本次课设要求设计一个温度监测报警显示电路,要求温度范围:
0℃--99℃;测量误差为±2℃;报警下限温度为:
15℃;报警上限温度为:
30℃。
二、方案论证
设计一个用于温室大棚温度监测系统。
大棚农作物生长时,其温度不能太低,也不能太高,太低或太高均不适合农作物生长。
该系统可实时测量、显示大棚的温度,当大棚温度超过农作物生长的温度范围时,报警提醒农民。
方案一:
方案一原理框图如图1所示。
图1大棚温度检测系统的原理框图
方案二:
方案二原理框图如图2所示。
图2方案二原理框图
本设计采用方案二,设计电路较为简单不复杂且硬件实现及调试比方案一理想,比较容易实现,性价比较高。
三、电路设计
1.单片机最小系统的设计
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。
本次课程设计中选用AT89C52式单片机,其最小系统主要由电复位、振荡电路组成。
单片机的最小系统如图3所示。
单片机的复位电路原理是在单片机的复位引脚RST上电阻和电容,实现上电复位。
当复位电平持续两个时钟周期以上时复位有效。
复位电路由按键复位和上电复位两部分组成,上电复位是在复位引脚上连接一个电容到VCC,再连接一个电阻到GND;按键复位是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。
AT89C51单片机使用12MHZ的晶振最为振荡源,由于单片机内部有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容一般在15pF至50pF之间。
外部晶振结合单片机内部电路产生单片机所需的时钟频率。
图3单片机最小系统
2.温度采集电路的设计
温度采集电路部分,采用数字温度传感器DS18B20进行温度采集。
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3个引脚;温度侧量范围为-55℃—+125℃,测量精度为0.5℃;被测温度用符号扩展的16位数字量方式串行输出;CPU只需用一个端口线就可以与DS18B20通信。
温度采集电路如图4所示。
图4温度采集电路
3.LED显示报警电路的设计
LED数码管与单片机的P0口相连,单片机将采集到的温度值转化为与数码管对应的数据,通过P0口输出显示。
即信号通过译码管的端口a、b、c、d、e、f、g、dp端来控制每段译码管的亮灭与否,同时通过端口1、2、3、4四个端口来控制四个译码管。
在本次设计中,用集成芯片74HC245驱动数码管。
同时当采集到的温度值超过所设置的范围时,单片机会输出一信号,通过三极管放大后驱动蜂鸣器发出报警信号。
LED数码管报警电路如图5所示。
图5LED显示及报警电路
四、程序流程
1.主程序流程图
主程序中对单片机做了初始化的设计,包含温度的读取、数码管显示、报警三个子系统,运行时由主程序先调用DS18B20读取温度的子函数进行温度采集,再将数据送入数码管显示。
同时判断所采集的数据是否超出所设置的温度范围。
如果超出,调用报警子系统;未超出,程序自动返回。
主程序流程图如图6所示。
图6主程序流程图
2.DS18B20读取温度流程图
根据DS18B200的通讯协议,单片机控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作(复位要求主CPU将数据线下拉500微秒然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功)。
DS18B20读取温度时先读取温度低字节,在读取温度高字节。
程序中命令0xCC:
跳过读序号列号的操作;命令0x44:
启动温度转换;命令0xBE:
读取温度寄存器等,前两个字节就是温度。
后面的寄存器省略不读。
DS18B20读取温度流程图如图7所示。
图7DS18B20读取温度流程图
3.译码显示流程图。
译码显示程序中,要先将初始标识清除。
将温度的个位送至低位数码管显示,清除标志再将温度值的高位送到高位数码管显示。
之后延时,清除标志返回继续显示下一数据。
译码显示流程图如图8所示。
图8译码显示流程图
4.报警程序流程图
程序中首先判断所读取的温度是否超出所设定的下限,如果超出下限,报警器报警;如果没超出下限,再跟上限值比较判断是否超出上限。
如果超出,则报警;若无,程序返回。
报警程序流程图如图9所示。
图9报警程序流程图
五、电路性能的测试
1.软件测试
在PROTUES软件中,连接好电路图后将在Keil中生成的“温度监测.HEX”程序文件导入单片机中。
由于DS18B20系统中设置的温度初值为85℃,所以当开始仿真时报警器会报警,数码管显示也为85。
4至5秒后数字温度传感器会显示当前温度,数码管也相应显示其数值。
在PROTUES软件仿真中,调节DS18B20的左右按钮可是温度值对应加减,数码管会显示当前值。
当减到15℃以下或加到30℃以上时,报警器会报警。
调节数字温度传感器DS18B20使其温度减到14℃,此时报警器报警,数码管显示14。
14℃时的电路仿真如图10所示。
图1014℃时,仿真电路图
调节DS18B20的温度值使其在0℃—99℃之间变化,电路仿真情况如表1所示。
设置温度值
0℃
5℃
10℃
15℃
18℃
20℃
23℃
25℃
27℃
29℃
数码管显示
0
5
10
15
18
20
23
25
27
29
是否报警
是
是
是
否
否
否
否
否
否
否
设置温度值
30℃
31℃
35℃
40℃
50℃
60℃
70℃
80℃
90℃
99℃
数码管显示
30
31
35
40
50
60
70
80
90
99
是否报警
否
是
是
是
是
是
是
是
是
是
表10℃—99℃温度范围内电路仿真情况统计表
2.硬件测试
完成硬件焊接并检查电路无误后,给电路加5V电压。
用万用表测量各点电压均正确,将相关的C语言程序导入单片机中,打开开关进行硬件测试。
测试时发现了如下几个问题:
(1)数码管不显示——经过查找资料发现由于我们把晶振焊接的离单片机内部的振荡电路太远,导致无振荡产生。
重心将晶振焊接离单片机较近的地方,数码管显示正常。
(2)单片机的复位电路不工作——由于软件仿真比较理想,复位电路选择的电容在硬件中不起作用。
将复位电路的电容并联一个较大的电容,并将单片机EA脚接电源后,单片机复位电路有效。
六、结论及性价比
应用方案二设计的简易温度检测报警系统,符合课设任务的要求。
测温范围:
0℃--99℃;误差:
≤±2℃报警下限温度:
15℃;报警上限温度:
30℃。
当温度低于15℃或高于30℃时报警器会报警同时数码管也会显示当时温度。
此次课程设计所需要的元件在实验室都可以找到,同时价格也比较合理。
做出来的硬件实现功能比较理想,具有体积小、重量轻、抗干扰能力强、精确度高等优点。
同时也可以做进一步的扩展,可扩展为多路温度采集系统。
总体来说符合了性价比要求。
七、课程设设计体会及合理建议
本次课程设计是一次综合性的应用,全方位考察了我们对所学软件的理解与掌握。
通过本学期对单片机课程和传感器课程的学习我们不但对以前学过的知识点有了更深一步的掌握,同时还学到了更多书本中所没有涉及到的东西。
从开始做期末作品后就不断地去图书馆借书查找相关资料、上网搜索信息、与同组同学讨论方案。
在我们的共同努力下,在本周成功的完成了软件的设计。
因为实验室要为电子竞赛准备,所以不能能打印PCB版做出实物,这也是本次作品遗憾的地方。
虽然在设计的过程中遇到各种各样的困难,但最终在老师和同学的帮助下完成了设计。
极大的培养了我们的科研精神,激发了我们的专业兴趣,积累了实践经验,为将来的继续学习和工作打下了基础。
虽然这是我们在期末前的最后一个简单的课程设计,但却让我们学到了很多。
所以希望学院能够多安排一些类似的实践训练,能让我们有更多的机会接触具有现实意义的项目,能接触更多的硬件,更好的提升自己的实践能力和综合能力。
参考文献
[1].沙占友、李学芝著.中外数字万用表电路原理与维修技术.[M]北京:
人民邮电出版社,1993年.P157-P180。
[2].黄志伟主编.全国大学生电子设计竞赛电路设计.[M]北京:
北京航空航天大学出版社,2006年.P5-P21。
[3].戴伏生主编.基础电子电路设计与实践.[M]北京:
国防工业出版社,2002年.P65-68。
[4].谭博学主编.集成电路原理与应用.[M]北京:
电子工业出版社,2003年.P134-P140。
[5].张毅刚、刘杰主编.单片机原理与应用.[M]哈尔滨:
哈尔滨工业大学出版社,2010年.P55-P60。
[6].田立、田清、代方震主编.51单片机C语言程序设计快速入门.[M]北京:
人民邮电出版社,2007年.P123-P144。
[7].刘文涛主编.单片机语言C51典型应用设计.[M]北京:
人民邮电出版社,2005年.P211-P213。
[8].张学昭、王东云主编.单片机原理、接口技术及应用(含C51).[M]西安:
西安电子科技大学出版社,2009年.P33-P45。
[9].高慧芳主编.单片机原理与应用技术.[M]北京:
科学出版社,2010年.P235-P258。
附录I:
总电路图和PCB图
附录II:
元器件清单
序号
编号
名称
型号
数量
1
R1
电阻
4.7K
1
2
R2
电阻
100K
1
3
R3
电阻
5K
1
4
RP1
排阻
5K
1
5
C1、C2
电容
33P
2
6
C3
电容
100u
1
7
S1
按键开关
1
8
X1
晶振
12M
1
9
Q1
三极管
PNP
1
10
LS1
蜂鸣器
1
11
U1
51单片机
AT89C52
1
12
U2
温度传感器
DS18B20
1
13
U3
集成芯片
74HC245
1
14
U4
4位7段数码管
共阳
1
附录Ⅲ:
程序清单
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^7;
sbitbeep=P3^0;
voidreset();//DS18B20复位函数
voidwrite_byte(ucharval);//DS18B20写命令函数
ucharread_byte(void);//DS18B20读1字节函数
voidread_temp();//温度读取函数
voidLED_display();
voidalarm();
uchartempH,tempL,num;
uchartable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9的LED字符编码
ucharsetValue_low=15;
ucharsetValue_high=30;
main()
{
while
(1)
{
read_temp();
LED_display();
alarm();
}
}
voiddelay(uintt)
{
for(;t>0;t--);
}
voidreset()//DS18B20的复位
{
ucharpresence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();
DQ=0;
delay(50);
DQ=1;
delay(6);
presence=DQ;
}
delay(45);
presence=~DQ;
}
DQ=1;
}
voidwrite_byte(ucharval)//DS18B20写一个字节
{
uchari;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
DQ=val&0x01;
delay(6);
val=val>>1;
}
DQ=1;
_nop_();
}
ucharread_byte(void)//DS18B20读一个字节
{
uchari;
ucharvalue=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;
_nop_();_nop_();_nop_();_nop_();
DQ=1;_nop_();_nop_();_nop_();_nop_();
if(DQ)
value|=0x80;
delay(6);
}
DQ=1;
return(value);
}
voidread_temp()//从DS18B20读取温度值
{
ucharch1,ch2;
reset();
write_byte(0xcc);
write_byte(0x44);
reset();
write_byte(0xcc);
write_byte(0xbe);
ch1=read_byte();//DS18B20的温度数值是16位的二进制,精度高,最后四位是温度的小数部分,最高五位为符号位(即正负温度)
ch2=read_byte();
num=(ch2<<4)|(ch1>>4);//只取温度值的中间八位,小数部分舍去,符号位舍去四位。
tempH=num/10;//温度的十位
tempL=num-tempH*10;//温度的个位
}
voidLED_display()//显示检测的温度
{
P2=0x0;
P2=2;
P0=table[tempL];
delay(50);
P2=0x0;
P2=1;
P0=table[tempH];
delay(50);
P2=0x0;
}
voidalarm()//报警
{
if(setValue_low<=num&&setValue_high>=num)
beep=1;//在温度允许范围,不报警
else
beep=~beep;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 数字 温度 报警器 分解