单片机上下限温度报警器课程设计文档.docx
《单片机上下限温度报警器课程设计文档.docx》由会员分享,可在线阅读,更多相关《单片机上下限温度报警器课程设计文档.docx(26页珍藏版)》请在冰豆网上搜索。
单片机上下限温度报警器课程设计文档
《温度控制器的设计》
课程设计报告
系别:
信息科学与技术系
专业班级:
通信技术0802班
学生姓名:
张丛振
指导教师:
陈青
(课程设计时间:
2010年6月26日——2010年7月9日)
华中科技大学武昌分校
1.课程设计目的…………………………………………………………………3
2.课程设计题目描述和要求……………………………………………………3
3.课程设计报告内容……………………………………………………………6
3.189c1051/2051简述……………………………………………………………6
3.2DS18B20内部结构与测温原理………………………………………………8
3.3七段LED译码器CD4511…………………………………………………12
3.4驱动芯片ULN2003…………………………………………………………12
4.总结……………………………………………………………………………13
参考文献…………………………………………………………………………15
附:
1.设计总程序清单…………………………………………………………………16
前言
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场合。
该设计控制器使用单片机AT89C2051,测温传感器使用DS18B20,用四位共阴极LED数码管实现温度显示,能准确达到以上要求。
一、课程设计目的
这次课程设计实践是本学期的一项必修课程,它的意义在于除了完成规定的内容之外,还要能有所创新。
将这一学期学到的单片计算机原理的内容运用到实际生活中,从而进一步巩固学到的理论知识。
学会焊接电路板,这是硬件部分的;其次还要能够编写程序让单片机工作起来。
二、课程设计题目描述与要求
课程设计题目:
温度控制器的设计
在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89C2051,温度传感器采用DS18B20,用2位LED数码管以并口传送数据实现温度显示。
图1总体设计方框图
设计要求:
1.用89c2051单片机和数字温度传感器ISD18B20构成温度采样报警小系统2.给电路板上的两个按键设定相应的功能:
通过两个按键设定最高和最低限定温度使得当室内温度上升到温度上限或下降到温度下限的时候能够让蜂鸣器发出报警3.设定的温度能够自行调整。
整体方案设计
系统结构:
如下图
三、课程设计报告内容
本实验运用的主控制器是ATMEL公司生产的AT89C2051单片机AT89C2051具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
(一)硬件系统
1.单片机显示部分
是在单片机控制下,由MC4511产生BCD译码,ULN2003完成驱动显示的简单方法,同时可以有两路按键响应装置。
还可以外扩串口I2CROM,完成掉电数据保护功能。
电路中还包含复位电路和时钟电路。
2.报警控制部分
报警部分由三极管T2蜂鸣器BEEL构成.控制部分由光电隔离器(光电耦合)U7/U8,继电器JDQ1/2组成。
3.温度探测存储部分
由DS18B20采集温度,和24C16保存掉电数据。
3.189c1051/2051简述
1、AT89C1051/2051只有20只引脚,压缩了I/O端口与存储器容量,其余配置与功能不减,可方便地应用于家电产品及小型仪器仪表,是性能价格比极优的单片机。
AT89C1051和AT89C2051的结构框图与引脚配置分别见附图7-7和附图7-8。
图1-1AT89C1051/2051引脚图
图1-2AT89C1051/2051结构框图
由附图7-7和附图7-8可见,AT89C1051/AT89C2051把原地址与数据总线有关的引脚全部压缩掉,使为20脚封装。
但I/O端口线还有15条,其中8条.仍具有第二功能。
除P3口的6个引脚(P3.0~P3.5)的第二功能与MCS—5l系列完全一致外,P1.0和P1.l还具有模拟比较器的功能。
当需要使用模拟比较器时,P1.0(AINO)作为同相输人端,P1.1(AINI)作为反相输入端。
比较的结果由P3.6位的状态确定。
若P3.6为1,说明AINO电位高于AINI;若P3.6为0则反之。
注意,P3.6没有引出片外,其状态可直接在片内特殊功能寄存器中通过位寻址读出。
2、AT89C2051内有两个闪烁存储器程序加密位,可以被编程或不被编程器件内有一闪烁存储器地址计数器,计数器在RST上升沿复位为000H,在XTAL1引脚上加高电平脉冲则自动加l。
宜采用以下步骤对AT89C2051编程:
加上电源后,RST及P3.2加高电平;P3.3~P3.5,P3.7加上写人数据代码模式的逻辑电平;在P1.0~P1.7上加上地址000H的数据代码;RST引脚电平升高到12V;P3.2加人一低电平脉冲,则一字节数据被编程写人。
以此类推,直到最后一个字节编程完毕。
编程完毕后,应使XTAL1降到低电平,RST也降至低电平,然后悬浮所有相关I/O引脚,关掉电源。
AT89C2051有三个特征字可读出,以识别该器件。
这种读特征字操作与读000H,00lH,002H地址单元内容操作相同,只是有关信号的逻辑电平有所不同。
3.2DS18B20内部结构与测温原理
DS18B20温度传感器由64位ROM、温度传感器、非挥发的温度报警触发器及高速缓存器这4个部分组成。
DS18B20可编程温度传感器有3个管脚:
GND为接地线,DQ为数据输入输出接口,通过一个较弱的上拉电阻与单片机相连。
VDD为电源接口,既可由数据线提供电源,又可由外部提供电源,范围3.0~5.5V。
本文使用外部电源供电[9]。
如图2-4所示。
图1-5DS18B20的系统结构
首先来介绍一下DS18B20这块传感器的特性及其功能:
⑴用户可自设定报警上下限温度值。
⑵不需要外部组件,能测量-55~+125℃范围内的温度。
⑶-10℃~+85℃范围内的测温准确度为±0.5℃。
⑷通过编程可实现9~l2位的数字读数方式,可在至多750ms内将温度转换成12位的数字,测温分辨率可达0.0625℃。
⑸独特的单总线接口方式,与微处理器连接时仅需要一条线即可实现与处理器双向通讯。
再来看看DS18B20的内部结构:
DS18B20内部功能模块主要由4部分组成:
64位光刻R0M、温度传感器、非易失性的温度报警触发器TH和TL、配置寄存器。
R0M中的64位序列号是出厂前被光刻好的,他可以看作是该DSISB20的地址序列码,每个DSI8B20的64位序列号均不相同。
高低温报警触发器TH和TL,配置寄存器均由一个字节E2PROM组成,使用一个存储器功能命令可对TH,TL或配置寄存器写入。
配置寄存器中R1,R0决定温度转换的精度位数:
R1R0=’00’,9位精度,最大转换时间为93.75ms;R1R0=‘01’,10位精度,最大转换时间为187.5ms;R1R0=‘10’,11位精度,最大转换时间为375ms;R1R0=’11’,12位精度,最大转换时间为750ms;未编程时默认为12位精度。
本系统采用的也是12位的精度。
其中64位光刻ROM如下图2-5所示。
图1-6DS18B20的64位光刻ROM
接着再来了解一下DS18B20的内存结构与温度测试的功能:
DSI8B20温度传感器的内部存储器包括一个高速暂存RAM(便笺式的内部存储器)和一个非易失性的可电擦除的EEPROM,后者存放高温和低温触发器TH,TL和结构寄存器。
便笺存储器包含了9个连续字节(0~8),前两个字节是测得温度信息如图1-7所示,字节0的内容是温度的低8位,字节1是温度的高8位,字节2是TH(温度上限报警),字节3是TL(温度下限报警),字节4是配置寄存器如图2-7所示,用于确定输出分辨率9到12位。
第5、6、7个字节是预留寄存器,用于内部计算。
字节8是冗余检验字节,校验前面所有8个字节的CRC码,可用来保证通信正确。
双字节12位温度格式与十进制温度的转换关系
图1-7分辨率设置表
当DSI8B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃/LSB形式表示。
温度值格式如图2—6所示,其中“S”为标志位,对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。
图4下面的表是对应的一部分温度值。
DSI8B20完成温度转换后,就把测得的温度值与TH做比较,若T>TH或T最后再来介绍一下DSl820工作过程中的协议:
初始化->RoM操作命令->存储器操作命令->处理数据
⑴初始化
单总线上的所有处理均从初始化开始;
⑵ROM操作品令
总线主机检测到DSl820的存在便可以发出ROM操作命令之一,这些命令如:
指令 代码
ReadROM(读ROM) [33H]
MatchROM(匹配ROM) [55H]
SkipROM(跳过ROM] [CCH]
SearchROM(搜索ROM) [F0H]
Alarmsearch(告警搜索) [ECH]
⑶存储器操作命令
指令 代码
WriteScratchpad(写暂存存储器) [4EH]
ReadScratchpad(读暂存存储器) [BEH]
CopyScratchpad(复制暂存存储器) [48H]
ConvertTemperature(温度变换) [44H]
RecallEPROM(重新调出) [B8H]
ReadPowersupply(读电源) [B4H]
3.3七段LED译码器CD4511
4511译码器指的是将单片机89C2051转换过来的十进制数(8421BCD码)直接在数码管上显示,这就不需要字模。
本设计所选用的译码器CD4511是4-7段(4输入,7输出)锁存译码器/驱动器,它是输出高电平有效的CMOS译码器。
其输入为8421BCD码。
它与七段数码管配合使用。
7、1、2、6脚接是8421BCD码的输入端,分别对应A、B、C、D其中D是8421BCD码的最高位。
/LT是试灯端,低电平有效,当其为低电平时,所有笔划全部亮,如不亮表示该笔划有问题。
/BL是灭灯端,低电平有效,当其为低电平时,不管输入的数据状态如何,其输出全为低电平。
LE是选通/锁存端,它是一个复用的功能端,当输入为低电平时,其输出与输入的变量有关;当输入为高电平时,其输出仅与该端为高电平前的状态有关,并且输入D、C、B、A端不管怎么变化,其显示数值保持不变。
a-g是译码输出端,为高电平有效,故其输出应与共阴极的数码管相对应。
其引脚图如图1-9。
3.4驱动芯片ULN2003
驱动芯片ULN2003内含7个共射级的达林顿阵列。
由于其内部带有反向器,其输出电流将会很大,一般情况下其输出电流为500ma,峰值可达到600ma。
输出电压为50V。
由于达林顿管是一种“三极管级连三极管”的电路,其驱动能力较一般的驱动电路要强很多。
它可以驱动直流电动机、LED显示屏、灯丝灯具、以及大功率的缓冲器等等。
其引脚图如图1-10所示。
IN1-7是七个输入端,OUT1-7是七个输出端。
8脚接地。
9脚接电源。
在要求输出电压高于5V时才用接VCC;若输出电压小于等于5V,则不用接[。
图1-10ULN2003的引脚图
驱动芯片ULN2003可以提供七个输出。
每个的内部驱动电路都是一样的,如图1-11所示。
图2-11ULN2003的内部驱动电路
(二)软件系统要求
1、采集并显示温度值(要求精度1°C)提高部分为0.1°C。
2、有温度上下限控制,并发音报警,同时开启相应继电器。
3、扩展要求,能显示时间,并能设定报警温度值,能记忆报警时的温度值和报警时间点。
四、总结
自单片机课程设计的第一天起,我就对这次的课程设计充满了信心。
我们首先听老师讲了一遍所选设计课题的大概工作原理。
然后焊接元器件,依据老师所讲的结合辅导书上所给的电路图,将各个元件按照电路图上正确的位置放好然后进行焊接。
焊完板子以后用老师写的测试程序烧录到单片机中然后在电路上试运行,就能够检验板子的线路是否完全的连通和找出板子上的虚焊的地方。
在这些都弄完之后,就要开始编写程序、调程序了。
经过三个星期的课程设计,我们不仅丰富了自己学的那些知识,更多的还有锻炼了团队合作精神。
在这次的课程设计过程中,我查阅了大量的资料,为了让自己的设计更加完善,查阅这方面的资料是十分必要的,同时也是必不可少的。
其次,在课程设计过程中也运用到了以前所学到的专业课知识,如:
模拟电子技术,数字电子线路,C汇编语言等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去做效率往往很高,这是我做这次课程设计的又一收获。
然后,要做好一个课程设计,就必须得做到:
在设计程序之前,对所用的单片机的内部结构有一个系统了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在程序设计时,不能妄想一次将整个程序设计好;反复修改、不断改进是程序设计的必经之路;要养成注释的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
课程设计结束了,但是从中学到的东西让我从中受益。
发现、提出、分析、解决问题和实践能力的提高都会受益于我以后的学习、工作和生活中。
设计过程中,好比是我们人类成长的历程,常有一些不如意,但毕竟只是一次经验,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解的不够深刻,掌握的不够牢固。
我们通过查阅大量有关资料,并在小组中讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时的请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次的课程设计我也发现了自己存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这同时也激发了我今后努力学习的兴趣,我想这将对我以后的学习产积极的影响。
通过这次课程设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的道路做榜样。
参考文献:
[1]朱定华.单片微机原理与应用.北京:
清华大学出版社,2003.
[2]朱定华.模拟电子技术.北京:
清华大学出版社,2005.
[3]何立民.MCS-51系列单片机应用系统设计-系统配制与接口技术.北京:
北京航空航天大学出版社,2002.
[4]单片机原理课程设计指导书.陈青编写丘光纯审,2010.
[5]楼然苗,李光飞.51系列单片机设计实例.北京:
北京航空航天大学出版社,2003.
附1:
设计总程序
TEMPER_LEQU36H
TEMPER_HEQU35H
TEMPER_NUMEQU59H
TEMPER_XIAOEQU60H
TEMP_THEQU27H;高温报警值存放单元
TEMP_TLEQU28H;低温报警值存放单元
TEMP_ZHDATA24H;实时温度值存放单元
FLAGBIT00H
DQBITP3.1
K1EQUP3.2
K2EQUP3.3
;主控制程序;
MAIN:
LCALLGET_TEMPER
LCALLTEMPER_COV
LCALLTBCD_DISP
LCALLDISPLAY
LCALLKEY
LCALLALLERT
LJMPMAIN
ALLERT:
MOVA,TEMP_TH
SUBBA,TEMPER_NUM;减数>被减数,则
JCCHULI1;借位标志位C=1,转
MOVA,TEMPER_NUM
SUBBA,TEMP_TL;减数>被减数,则
JCCHULI1;借位标志位C=1,转
RET
CHULI1:
SETBP3.7
LCALLWA
CLRP3.7
RET
;按键模块
KEY:
MOVTEMP_TH,#30H;判断是否有控制键按下
MOVTEMP_TL,#25H
KEY1:
JNBP3.2,S1
JNBP3.3,S2
LCALLGET_TEMPER
LCALLTEMPER_COV
LCALLTBCD_DISP
LCALLDISPLAY
LCALLALLERT
LJMPKEY1
S1:
LCALLDELAY3;去抖动
JBP3.2,KEY1
MOVA,TEMP_TH
ADDA,#1
DAA
MOVTEMP_TH,A
CJNEA,#99H,J0
MOVTEMP_TH,#0
S2:
LCALLDELAY3
JBP3.3,KEY1
MOVA,TEMP_TL
ADDA,#1
DAA
MOVTEMP_TL,A
CJNEA,#99H,J1
MOVTEMP_TL,#0
LJMPKEY1
;等待按键抬起
J0:
JBP3.2,KEY1
LCALLLOOK_ALARM
SJMPJ0
J1:
JBP3.3,KEY1
LCALLLOOK_ALARM
SJMPJ1
LOOK_ALARM:
MOVA,TEMP_TH;加载TH数据
MOVTEMP_TH,A
ANLA,#0FH
MOV63H,A
MOVA,TEMP_TH
ANLA,#0F0H
SWAPA
MOV64H,A
MOVA,TEMP_TL;加载TL数据
MOVTEMP_TL
ANLA,#0FH
MOV65H,A
MOVA,TEMP_TL
ANLA,#0F0H
SWAPA
MOV66H,A
CALLDISPLAY;显示数据
RET
;==========================================================
;显示子程序
;==========================================================
DISPLAY:
MOVR0,#66H
MOVR2,#4
MOVA,@R0
ORLA,#20H
MOVP1,A
DECR0
LCALLWAIT
MOVA,@R0
ORLA,#10H
MOVP1,A
DECR0
LCALLWAIT
MOVA,@R0
ORLA,#80H
MOVP1,A
DECR0
LCALLWAIT
MOVA,@R0
ORLA,#40H
MOVP1,A
LCALLWAIT
RET
;====================================
;读出转换后的温度值
;====================================
GET_TEMPER:
SETBDQ
BCD:
LCALLINIT_1820
JBFLAG,S22
LJMPBCD
S22:
LCALLDELAY1
MOVA,#0CCH
LCALLWRITE_1820
MOVA,#44H
LCALLWRITE_1820
NOP
LCALLDELAY
LCALLDELAY
CBA:
LCALLINIT_1820
JBFLAG,ABC
LJMPCBA
ABC:
LCALLDELAY1
MOVA,#0CCH
LCALLWRITE_1820
MOVA,#0BEH
LCALLWRITE_1820
LCALLREAD_1820;READ_1820
RET
;写DS18B20的程序
WRITE_1820:
MOVR2,#8
CLRC
WR1:
CLRDQ
MOVR3,#6
DJNZR3,$
RRCA
MOVDQ,C
MOVR3,#23
DJNZR3,$
SETBDQ
NOP
DJNZR2,WR1
SETBDQ
RET
READ_1820:
MOVR4,#2;将温度高地位读出
MOVR1,#36H;地位存入36H
RE00:
MOVR2,#8
RE01:
CLRC
SETBDQ
NOP
NOP
CLRDQ
NOP
NOP
NOP
SETBDQ
MOVR3,#7
DJNZR3,$
MOVC,DQ
MOVR3,#23
DJNZR3,$
RRCA
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
RET
;将ds18b20中读出温度数据进行转换
TEMPER_COV:
MOVA,#0F0H
ANLA,TEMPER_L
SWAPA
MOVTEMPER_NUM,A
MOVA,TEMPER_L
JNBACC.3,TEMPER_COV1
SETBP3.5
MOVA,T