1、多路数字温度测量系统设计一、 摘要基于单片机的多路数字温度测量系统在实际中广泛应用。本课题以AT89S51单片机系统为核心,设计了一种利用单片机来实现的实时温度控制系统,包括硬件设计和软件设计。系统采用AT89S51 单片机作为主芯片,DS18B20数字温度传感器作为温度采集器件,可以监测八路环境温度信号,对八路模拟信号进行循环采集,该系统测量范围-55+125,显示精度为0.5,运用蜂鸣器作为报警器,通过串口实现单片机与PC 机的通信,利用键盘控制随时查看指定通道温度,运用MC14543驱动4位LED数码管来实现温度的实时读取。系统能实时监控环境温度,并具有报警功能,若采集的平均值超过设定范
2、围,则对应通道的指示灯闪烁10次后一直亮,指示灯闪烁时喇叭发声,具有一定的实用性。1多点的温度进行实时巡检。由于其具有单总线的独特优点,本文结合实际使用经验,介绍了DS18B20数字温度传感器在单片机下的硬件连接及软件编程,并给出了软件流程图。 关键词:温度传感器DS18B20 AT89S51单片机 MC14543驱动器 LED数码管显示二 总体设计方案目录一、 摘要 1二、总体方案设计 32.1、方案的阐述与特点 32.2、本方案系统框图 32.3、该设计系统所具有如下特点 3三、系统硬件设计 43.1、单片机引脚功能图的介绍 43.2、温度传感器DS18B20的连线图 73.3、显示电路设
3、计 73.4、键盘电路设计 83.5、电源电路设计 83.6、报警电路设计 93.7、晶振复位电路如下 10四、系统软件设计 104.1、系统主程序流程图 114.2、温度测量子程序流图 124.3、键盘程序流程图 144.5、显示子程序流程图 14五、结论 145.1、课题总结 155.2、感悟 15六、参考文献 16七、附录 167.1系统程序 167.2系统总体电路图 26 二、总体方案设计1、方案的阐述与特点:本设计方案以DS18B20为传感器、AT89C51单片机为控制核心组成多点温度测试系统,该系统包括传感器电路、独立式键盘与MC14543驱动LED数码显示电路、八路报警电路和串口
4、通信电路组成。采用美国Dallas半导体公司推出的数字温度传感器DS18B20,属于新一代适配微处理器的智能温度传感器。它具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成与微处理器的通信。LED采用MC14543驱动芯片来驱动。外部全部传感元件及转换电路集成在形如一只三极管的集成电路内。本方案系统框图为:单片机复位键盘设置温度上下限时钟振荡DS18B20温度传感器8路报警MC14543驱动LED显示AT89S51单片机图2-1 多路数字温度测量系统总体设计图 该系统的核心是集成温度传感器DS18B20,其核心技术就是可以直接输出数字信号。由于温度传感器DS18B20是单线通信,所以软
5、件设计部分必须考虑它的时序问题,以便更好地读数据和写数据。2、该设计系统所具有如下特点: (1)独特的单线接口,既可通过串行口线,也可通过其它I/O口线与微机接口,无需变换其他电路,直接输出被测温度值1;(2)多点能力使分布式温度检测应用得以简化;(3)不需要外部元件;(4)既可用数据线供电,也可采用外部电源供电;(5)不需备份电源;(6)测量范围为-55125,固有测温分辨率为0.5;(7)通过编程可实现912位的数字读数方式;(8)用户可定义非易失性的温度告警设置;(9)警告搜索命令能识别和寻址温度在编定的极限之外的器件(温度警告情况);(10)应用范围包括恒温控制、工业系统、消费类产品、
6、温度计或任何热敏系统。以上特性使得DS18B20非常适用于构建高精度、多点温度测量系统。根据DS18B20以上特点,此方案实现本课题较好。三、硬件设计本课题的整个系统是由单片机、显示电路、键盘电路、驱动电路、报警电路、电源电路、复位电路、振荡电路等构成。1、单片机引脚功能图的介绍: 图3-1单片机引脚2表3-1 单片机引脚功能表2VCC:电源电压输入端。 GND:电源地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。P1口:P1口是一个内部提供上拉电阻的8
7、位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P3口:P3口是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。P3口除了作为普通I/O口,还有第二功能:P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT
8、0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(T0定时器的外部计数输入) P3.5 T1(T1定时器的外部计数输入) P3.6 /WR(外部数据存储器的写选通) P3.7 /RD(外部数据存储器的读选通)RST:复位输入端,高电平有效。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:地址锁存允许/编程脉冲信号端。PSEN:外部程序存储器的选通信号,低电平有效。EA/VPP:外部程序存储器访问允许。当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESE
9、T;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:片内振荡器反相放大器和时钟发生器的输入端。 XTAL2:片内振荡器反相放大器的输出端2、温度传感器DS18B20的连线图:DS18B20的测温原理1、6如图1-2所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由
10、高温度系数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温
11、度值,这就是DS18B20的测温原理。另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。各种操作的时序图与DS1820相同。 图3-2 8路DS18B20数字温度传感器接线图3、83、显示电路设计本课题采用MC14543驱动器来驱动四个LED数码管来实现温度的显示,P0.0-PO.3引脚通过上拉电阻连接MC14543的A、B、C、D引脚。MC14543的a、b、c、d、e、f、分别接电阻限流来连接LED的相应8位段码线2。
12、P0.4-P0.7分别接电阻限流后接三极管来作为各LED的位选线。DS1用来显示当前显示的一路,DS2、DS3、DS4、用来显示该路的实时温度,其具体连接如下图.图3-3 MC14543驱动器驱动LED显示电路34、键盘电路设计其原理图如图3-4:本课题使用独立式键盘行列扫描方式,在单片机的P1.0-P1.3口线上连接独立式的键盘,单片机扫描键盘,如果有键按下,单片机会根据键码执行相应的程序,使整个系统的功能更加完善2、7。图3-4独立式键盘电路5、电源电路设计单片机工作电源为+5 V, 系统电路功耗很小,因此,采用CW7805三端稳压片即可满足要求。具体电路如下图所示:通过变压器将220V电
13、压降到7V,再通过整流电路将交流变成直流。经三态稳压器输出单片机所需+5V电源。图3-5 电源电路36、报警电路设计 为了实现多点温度检测报警系统,本课题采用AT89C51单片机作为主控制器,采用扫描的方式对多点DS18B20温度传感器获取对应该位置的温度值,。串口可以立即发送到上位机,如温度不在设定的范围内,经处理后由P2.4-P2.1引脚接74LS138的G1、C、B、A,其它输入引脚接地。通过74LS138译码器输出8路报警信号。任意时刻只可能有一路输出有效给出报警信号。报警硬件电路图3如下所示:图3-6 8路报警信号指示电路37、复位电路如下设计原理:复位是单片机的初始化操作,只需给A
14、T89S51的复位引脚RST加上2个机械周期的高电平就可使单片机复位。按键手动高电平复位是通过RST端经电阻与电源Vcc接通来实现,具体电路如图1-8所示,当时钟频率选用6MHz时,C的典型取值为10uF,R取值10K. 2图3-7 复位电路8、晶振电路设计原理:AT89S51内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出引脚为XTAL2。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器。电路中的电容C1和C2的典型值通常选择为30pF。AT89S51常选择振荡频率6MHz和12MHz的石英晶振。2电路如下图图3-8 晶振电路四、软件设计1、软件实现
15、系统软件设计主要包括系统程序和流程图,根据整个系统的要求,完成温度的测量与控制必须经过以下几个步骤:单片机接受传感器的温度信号,并通过mc14543驱动显示出来,单片机扫描键盘,接受控制信号,并将温度显示出来,若温度不在范围内则发出报警。1)、系统主程序流程图开始系统初始化测温子程序显示温度 测温键是否按下?Y清楚显示子程序N清除键是否按下 Y N图 4-1系统主程序流程图流程图说明:系统开始应现将其进行初始化操作,然后系统进入测温程序,通过键盘检测扫描是否按键被按下,如果按下则LED会显示当前按下通道的温度,然后检测是否清除按键按下,若按下则清除显示子程序。最后返回测温子程序,对8路测温进行
16、循环显示。2)、温度测量子程序流图开始延时复位DS18B20复位DS18B20发出跳过ROM命令发出匹配ROM命令复位DS18B20发出温度转换命令发一个DS18B20序号 N发报警搜索命令转换完毕?N有温度超限否读温度值NY指向下一个DS18B20存入存储器第n个DS18B20处理完YY报警输出 图4-2 DS18B20温度测量程序流图温度测量程序流程图说明: 首先将其所有的DS18B20进行复位操作,按后跳过ROM命令,对温度传感器发出温度转换命令,转换完毕后将当前DS18B20进行复位操作,发出匹配的ROM命令,指向下一个DS18B20 ,程序对其进行读温度值,将温度值存入存储器。若处理
17、完后指向下一个DS18B20,如果没处理完先将其复位,发送报警搜索命令。判断该路温度是否有温度超限否,超限则通过P2.4-P2.1驱动74LS138译码器,输出该路报警信号。没有超限则经延时后,指向下一路温度传感器进行温度循环监视。3)、键盘程序流程图根据本课题的系统要求,采用独立式的键盘电路结构,P1.0- P1.3接4条行线通过按键接地,各行线均通过上拉电阻接+5V电源,整个系统的功能可以利用4个按键将系统完善化、系统化,可以通过键盘随时查看指定通道的温度4、6。对于键盘各键的功能如下图所示:等待键盘按下延时确定键手动模式温度置125Key1按下?温度值减1?Key1等于2?Key2按下?
18、Key3按下?Key4按下?延时延时延时Key1按下?Key2按下?Key3按下?Key4按下?选择通道A选择通道B温度值加1温度大于125?温度置-55温度小于-55?启动定时器切换到自动模式Key1等于8选择通道H返回图4-3 独立式键盘功能4)、显示子程序设计根据本课题的系统要求,8路通道轮流显示,整个系统的功能可以利用4个按键进行操作,可以通过键盘随时查看指定通道的温度。开始时进行初始化复位操作,8路通道轮流显示延时1秒,在有按键按下后执行中断程序,显示指定的通道。然后返回主程序。开始初始化1-8路通道轮流显示每次延时一秒是否有按键按下 N Y 按键中断程序显示指定查询通道图 4-4
19、显示子程序流程图五、结论1、课题总结本课题主要是实现对温度进行多点同时测量并准确显示。整个系统由单片机控制,要能够接受传感器的数据并显示出来,可以从键盘输入命令,系统根据命令选择对应的传感器,并由驱动电路驱动温度显示,对异常情况进行报警。2、感悟 通过这次课程的设计,将课本的知识实际应用,摆脱考试的局限性,锻炼自己独立的解决问题的能力,独立思考能力。本课题使我熟悉了单片机设计原则,对51系列单片机内部构造、以及MC14543驱动器、74LS138译码器的工作原理引脚功能与其它芯片的接口技术及其工作情况有了更进一步了解,虽然是很简单的运用,但比为了考试而瞬时记忆的知识牢固多了,工作需要独立解决问
20、题的的能力,还是希望多一些这样的机会。同时感觉到自己的知识还有很多不足的地方,要在今后的学习中不断完善自己。 六、参考文献1方佩敏编著智能化集成温度传感器原理与应用M北京:电子工业出版社,20022张毅刚,彭喜元,彭宇编著.单片机原理及其应用M.北京:高等教育出版社,2010.53 张伟等.Protel 99SE 实用教程 M.北京:人民电邮出版社,2008;4周慈航著单片机程序设计基础M北京:北京航空航天大学出版社,20035李道玲,李玲,朱艳编著传感器电路分析与设计M武汉:武汉大学出版社,20036刘笃人,韩保军编著。传感器及应用技术M西安:西安电子科技大学出版社,20037陈小忠等,单片
21、机接口技术实用子程序M北京:人民邮电出版社,20058 李红刚,方佳,王强,钱双艳.基于At89C51的八路温度巡回检测系统设计J. 热带农业工程,2010年第34卷第1期;七、附录(1)系统程序工作内存定义BITST DATA 20HTIMEISOK BIT BITST.1TEMPONEOK BIT BITST.2TEMPL DATA 26HTEMPH DATA 27HTEMPHC DATA 28HTEMPLC DATA 29H引脚定义TEMPDIN BIT P3.7 中断向量区 ORG 000H LJMP START ORG 00BH LJMP T0IT 系统初始化4、7 ORG 100H
22、START: MOV SP,#60HCLSMEM: MOV R0,#20H MOV R1,#60HCLSMEM1: MOV R0,#00H INC R0 DJNZ R1,CLSMEM1 MOV TMOD,#00100001B MOV TH0,#TIMEL MOV TL0,#TIMEH SJMP INITERROR: NOP LJMP START NOPINIT: NOP SETB ET0 SETB TR0 SETB EA MOV PSW,#00H CLR TEMPONEOK LJMP MAIN定时器0中断服务程序T0IT: PUSH PSW MOV PSW,#10H MOV TH0,#TIME
23、H MOV TL0,#TIMEL INC R7 CJNE R7,#32H,T0ITI MOV R7,#00H SETB TIMEISOKTOIT1: POP PSW RETI子程序区RESET DS18B20INITDS1820: SETB TEMPDIN NOP NOP CLR TEMPDIN MOV R6,#0A0H DJNZ R6,$ MOV R6,#0A0H DJNZ R6,$ SETB TEMPDIN MOV R6,#32H DJNZ R6,$ MOV R6,#3CHLOOP1820: MOV C,TEMPDIN JC INITDS1820OUT DJNZ R6,LOOP1820 M
24、OV R6,#064H DJNZ R6,$ SJMP INITDS1820 RETINITDS1820OUT: SETB TEMPDINRET主程序MAIN: LCALL DISP1 JNB TIME1SOK ,MAIN CLR TIME1SOKJNB TEMPONEOK ,MAIN2LCALL READTEMP1LCALL CONVTEMP LCALL DISPBCD LCALL DISP1MAIN2: LCALL READTEMP SETB TEMPONEOK LJMP MAIN读DS18B20的程序,从DS18B20中读出一个字节的数据READDS1820: MOV R7,#08H SE
25、TB TEMPDIN NOP NOPREADDS1820LOOP:CLR TEMPDINNOPNOPNOPSETB TEMPDINMOV R6,#07HDJNZ R6,$MOV C,TEMPDINMOV R6,#3CHDJNZ R6,$RRC ASETB TEMPDINDJNZ R7,READDS1820LOOPMOV R6,#3CHDJNZ R6,$RET写DS18B20的程序,从DS18B20中写一个字节的数据WRITEDS1820: MOV R7,#08H SETB TEMPDINNOPNOPWRITEDS1820LOP: CLR TEMPDINMOV R6,#07HDJNZ R6,$R
26、RC AMOV TEMPDIN,CMOV R6,#34HDJNZ R6,$SETB TENPDINDJNZ R7,WRITEDS1820LOPRETREAD TEMPREADTEMP: LCALL INITEDS1820MOV A,#0CCHLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$MOV A,#44HLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$RETREADTEMP1: LCALL INITDS1820MOV A,#0CCHLCALL WRITEDS1820MOV R6,#34HDJNZ R6,$MOV A,#0BEHLCALL
27、WRITEDS1820MOV R6,#34HDJNZ R6,$MOV R5,#09HMOV R0,#TEMPHEADMOV B,#00HREADTEMP2: LCALL READDS1820MOV R0,AINC R0READTEMP21: LCALL CRC8CALDJNZ R5,READTEMP2MOV A,BJNZ READTEMPOUTMOV A,TEMPHEAD+0MOV TEMPL,AMOV A,TEMPHEAD+1MOV TEMPH,AREADTEMPOUT: RET处理温度BCD码子程序CONVTEAMP: MOV A,TEMPHANL A,#80HJZ TEMPC1CLR C
28、MOV A,TEMPLCPL AADD A,#01HMOV TEMPL,AMOV A,TEMPHCPL AADDC A,#00HMOV TEMPH,AMOV TEMPHC,#0BHSJMP TEMPCHTEMPC1: MOV TEMPHC,#0AHTEMPC11: MOV A,TEMPHCSWAP AMOV TEMPHC,AMOV A,TEMPLANL A,#0FHMOV DPTR,#TEMPDOTTABMOVC A,A+DPTRMOV TEMPLC,AMOV A,TEMPLANL A,#0F0HSWAP AMOV TEMPL,AMOV A,TEMPHANL A,#0FHSWAP AORL A
29、,TEMPLLCALL HEX2BCD1MOV TEMPL,AANL A,#0F0HSWAP AORL A,TEMPHCMOV TEMPHC,AMOV A,TEMPLANL A,#0FHSWAP AORL A,TEMPLCMOV TEMPLC,AMOV A,R7JZ TEMPC12ANL A,#0FHSWAP AMOV R7,AMOV A,TEMPHCANL A,#0FHORL A,R7MOV TEMPHC,ATEMPC12: RET显示子程序显示数据在70H73H单元内,用4位LED共阳数码管显示,P1口输出段码数据,;P3口作扫描控制,每个LED数码管亮1ms时间再逐位循环。DISP1:
30、MOV R1,#70H MOV R5,#0FEHPLAY: MOV P1,#0FFH MOV A,R5 MOV P3,A MOV A,R1 MOV DPTR,#TAB MOVC A,A+DPTR MOV P1,A MOV A,R5 JB ACC.1,LOOP5 CLR P1.7LOOP5: LCALL DLIMS INC R1 MOV A,R5 JNB ACC.3,ENDOUT RL A MOV R5,A AJMP PLAYENDOUT: MOV P1,#0FEH MOV P3,#0FEHRETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,9
31、0H,0FFH,0BFH;共阳段码表 “0” “1” “2” “3” “4” “5” “6” “7” “8” “9” “不亮” “” DL1MS: MOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2 DJNZ R6,DL1 RET单字节十六进制转BCDHEX2BCD1: MOV B,#064H DIV AB MOV R7,A MOV A,#0AH XCH A,B DIV AB SWAP A ORL A,B RETCalculate CRC8 Values. Uses The CCITT8 Polynomial,Expressed AsX8+X5+X4+1CRC8CAL: