数字温度计单片机课程设计.docx
《数字温度计单片机课程设计.docx》由会员分享,可在线阅读,更多相关《数字温度计单片机课程设计.docx(42页珍藏版)》请在冰豆网上搜索。
数字温度计单片机课程设计
河南理工大学
电子设计综合训练报告
数字温度计
姓名:
-----------------------------
学号:
310708010323/26
专业班级:
电气07-3班
指导老师:
杨凌霄
所在学院:
电气工程与自动化学院
2010年6月9日
摘要
本设计是对一个数字温度计功能的实现,其主要功能是:
1)基本范围-50℃~110℃,2)精度误差小于0.5℃,3)LED数码直读显示,4)扩展功能,5)可以任意设定温度的上下限报警功能。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S51,测温传感器使用DS18B20,用4位共阴极LED数码管,实现温度显示,能准确达到以上要求。
温度计电路设计控制器采用单片机AT89S51,具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
温度传感器采用DS18B20,DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式,仅需要一个端口引脚进行通信,内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
显示电路采用4位共阴极LED数码管,采用LED动态显示方式,从P1口输出段码,P2.0~P2.3作为位选控制端。
1概述……………………………………………………………………………(4)
1.1课程设计的要求…………………………………………………………(4)
1.2课程设计的目的……………………………………………………………(4)
1.3系统组成及工作原理………………………………………………………(4)
2系统总体方案及硬件设计………………………………………………………(5)
2.1设计思路及描述……………………………………………………………(5)2.2硬件构成……………………………………………………………………(5)
〈1〉主控模块AT89C51单片机………………………………………………(5)
〈2〉DS18B20介绍……………………………………………………………(5)
2.3显示模块……………………………………………………………………(9)
2.4开关控制电路模块………………………………………………………(10)
3软件设计……………………………………………………………………(11)
3.1主程序……………………………………………………………………(11)
3.2读取温度子程序…………………………………………………………(11)
3.3温度转换命令子程序……………………………………………………(12)
3.4计算温度子程序……………………………………………………………(12)
3.5温度比较子程序……………………………………………………………(13)
4Proteus软件仿真……………………………………………………………(14)
5课程设计体会………………………………………………………………(17)
参考文献…………………………………………………………………………(17)
附1:
源程序代码………………………………………………………………(18)
附2:
系统原理图………………………………………………………………(33)
1概述
1.1课程设计的要求
1)基本范围-50℃~110℃
2)精度误差小于0.5℃
3)LED数码直读显示
4)扩展功能
5)可以任意设定温度的上下限报警功能
1.2课程设计的目
(1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
(2)掌握按键消抖的方法,LED的动态显示,DS18B20的使用和编程原理。
(3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。
(4)掌握WAVE及proteus仿真软件的使用方法。
1.3系统组成及工作原理
本系统功能是由硬件和软件两大部分协调完成的,硬件部分主要完成各种新号的采集和各种信息的显示的;软件主要完成信号的处理及控功能等。
基于工作原理是89C51单片机对按钮的输入信号的查询和检测,然后对输入信号进行相应处理后通过LED数码管输出。
2系统总体方案及硬件设计
2.1设计思路及描述
本实验设计4个开关按键K1,K2,K3,K4:
其中K2按键按下去时,进入报警上下限设置,按动K2,K3分别对报警上限和下限进行设置,增减由K1进行控制,当设置完毕后,按K4保存并退出。
该实验要求对环境温度进行测量并在LED上显示数据,则可利用AT89C51芯片的P0.7-P0.0管脚对应了接数码管的A,B,C,D,E,F,G和小数点位,P2.0~P2.3接显示数据的小数位、个位、十位、百位(符号位),P3.4端口与DS18B20进行数据传递和通信端口,P3.7端口输出报警信号。
2.2硬件构成
〈1〉主控模块AT89C51单片机
功能特性描述
AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89C51具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
P0口:
P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。
对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
〈2〉DS18B20介绍
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8字节的存储器,结构如图3所示。
头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。
该字节各位的定义如图1所示。
低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。
温度LSB
温度MSB
TH用户字节1
TL用户字节2
配置寄存器
保留
保留
保留
CRC
图1 DS18B20字节定义
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。
第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。
表1是一部分温度值对应的二进制温度数据。
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。
若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。
因此,可用多只DS18B20同时测量温度并进行报警搜索。
在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。
主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。
DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。
其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。
表1 一部分温度对应值表
温度/℃
二进制表示
十六进制表示
+125
0000011111010000
07D0H
+85
0000010101010000
0550H
+25.0625
0000000110010000
0191H
+10.125
0000000010100001
00A2H
+0.5
0000000000000010
0008H
0
0000000000001000
0000H
-0.5
1111111111110000
FFF8H
-10.125
1111111101011110
FF5EH
-25.0625
1111111001101111
FE6FH
-55
1111110010010000
FC90H
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。
系统对DS18B20的各种操作按协议进行。
操作协议为:
初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
ROM操作命令
指令
说明
读ROM命令(33H)
读18B20的序行号
搜索ROM命令(F0H)
识别总线上各器件的编码
匹配ROM命令(55H)
用于多个DS18B20的定位
跳过ROM命令(CCH)
此命令执行后,存储器操作将针对总线上的所有操作
报警搜索ROM命令(ECH)
仅温度超限的器件对此命令做出响应
RAM操作命令
指令
说明
温度转换(44H)
启动温度转换
读暂存器(BEH)
读全部暂存器内容,包括CRC字节
写暂存器(4EH)
写暂存器第2,3和4个字节的数据
复制暂存器(48EH)
将暂存器中的TH,TL和配置寄存器内容复制到EEPROM中
读EEPROM(B8H)
将TH,TL和配置寄存器内容从EEPROM中回读至暂存器
DS18B20的通信协议:
DS18B20器件要求采用严格的通信协议,以保证数据的完整性。
该协议定义了几种信号类型:
复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙。
与DS18B20的通信,是通过操作时隙完成单总线上的数据传输。
发送所有的命令和数据时,都是字节的低位在前,高位在后。
复位和应答脉冲时隙
每个通信周期起始于微控制器发出的复位脉冲,其后紧跟DS18B20发出的应答脉冲,在写时隙期间,主机向DS18B20器件写入数据,而在读时隙期间,主机读入来自DS18B20的数据。
在每一个时隙,总线只能传输一位数据。
写时隙
当主机将单总线DQ从逻辑高拉为逻辑低时,即启动一个写时隙,所有的写时隙必须在60~120us完成,且在每个循环之间至少需要1us的恢复时间。
写0和写1时隙如图所示。
在写0时隙期间,微控制器在整个时隙中将总线拉低;而写1时隙期间,微控制器将总线拉低,然后在时隙起始后15us之释放总线。
读时隙
DS18B20器件仅在主机发出读时隙时,才向主机传输数据。
所以在主机发出读数据命令后,必须马上产生读时隙,以便DS18B20能够传输数据。
所有的读时隙至少需要60us,且在两次独立的读时隙之间,至少需要1us的恢复时间。
每个读时隙都由主机发起,至少拉低总线1us。
在主机发起读时隙之后,DS18B20器件才开始在总线上发送0或1,若DS18B20发送1,则保持总线为高电平。
若发送为0,则拉低总线当发送0时,DS18B20在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态。
DS18B20发出的数据,在起始时隙之后保持有效时间为15us。
因而主机在读时隙期间,必须释放总线。
并且在时隙起始后的15us之内采样总线的状态。
2.3显示模块
显示电路采用4位共阴极LED数码管,采用LED动态显示方式,从P1口输出段码,P2.0~P2.3作为位选控制端。
其中P1做输出口时需要加上拉电阻。
2.4开关控制电路模块
本模块有四个按键来实现报警温度的设置功能,当K2键按下时,系统进入报警温度上下限调整程序,按动K2可以实现对报警温度上限TH增一或减一,按动K3可以实现对报警温度下限TL增一或减一,其加减由按动K1来控制,同时LED显示当前在调的报警温度值,当调整完毕后,按K4键退出调整程序。
3软件设计
3.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,并与温度报警上下限设定值进行比较,同时查询K2是否按下进行报警温度的设置,然后循环执行。
其程序流程见图2所示。
图2主程序流程图图3读取温度流程图
3.2读取温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图3所示。
3.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如图4所示
图4温度转换流程图
3.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如下图所示。
3.5温度比较
此程序是将实际温度与设置的报警上下限比较,决定是否发出报警信号。
由于T为实际温度的绝对值,TH、TL也是温度的绝对值,因此判断大小关系时要通过其正负符号来确定。
4Proteus软件仿真
(1)在正常工作模式下,LED显示当前所测的实际温度。
如果所测温度没有超出报警温度的上下限时,报警指示灯D1和蜂鸣器不动作;若超出所设置的报警上下限温度,报警指示灯D1闪烁同时蜂鸣器发出报警声响。
(2)当K2键按下时,系统进入报警温度上下限调整程序,按动K2可以实现对报警温度TH上限增一或减一,其加减由按动K1来控制,同时LED显示当前的报警温度上限值。
(3)当系统进入报警上下限设置后,按K3键可以实现对报警温度下限TL的增一或减一,其加减同样由按动K1键来控制,同时LED显示当前的报警温度下限值。
5课程设计体会
经过一个学期的学习,我们对单片机已经有了初步的认识,对于它的基本组成和结构已经有了简单的了解,这一周的课程设计让我体会到很多东西,不仅仅是有关单片机基本知识的,更多的是自己动手能力和逻辑思维能力的锻炼,同时,我更是知道了自己的不足,有好多东西是需要好好学习的。
其实要做出来做好这个课程设计是不容易的,是要付出很多心思的。
一开始我根本摸不着头脑,也没有什么想法,对四个题目都没感觉,用汇编根本编不出大程序,后来我还是决定做相对熟悉的c语言来编写。
于是,我就开始上网,去学校图书馆查询有关单片机的各种资料,每天一起来就是看书、查资料、编程、修改,写程序用了几天,还参考了好多参考书里设计实例的程序,加加减减的,还找同学指点,最后弄好了,可就是调试不出想要的结果,怎么找都找不到原因,最后还是与同学一起讨论、查找,在他们的帮助和积极引导下,才找出问题,做出很大的修改解决了问题。
还有就是画图和调试,真是一个很令人头疼的事情,要照顾好多方面的,需要细心才行。
在社会工程实践应用中,单片机开发系统的研制仍是一个热门话题,所以我想还是有必要再好好学习以下单片机的,这对我们以后的工作应是有好处的。
总之,这次课程设计让我学会了很多,也收获了很多,我想我是满意的。
从中我知道了任何事情都是从不懂到懂、从不熟练到熟练的过程,有问题并不可怕,关键是要找到方法去解决问题,思考、查资料、修改并勤于动手。
最后,非常感谢在设计中给予过我帮助的老师和同学。
参考文献
[1]余发山.单片机原理及应用技术.徐州:
中国矿业大学出版社,2003
[2]谭浩强.单片机课程设计.北京:
清华大学出版社,1989
[3]何立民.单片机应用技术大全.北京:
北京航空航天大学出版社,1994
[4]杨凌霄,微型计算机原理及应用.江苏:
中国矿业大学出版社,2004
[5]张毅刚.单片机原理及接口技术.哈尔滨:
哈尔滨工业大学出版社,1990
[6]李广弟.单片机基础.北京:
北京航空航天大学出版社,1992
附1:
源程序代码
TEMP_ZHDATA24H;实时温度值整合后存放单元
TEMPLDATA25H
TEMPHDATA26H
TEMP_THDATA27H;高温报警值存放单元
TEMP_TLDATA28H;低温报警值存放单元
TEMPHHDATA29H;百位数bcd码存放单元
TEMPHLDATA2AH;十位数bcd码存放单元
TEMPLHDATA2BH;个位数bcd码存放单元
TEMPLLDATA2CH;小位数bcd码存放单元
SIGNEQU20H.3;1=温度为负,0=温度为正
K1EQUP1.4
K2EQUP1.5
K3EQUP1.6
K4EQUP1.7
BEEPEQUP3.7
FLAG1EQU20H.0;DS18B20是否存在/1存在,0不存在
DQEQUP3.4
;=====================================================
ORG0000H
JMPMAIN
MAIN:
MOVSP,#60H
MOVA,#00H
MOVR0,#20H;将20H-2FH单元清零
MOVR1,#10H
CLEAR:
MOV@R0,A
INCR0
DJNZR1,CLEAR
LCALLTHTL_DISP
MOVR1,#250
MMM1:
LCALLDELAY
DJNZR1,MMM1
START:
CALLRESET;18B20复位子程序
JNBFLAG1,START1;DS1820不存在
CALLREAD_E2;从eerom拷贝TH\TL到暂存器
JMPSTART2
START1:
JMP$
START2:
CLRBEEP
CALLRESET
JNBFLAG1,START1;DS1820不存在
MOVA,#0CCH;跳过ROM匹配
CALLWRITE
MOVA,#44H;发出温度转换命令
CALLWRITE
CALLRESET
MOVA,#0CCH;跳过ROM匹配
CALLWRITE
MOVA,#0BEH;发出读温度命令
CALLWRITE
CALLREAD
CALLCONV_TEMP
CALLLED_DISP
CALLTEMP_COMP
CALLPROC_K2
JMPSTART2
;-----------------------------------------------------
;============================================
;检测是否有键按下
;============================================
PROC_K2:
;按键K2处理
JBK2,PROC_END
CALLDELAY
JBK2,PROC_END
JNBK2,$
CALLBZ55_127
MOV29H,#0BH;H的bcd码送百位
MOVR4,TEMP_TH
LCALLTHTL_BCD
LCALLTHTL_DISP
CALLSE