课程设计论文基于单片机温度监测系统Word格式文档下载.docx
《课程设计论文基于单片机温度监测系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课程设计论文基于单片机温度监测系统Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
11
参考文献:
12
附录Ⅰ元件清单12
附录Ⅱ总体电路图13
附录Ⅲ源程序14
基于单片机的温度检测系统设计
沈阳航空航天大学自动化学院
摘要:
随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研等各个领域,已经成为一种比较成熟的技术。
本文主要设计了一个基于AT89C51单片机的温度监测系统,详细描述了利用数字传感器DS18B120完成监测温度的过程,重点对系统的硬件连接,软件编程,各模块系统流程以及各部分的电路进行了分析介绍。
本设计是以AT89C51为核心,通过温度传感器DS18B20将温度值转换为电量输出,可以利用小键盘设定温度的最大值和最小值,对于超过最大值或者最小值的温度数据通过红黄灯进行报警,所以这个系统使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合我们日常生活和工、农业生产中的温度测量,具有广泛的应用前景。
关键词:
单片机AT89C51;
温度采集;
温度传感器DS18B20;
报警功能
一.前言
传统的温度检测以热敏电阻为温度敏感元件。
热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。
这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
本设计选用STC89C52型单片机作为主控制器件,DS18B20作为测温传感器,通过LED数码管实现温度显示。
通过DS18B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在0℃~100℃最大线性偏差小于0.01℃。
该器件可直接向单片机传输数字信号,便于单片机处理及控制。
另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。
二.基本功能与参数
2.1系统基本功能
a.实现温度的实时测量与显示。
b.可手动设置监测温度范围的上限和下限。
c.超出温度监测范围,可进行声光报警或执行预定操作。
2.2参数
a.DS18B20的温度测量范围为-55°
C~+125°
C,在-20°
C~+60°
C范围内,精度为±
0.5°
C
b.显示温度值精确到0.1°
C,监测温度精确到1°
c.精度误差小于0.5℃
三.系统总体设计
本设计的温度测量报警系统以STC89C52单片机为核心部件,外加温度采集电路、键盘及显示电路、越限报警等电路。
采用数字温度芯片DS18B20测量温度,输出信号全数字化。
由数字温度计DS18B20和STC89C52单片机构成的温度测量装置,它直接输出温度的数字信号。
利用STC89S52芯片控制温度传感器DS18B20进行实时温度检测并显示,快速测量环境温度,并可以根据需要设定上下限温度。
系统框图如图1所示。
图1DS18B20温度测温系统框图
四.硬件设计
4.1单片机最小系统设计
4.1.1电源电路
图2电源电路
4.1.2振荡电路与复位电路
晶振采用12MHZ。
复位电路采用上电加按钮复位。
图3振荡电路图4复位电路
4.2DS18B20与单片机的接口电路
图5DS18B20与单片机的接口电路
4.3独立式键盘电路
图6独立式键盘电路
4.4报警模块
图7报警电路
4.5数码管显示模块
显示电路采用4位共阴极LED数码管,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。
P2口的低四位作为数码管的位选端。
采用动态扫描的方式显示。
图8数码管显示电路
4.6proteus仿真图
图9proteus仿真图
4.7DS18B20简单介绍
DS18B20的性能特点如下
●独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
●DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
●DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
●适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电
●温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃
●零待机功耗
●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
●在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
●用户可定义报警设置
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件
●测量结果直接输出数字温度信号,以"
一线总线"
串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列、各种封装形式如图11所示,DQ为数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源;
GND为地信号;
VDD为可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
图10外部封装形式
五.软件设计
系统程序主要包括主程序、读取温度子程序、温度转换命令子程序、计算温度子程序、按键扫描处理子程序、显示数据子程序等。
5.1主程序流程图
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见图11所示。
图11主程序流程图
5.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图12所示。
5.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如上图,图13所示。
图12读温度流程图图13温度转换流程图
5.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图14所示。
图14 计算温度流程图
5.5按键扫描处理子程序
按键采用扫描查询方式,设置标志位,当标志位为1时,显示设置温度,否则显示当前温度。
如下图15示。
图15按键扫描处理子程序
此次实习我用单片机做一个完整的系统,在完成的过程中走了很多弯路,比如由于对硬件方面的东西尚不熟,查阅资料以及准备材料时都没有考虑到实践的可行性,在这里要特别感谢实验室的老师给予了我们耐心的指导,并给我们提出了建设性的意见。
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,,虽然以前写过几次程序,但我觉的写好一个程序并不简单。
正是通过这些弯路我们才真正学到了不少东西。
在做系统的同时,和同学们之间的相互探讨也使我获益匪浅。
我们必须学会独立思考,用自己的能力去完成一件作品。
有好多的东西,只有我们去试着做了,才能真正的掌握。
[1]张鑫.单片机原理与应用电子工业出版社2010.1
[2]马忠梅,张凯,等.单片机的C语言应用程序设计(第四版)北京航空航天大学出版社
[3]包建华,张兴奎等.单片机原理实验与实训教程东南大学出版社2008.9
[4]刘文涛.单片机语言C51典型应用设计.北京:
人民邮电出版社,1998
[5]尹勇,李宇.μVision2单片机应用程序开发指南.北京:
科学出版社,1998
[6]蔡朝洋.单片机控制实习与专题制作.北京:
北京航天航空大学出社,2000
[7]刘复华.单片机及其应用系统.北京:
清华大学出版社,1992
[8]彭为.单片机典型系统设计实例精讲及其应用系统.北京:
电子工业出版社,2006
[9]李斌,董慧颖.可重组机器人研究和发展现状.沈阳工业学院学报,2000,19(4):
23-27
[10]张道德.单片机接口技术(C51版).北京:
水利水电出版社,1995
附录Ⅰ元件清单
元件名称
型号
数量
单片机
AT89C51
1
电平转换芯片
74HC573
2
数码管
7SEG-MPX4-CA
按键
BUTTON
4
电阻
RES
附录Ⅱ总体电路图
附录Ⅲ源程序
源程序如下
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitds=P2^0;
sbitdula=P2^6;
sbitwela=P2^7;
sbitbeep=P2^1;
sbitSET1=P2^2;
//定义上限显示调整键
sbitDEC=P2^3;
//定义增加减少键
sbitADD=P2^4;
sbitSET2=P2^5;
//定义下限显示调整键
inttemp;
floatf_temp;
intwarn_l1=50;
intwarn_l2=0;
intwarn_h1=300;
intwarn_h2=1000;
/************************xianshi*********************/
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,
0x40
};
voiddelay(intz)
{
inta,b;
for(a=0;
a<
z;
a++)
for(b=0;
b<
120;
b++);
}
voiddisplay(ucharnum,uchardat)
{
uchari;
dula=0;
wela=0;
wela=1;
i=0x00;
i=i|(~(((0x01)<
<
(num))));
P0=i;
dula=1;
P0=table[dat];
dula=0