任务书
上下限温度报警器
一.任务及要求:
设计并制作一个上下限温度报警器要求如下:
使用单片机AT89S51,测温传感器使用DS18B20,用共阴LED数码管实现温度显示与报警功能。
1.基本范围-50℃-110℃。 2.精度误差小于0.5℃。 3.LED数码直读显示。
4.可以任意设定温度的上下限及报警功能。
目录
1总体设计方案
1.1设计方案论证 ··································································································· 4 1.2总体设计框图 ····································································································4
2硬件设计
2.1系统组成及工作原理·························································································5
2.1.1 主控制器 ···································································································· 5 2.1.2.七段LED数码管电路及原理··········································································· 5 2.1.3.温度传感器DS18B20························································································6 2.14报警温度设置模块 ························································································· 8 2.15时钟电路 ····································································································· 9
2.2.DS18B20与单片机接口电路 ··········································································10 2.3 系统整体硬件电路 ··························································································11
3.系统软件设计
3.1.主程序 ············································································································12 3.2.读出温度子程序 ···························································································13 3.3温度转换命令字程序 ················································································ ···14 3.4计算温度子程序 ····························································································14 3.5显示子程序 · ······· ················································································ ·········14 3.6总体程序 ······································································································15
4.设计调试及测试结果分析 ······································································ ···22
5.总结体会 ······································································································ ·····23·
参考文献·················································································································24 附录A整体电路图 ···························································································25 附录B实物图 ····································································································25
附录C元器件清单· ···························································································26
1总体设计方案
1.1设计方案论证
1.1.1设计方案一
由于本设计是对系统进行温度检测,故可以使用热敏电阻之类的器件利用其感温效应,将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理。在显示电路上,就可以将被测温度显示出来,但是这种设计需要用到A/D转换电路,测温电路比较麻烦。
1.1.2 设计方案二
考虑到要对温度进行检测,在单片机电路设计中,大多都是使用温度传感器,这是非
常容易想到的,所以可以采用一只温度传感器DS18B20,这种传感器,可以很容易直接读取被测温度值,进行转换,将测量值送入单片,通过软件变成,使之满足设计要求。从以上两种方案,很容易看出方案二,硬件电路比较简单,软件设计也较为容易,故采用了方案二。
1.2总体设计框图
温度计电路设计总体设计方框图如图1所示。制器采用单片机AT89S51,温度传感器采用DS18B20,用4位共阴LED数码管以并口方式传递数据实现温度显示。
报警点设置 时钟电路 报警电路 主 控 制 器 LED显示 温度检测
图1.1 总体设计方框图
2硬件设计
2.1系统组成及工作原理 2.1.1 主控制器
主控制器选用具有低电压供电和体积小等特点的T89S51单片机,四个端口只需要三个口就能满足电路系统的设计需要,很适合便携手持式产品的设计,系统可用两节干电池来供电。
2.1.2四位七段共阴极LED数码管
七段LED数码管是利用七个led(发光二极管)外加一个小数点的led组合而成的显示设备,可以显示0~9等10个数字和小数点,使用非常广泛。
这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp(小数点),如下图所的8个LED分别与上面那个图中的A~DP各段相对应,通过控制各个LED的亮灭来显示数字。而本次设计使用的是四位共阴极的LED数码管。
图2.1
还有一种比较常用的是四位数码管,内部的4个数码管共用a~dp这8根数据线,为人
们的使用提供了方便,因为里面有4个数码管,所以它有4个公共端,加上a~dp,共有12个引脚,下面便是一个共阴的四位数码管的内部结构图(共阳的与之相反)。引脚排列依然
是从左下角的那个脚(1脚)开始,以逆时针方向依次为1~12脚,下图中的数字与之一一对应。
图2.2
2.1.3温度传感器
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V; ●零待机功耗;
●温度以9或12位数字; ●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; ●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2.3所示。
图2.3 DS18B20内部结构框图
64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图3所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。
由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。
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时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。
表2 一部分温度对应值表
温度/℃ +125 +85 +25.0625 +10.125 +0.5 0 -0.5 -10.125 -25.0625 -55
二进制表示 0000 0111 1101 0000 0000 0101 0101 0000 0000 0001 1001 0000 0000 0000 1010 0001 0000 0000 0000 0010 0000 0000 0000 1000 1111 1111 1111 0000 1111 1111 0101 1110 1111 1110 0110 1111 1111 1100 1001 0000 十六进制表示 07D0H 0550H 0191H 00A2H 0008H 0000H FFF8H FF5EH FE6FH FC90H 另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
2.1.4报警温度设置模块
用四个独立式按键可分别调整温度的上下限,使之对报警温度进行设置,蜂鸣器(这里用发光二极管代替)可在被测温度超过说设置的上下限范围时发出声响。
2.1.5时钟电路
时钟电路时单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍工作。时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种:一种是内部时钟方式,另一种是外部时钟方式,本次设计使用的是外部时钟方式,使用一个12MHZ的晶振。
2.2 DS18B20温度传感器与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B204所示单
片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉
开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。
..VCCDS18B20DS18B20DS18B20单片机.VCC4.7KGNDGNDGND.
图2.4 DS18B20与单片机的接口电路
2.3 系统整体硬件电路
2.3.1 主板电路
系统整体硬件电路包括:传感器数据采集电路,温度显示电路,报警调整电路,单片机主板电路等,如图2.5所示。
图2.5中有4个独立式按键可以分别调整温度计的报警温度设置,图中蜂鸣器可以在被测温度不在上下限范围内时,发出响声,同时LED数码管将没有被测温度值显示,这时可以调整报警上限,从而测出被测的温度值。图7复位电路是上电复位和手动复位,使用比较方便,在程序跑飞时可通过手动复位,这样就不用重新启动电源实现复位。
显 示 传感器 蜂鸣器
图2.5 系统原理图
3.系统软件设计
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
3.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程如下:
判断温度超限? 开 始 初 始 化 读取测量温度值 否 测量温度
是
报 警
图3.1 主程序流程图
3.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有
错时不进行温度数据的改写。其程序流程图如图9所示
发DS18B20复位命令 发跳过ROM命令 发读取温度命令 读取操作,CRC校验 Y N 9字节完? Y CRC校验正?N 移入温度暂存器 结束 图3.2读温度流程图 3.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图3.3所示
发DS18B20复位命令 发跳过ROM命令 发温度转换开始命令
结束 图3.3温度转换流程图
3.4 计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图3.4所示。
开 始 N 温度零下? Y 温度值取补码置“—”标志 置“+”标志 计算小数位温度BCD值 计算整数位温度BCD值
结束 图3.4计算温度流程图
3.5 显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图3.5。
温度数据移入显示寄存器 N 十位数0? Y 百位数0? N Y 十位数显示符号百位数不显示 百位数显示数据(不显示符号) 结束 图3.5 显示数据刷新流程图
3.6总体程序
ORG 0000H LJMP START ORG 0003H LJMP JIA ORG 0013H LJMP JIAN ORG 0030H
FLAG1 BIT F0 ;DS18B20存在标志位 DQ BIT P2.2 TEMPER_L EQU 29H TEMPER_H EQU 28H A_BIT EQU 35H B_BIT EQU 36H START: MOV IE,#85H MOV 30H,#30 SHEZHI:MOV R1,#30H ACALL DISPLAY
MOV P2,#0FFH MOV A,P2 MOV C,ACC.0 JNC SHEZHI LJMP MAIN
DISPLAY:MOV A,@R1;将29H中的十六进制数转换成10进制 MOV B,#10 ;10进制/10=10进制 DIV AB
MOV B_BIT,A ;十位在A MOV A_BIT,B ;个位在B
MOV DPTR,#TAB ;指定查表启始地址 SETB P3.7 ;选中第一个数码管 MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码 MOV P1,A ;送出个位的7段代码 LCALL DELAY ; 调用延时 CLR P3.7
SETB P3.6 ;选中第二个数码管 MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码 MOV P1,A ;送出十位的7段代码 LCALL DELAY CLR P3.6 RET JIA:
MOV P2,#0FFH MOV A,P2 MOV C,ACC.0 JC OUT INC @R1
LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY OUT: RETI JIAN:
MOV P2,#0FFH MOV A,P2 MOV C,ACC.0 JC OUT1 DEC @R1 LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY LCALL DELAY OUT1: RETI
DELAY: MOV R5,#120
;延时子程序 NOP NOP
D1: MOV R6,#100 D2: DJNZ R6,D2 DJNZ R5,D1 RET
;**************主程序开始************ MAIN:
LCALL INIT_18B20 ;LCALL RE_CONFIG LCALL GET_TEMPER LJMP CHANGE
;**********DS18B20复位程序***************** INIT_18B20: SETB DQ NOP CLR DQ MOV R0,#0FBH
TSR1: DJNZ R0,TSR1 ;延时 SETB DQ MOV R0,#25H TSR2: JNB DQ ,TSR3 DJNZ R0,TSR2
TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在 CLR P0.5 ;二极管指示 AJMP TSR5 TSR4: CLR FLAG1 LJMP TSR7 TSR5: MOV R0,#06BH TSR6: DJNZ R0,TSR6
TSR7:SETB DQ ;表明不存在 RET
;*****************读转换后的温度值**************** GET_TEMPER:
SETB DQ LCALL INIT_18B20 JB FLAG1,TSS2
RET ;若不存在则返回 TSS2: MOV A,#0CCH ;跳过ROM LCALL WRITE_18B20
MOV A,#44H ;发出温度转换命令 LCALL WRITE_18B20
;LCALL DISPLAY ;延时 LCALL INIT_18B20
MOV A,#0CCH ;跳过ROM LCALL WRITE_18B20
MOV A,#0BEH ;发出读温度换命令 LCALL WRITE_18B20
LCALL READ2_18B20 ;读两个字节的温度 RET
;***************写DS18B20程序************ WRITE_18B20:
MOV R2,#8 CLR C WR1:
CLR DQ MOV R3,#6 DJNZ R3,$ RRC A MOV DQ,C
MOV R3,#23 DJNZ R3,$ SETB DQ NOP
DJNZ R2,WR1 SETB DQ RET
;***********读18B20程序,读出两个字节的温度********* READ2_18B20:
MOV R4,#2 ;低位存在29 H,高位存在28H MOV R1,#29H RE00: MOV R2,#8 RE01: CLR C SETB C NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE01 MOV @R1,A DEC R1
DJNZ R4,RE00 RET;
************读出的温度进行数据转换************** CHANGE: MOV A,29H
MOV C,28H.0 ;将28H中的最低位移入C RRC A MOV C,28H.1 RRC A MOV C,28H.2 RRC A MOV C,28H.3 RRC A MOV 29H,A MOV R1,#29H
LCALL DISPLAY ;调用数码管显示子程序 CLR C
MOV A,30H
SUBB A,29H
JC BJ LJMP MAIN
BJ:CPL P0.0 CPL P0.1 LJMP MAIN;
***********************************
D1MS: MOV R7,#80 ;1MS延时(按12MHZ算) DJNZ R7,$ RET
;*************************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END
4.实验调试及测试结果分析
4.1硬件调试
检查面包板插线情况,当接线无误后,接通电源检查四位Led显示器器是否正常,若亮度不理想可调节p0口电阻,实质满足所需要求。
通过四个按键对温度进行设置。当设置上限温度为37度时,观察数码管发现显示37度。当设置下限温度为10度时,发现数码管显示10度。然后设置上限温度为30度,用手捏住DS18B20待温度超过30度时,发现发光二极管(绿色)变亮,进行报警,同理可设置下限温度,观察当超过设定值时,依然报警(黄色)。
4.2软件调试
软件程序的调试一般将重点放在分块调试上,通调上最后一环。软件调试可采用离线调试和线条是两种。前者不需要硬件仿真器,可借助于软件仿真器即可;后者一般需要仿真系统的折尺,本次设计用keil软件来调试程序,通过各个模块程序的单步或跟踪调试,时程序逐渐趋于正确,最后统调程序。
完后结合硬件实时调试通过以上检查,将电路通电,查看是否按正常工作。本次设计最终能够满足任务要求。
5总结体会
三周的单片机课程设计终于顺利完成了,看着我们做好的硬件,回顾这么多天来起早贪黑,努力奋斗的成果,心里着实美滋滋的,当然这一切都是值得的。我们选的设计题目是“上下限温度报警器”,大家都觉得这个题目是比较简单的。其实不然,做了之后,发现设计电路虽然简单,但我们认为它真正困难的地方是程序设计,这正验证了那句古语“眼高手低”,“实践出真知”。
器件的选择费了不少心思,最终上网查相关的资料并且到图书馆找寻相关的书籍,才得
以确定。再说到程序那块,因为我们所学的都是单片机方面的理论知识,应用到实践中去还比较少。去查阅和收集资料,并且请教指导老师。通过不断努力,终于把温度报警器的思路和模型定了下来并去整理和修改程序。
通过一番整理和修改后,在电脑上进行仿真,仿真成功后在面包板上搭建电路。在搭建过程中,我们首先对硬件电路进行布局,然后确认无误后,在开始插线,这个过程我们觉得是做得比较快的,以至于后面出现了虚接的错误。线插完后完工,细心检查后,进行通电测试。结果LED没有显示,通过检查,原来是拿成共阳了了,在换了块新的后,能显示显示值。报警电路也能正常工作,但还有个问题是DS18B20不能送进温度细心检查后还是不能发现问题请教老师后发现我们仿真时用的是12Mhz的晶振,而实际领取器件时拿的是6MHZ的晶振。查了DS18B20的资料后发现此传感器的时序要求非常严格。更换后温度报警器终于成功实现功能,当时我们的心情都是无比兴奋和快乐的,因为我们三周的辛苦没有白费。
完成了单片机课程设计后,我们发现了许多问题,所学到的知识还远远不够,如现在所学仅仅只是皮毛而已,如果想要在这块有所作为还得狠狠得下功夫,这次课设的成功及说明了这点。通过学习这一次实践,增强了我们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。从中增强了我们的团队合作精神,并让我们认识到把理论应用到实践中去是多么重要。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,我们迎难而上,发扬不怕苦不怕累的红军精神,是问题一一解决掉。因此对给过我们帮助的所有同学和指导老师表示衷心的感谢!
参考文献:
[1] 李建忠.单片机原理及接口技术(第二版).西安:西安电子科技大学出版社,2006 [2] 韩志军.单片机应用系统设计.北京:机械工业出版社,2005 [3] 阎石.数字电子技术基础(第5版). 北京:高等教育出版社,2007
附录A:整体电路图
附录B:面包板实物图:
附录C:元器件清单
种类 芯片 传感器 发光二极管 蜂鸣器 电容 电阻 元件 AT89S51 DS18B20 红 黄 22PF 10UF 10K 0.22K 4.7K 470 12MHZ 个数 1 1 2 2 1 2 1 1 1 1 1 1 排阻 晶振 四位共阴七段数码管
因篇幅问题不能全部显示,请点此查看更多更全内容