1、数字温度计单片机课程设计河南理工大学电子设计综合训练报告数字温度计姓 名: -学 号: 310708010323 /26 专业班级: 电气07-3班 指导老师: 杨凌霄 所在学院:电气工程与自动化学院2010年6月9日摘要本设计是对一个数字温度计功能的实现,其主要功能是:1)基本范围-50110,2)精度误差小于0.5,3)LED数码直读显示,4)扩展功能,5)可以任意设定温度的上下限报警功能。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S51,测温传感器使
2、用DS18B20,用4位共阴极LED数码管,实现温度显示,能准确达到以上要求。温度计电路设计控制器采用单片机AT89S51,具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。温度传感器采用DS18B20,DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现位的数字值读数方式,仅需要一个端口引脚进行通信,内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。显示电路采用4位共阴极L
3、ED数码管,采用LED动态显示方式,从P1口输出段码,P2.0P2.3作为位选控制端。1 概述 (4) 1.1 课程设计的要求 (4) 1.2课程设计的目的(4) 1.3 系统组成及工作原理(4)2 系统总体方案及硬件设计(5) 2.1设计思路及描述(5) 2.2硬件构成(5) 1主控模块AT89C51单片机(5) 2DS18B20介绍 (5) 2.3显示模块(9) 2.4开关控制电路模块 (10)3 软件设计 (11) 3.1主程序 (11) 3.2读取温度子程序 (11) 3.3温度转换命令子程序 (12)3.4计算温度子程序(12)3.5温度比较子程序(13)4 Proteus软件仿真(
4、14)5 课程设计体会 (17)参考文献(17)附1:源程序代码(18)附2:系统原理图(33)1 概述1.1课程设计的要求1)基本范围-501102)精度误差小于0.53)LED数码直读显示4)扩展功能5)可以任意设定温度的上下限报警功能1.2课程设计的目(1) 通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。(2)掌握按键消抖的方法,LED的动态显示,DS18B20的使用和编程原理。(3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。(4)掌握WAVE及proteus仿真软件的使用方法。1.3 系统组成及工作原理本系统功能是由硬件和
5、软件两大部分协调完成的,硬件部分主要完成各种新号的采集和各种信息的显示的;软件主要完成信号的处理及控功能等。基于工作原理是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和小数点位
6、,P2.0P2.3接显示数据的小数位、个位、十位、百位(符号位),P3.4端口与DS18B20进行数据传递和通信端口,P3.7端口输出报警信号。 2.2硬件构成 1主控模块AT89C51单片机功能特性描述 AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程 Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89C51
7、具有以下标准功能: 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”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时
8、,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”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入
9、使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 2DS18B20介绍 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5V;零待机功耗;温度以9或12位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
10、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分
11、辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图1所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。温度 LSB温度 MSBTH用户字节1TL用户字节2配置寄存器保留保留保留CRC 图1 DS18B20字节定义高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以1
12、6位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位S0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表1是一部分温度值对应的二进制温度数据。DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若TH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有
13、效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1
14、和温度寄存器被预置在55所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。表1一部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550
15、H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行
16、。操作协议为:初使化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和配置寄存器内容复制到
17、EEPROM中读EEPROM(B8H)将TH,TL和配置寄存器内容从EEPROM中回读至暂存器DS18B20的通信协议:DS18B20器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙。与DS18B20的通信,是通过操作时隙完成单总线上的数据传输。发送所有的命令和数据时,都是字节的低位在前,高位在后。复位和应答脉冲时隙每个通信周期起始于微控制器发出的复位脉冲,其后紧跟DS18B20发出的应答脉冲,在写时隙期间,主机向DS18B20器件写入数据,而在读时隙期间,主机读入来自DS18B20的数据。在每一个时隙,总线只能传
18、输一位数据。写时隙当主机将单总线DQ从逻辑高拉为逻辑低时,即启动一个写时隙,所有的写时隙必须在60120us完成,且在每个循环之间至少需要1us的恢复时间。写0和写1时隙如图所示。在写0时隙期间,微控制器在整个时隙中将总线拉低;而写1时隙期间,微控制器将总线拉低,然后在时隙起始后15us之释放总线。读时隙 DS18B20器件仅在主机发出读时隙时,才向主机传输数据。所以在主机发出读数据命令后,必须马上产生读时隙,以便DS18B20能够传输数据。所有的读时隙至少需要60us,且在两次独立的读时隙之间,至少需要1us的恢复时间。每个读时隙都由主机发起,至少拉低总线1us。在主机发起读时隙之后,DS1
19、8B20器件才开始在总线上发送0或1,若DS18B20发送1,则保持总线为高电平。若发送为0,则拉低总线当发送0时,DS18B20在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态。DS18B20发出的数据,在起始时隙之后保持有效时间为15us。因而主机在读时隙期间,必须释放总线。并且在时隙起始后的15us之内采样总线的状态。 2.3显示模块 显示电路采用4位共阴极LED数码管,采用LED动态显示方式,从P1口输出段码,P2.0P2.3作为位选控制端。其中P1做输出口时需要加上拉电阻。2.4开关控制电路模块本模块有四个按键来实现报警温度的设置功能,当K2 键按下时,系统进入 报警温度上
20、下限调整程序,按动K2可以实现对报警温度上限TH增一或减一,按动K3可以实现对报警温度下限TL增一或减一,其加减由按动K1来控制,同时LED显示当前在调的报警温度值,当调整完毕后,按K4键退出调整程序。3 软件设计3.1主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,并与温度报警上下限设定值进行比较,同时查询K2是否按下进行报警温度的设置,然后循环执行。其程序流程见图2所示。 图2主程序流程图 图3 读取温度流程图 3.2读取温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如
21、图3所示。3.3温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图4所示图4 温度转换流程图3.4 计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如下图所示。 3.5温度比较 此程序是将实际温度与设置的报警上下限比较,决定是否发出报警信号。由于T为实际温度的绝对值,TH、TL也是温度的绝对值,因此判断大小关系时要通过其正负符号来确定。4 Proteus软件仿真(1)在正常工作模式下,LED显示当前所测的
22、实际温度。如果所测温度没有超出报警温度的上下限时,报警指示灯D1和蜂鸣器不动作;若超出所设置的报警上下限温度,报警指示灯D1闪烁同时蜂鸣器发出报警声响。(2)当K2 键按下时,系统进入 报警温度上下限调整程序,按动K2可以实现对报警温度TH上限增一或减一,其加减由按动K1来控制,同时LED显示当前的报警温度上限值。(3)当系统进入报警上下限设置后,按K3键可以实现对报警温度下限TL的增一或减一,其加减同样由按动K1键来控制,同时LED显示当前的报警温度下限值。5 课程设计体会经过一个学期的学习,我们对单片机已经有了初步的认识,对于它的基本组成和结构已经有了简单的了解,这一周的课程设计让我体会到
23、很多东西,不仅仅是有关单片机基本知识的,更多的是自己动手能力和逻辑思维能力的锻炼,同时,我更是知道了自己的不足,有好多东西是需要好好学习的。其实要做出来做好这个课程设计是不容易的,是要付出很多心思的。一开始我根本摸不着头脑,也没有什么想法,对四个题目都没感觉,用汇编根本编不出大程序,后来我还是决定做相对熟悉的c语言来编写。于是,我就开始上网,去学校图书馆查询有关单片机的各种资料,每天一起来就是看书、查资料、编程、修改,写程序用了几天,还参考了好多参考书里设计实例的程序,加加减减的,还找同学指点,最后弄好了,可就是调试不出想要的结果,怎么找都找不到原因,最后还是与同学一起讨论、查找,在他们的帮助
24、和积极引导下,才找出问题,做出很大的修改解决了问题。还有就是画图和调试,真是一个很令人头疼的事情,要照顾好多方面的,需要细心才行。 在社会工程实践应用中,单片机开发系统的研制仍是一个热门话题,所以我想还是有必要再好好学习以下单片机的,这对我们以后的工作应是有好处的。总之,这次课程设计让我学会了很多,也收获了很多,我想我是满意的。从中我知道了任何事情都是从不懂到懂、从不熟练到熟练的过程,有问题并不可怕,关键是要找到方法去解决问题,思考、查资料、修改并勤于动手。最后,非常感谢在设计中给予过我帮助的老师和同学。参考文献 1 余发山.单片机原理及应用技术.徐州:中国矿业大学出版社,20032 谭浩强.
25、单片机课程设计. 北京:清华大学出版社,19893 何立民.单片机应用技术大全.北京:北京航空航天大学出版社, 19944 杨凌霄,微型计算机原理及应用.江苏:中国矿业大学出版社,20045 张毅刚. 单片机原理及接口技术.哈尔滨:哈尔滨工业大学出版社,19906 李广弟.单片机基础.北京:北京航空航天大学出版社,1992附1:源程序代码 TEMP_ZH DATA 24H ;实时温度值整合后存放单元 TEMPL DATA 25H TEMPH DATA 26H TEMP_TH DATA 27H ;高温报警值存放单元 TEMP_TL DATA 28H ;低温报警值存放单元 TEMPHH DATA
26、29H ;百位数bcd码存放单元 TEMPHL DATA 2AH ;十位数bcd码存放单元 TEMPLH DATA 2BH ;个位数bcd码存放单元 TEMPLL DATA 2CH ;小位数bcd码存放单元 SIGN EQU 20H.3 ;1=温度为负,0=温度为正 K1 EQU P1.4 K2 EQU P1.5 K3 EQU P1.6 K4 EQU P1.7 BEEP EQU P3.7 FLAG1 EQU 20H.0 ;DS18B20是否存在/1存在,0不存在 DQ EQU P3.4;= ORG 0000H JMP MAINMAIN: MOV SP,#60H MOV A,#00H MOV R
27、0,#20H ;将 20H-2FH 单元清零 MOV R1,#10HCLEAR: MOV R0,A INC R0 DJNZ R1,CLEAR LCALL THTL_DISP MOV R1,#250MMM1: LCALL DELAY DJNZ R1,MMM1START: CALL RESET ;18B20复位子程序 JNB FLAG1,START1 ;DS1820不存在 CALL READ_E2 ;从eerom拷贝THTL到暂存器 JMP START2START1: JMP $START2: CLR BEEP CALL RESET JNB FLAG1,START1 ;DS1820不存在 MOV
28、A,#0CCH ; 跳过ROM匹配 CALL WRITE MOV A,#44H ; 发出温度转换命令 CALL WRITE CALL RESET MOV A,#0CCH ; 跳过ROM匹配 CALL WRITE MOV A,#0BEH ; 发出读温度命令 CALL WRITE CALL READ CALL CONV_TEMP CALL LED_DISP CALL TEMP_COMP CALL PROC_K2 JMP START2;-;=;检测是否有键按下;=PROC_K2: ; 按键K2处理 JB K2,PROC_END CALL DELAY JB K2,PROC_END JNB K2,$ CALL BZ55_127 MOV 29H,#0BH ;H的bcd码送百位 MOV R4,TEMP_TH LCALL THTL_BCD LCALL THTL_DISP CALL SE
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1