资源描述
多路数字温度测量系统设计
一、 摘要
基于单片机的多路数字温度测量系统在实际中广泛应用。本课题以AT89S51单片机系统为核心,设计了一种利用单片机来实现的实时温度控制系统,包括硬件设计和软件设计。系统采用AT89S51 单片机作为主芯片,DS18B20数字温度传感器作为温度采集器件,可以监测八路环境温度信号,对八路模拟信号进行循环采集,该系统测量范围-55℃~+125℃,显示精度为±0.5℃,运用蜂鸣器作为报警器,通过串口实现单片机与PC 机的通信,利用键盘控制随时查看指定通道温度,运用MC14543驱动4位LED数码管来实现温度的实时读取。系统能实时监控环境温度,并具有报警功能,若采集的平均值超过设定范围,则对应通道的指示灯闪烁10次后一直亮,指示灯闪烁时喇叭发声,具有一定的实用性。[1]
多点的温度进行实时巡检。由于其具有单总线的独特优点,本文结合实际使用经验,介绍了DS18B20数字温度传感器在单片机下的硬件连接及软件编程,并给出了软件流程图。
关键词:温度传感器DS18B20 AT89S51单片机 MC14543驱动器 LED数码管显示
二 总体设计方案
目录
一、 摘要 ……………………………………………………………1
二、总体方案设计 …………………………………………………3
2.1、方案的阐述与特点 …………………………………………3
2.2、本方案系统框图 ………………………………………………………3
2.3、该设计系统所具有如下特点 ………………………………………3
三、系统硬件设计 …………………………………………………4
3.1、单片机引脚功能图的介绍 ……………………………………………4
3.2、温度传感器DS18B20的连线图 ………………………………………7
3.3、显示电路设计 …………………………………………………………7
3.4、键盘电路设计 …………………………………………………………8
3.5、电源电路设计 …………………………………………………………8
3.6、报警电路设计 …………………………………………………………9
3.7、晶振复位电路如下 ……………………………………………………10
四、系统软件设计 …………………………………………………10
4.1、系统主程序流程图 ……………………………………………………11
4.2、温度测量子程序流图 …………………………………………………12
4.3、键盘程序流程图 ………………………………………………………14
4.5、显示子程序流程图 ……………………………………………………14
五、结论 ……………………………………………………………14
5.1、课题总结 ………………………………………………………………15
5.2、感悟 ……………………………………………………………………15
六、参考文献 ………………………………………………………16
七、附录 ……………………………………………………………16
7.1系统程序 …………………………………………………………………16
7.2系统总体电路图 …………………………………………………………26
二、总体方案设计
1、方案的阐述与特点:
本设计方案以DS18B20为传感器、AT89C51单片机为控制核心组成多点温度测试系统,该系统包括传感器电路、独立式键盘与MC14543驱动LED数码显示电路、八路报警电路和串口通信电路组成。
采用美国Dallas半导体公司推出的数字温度传感器DS18B20,属于新一代适配微处理器的智能温度传感器。它具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成与微处理器的通信。LED采用MC14543驱动芯片来驱动。外部全部传感元件及转换电路集成在形如一只三极管的集成电路内。
本方案系统框图为:
单片机复位
键盘设置温度上下限
时钟振荡
DS18B20温度传感器
8路报警
MC14543驱动LED显示
AT89S51单片机
图2-1 多路数字温度测量系统总体设计图
该系统的核心是集成温度传感器DS18B20,其核心技术就是可以直接输出数字信号。由于温度传感器DS18B20是单线通信,所以软件设计部分必须考虑它的时序问题,以便更好地读数据和写数据。
2、该设计系统所具有如下特点:
(1)独特的单线接口,既可通过串行口线,也可通过其它I/O口线与微机接口,无需变换其他电路,直接输出被测温度值[1];
(2)多点能力使分布式温度检测应用得以简化;
(3)不需要外部元件;
(4)既可用数据线供电,也可采用外部电源供电;
(5)不需备份电源;
(6)测量范围为-55~125,固有测温分辨率为0.5;
(7)通过编程可实现9~12位的数字读数方式;
(8)用户可定义非易失性的温度告警设置;
(9)警告搜索命令能识别和寻址温度在编定的极限之外的器件(温度警告情况);
(10)应用范围包括恒温控制、工业系统、消费类产品、温度计或任何热敏系统。
以上特性使得DS18B20非常适用于构建高精度、多点温度测量系统。
根据DS18B20以上特点,此方案实现本课题较好。
三、硬件设计
本课题的整个系统是由单片机、显示电路、键盘电路、驱动电路、报警电路、电源电路、复位电路、振荡电路等构成。
1、单片机引脚功能图的介绍:
图3-1单片机引脚[2]
表3-1 单片机引脚功能表[2]
VCC:电源电压输入端。
GND:电源地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
P1口:P1口是一个内部提供上拉电阻的8位双向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 /INT0(外部中断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将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:片内振荡器反相放大器和时钟发生器的输入端。
XTAL2:片内振荡器反相放大器的输出端
2、温度传感器DS18B20的连线图:
DS18B20的测温原理[1]、[6]如图1-2所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。各种操作的时序图与DS1820相同。
图3-2 8路DS18B20数字温度传感器接线图[3]、[8]
3、显示电路设计
本课题采用MC14543驱动器来驱动四个LED数码管来实现温度的显示,P0.0-PO.3引脚通过上拉电阻连接MC14543的A、B、C、D引脚。MC14543的a、b、c、d、e、f、分别接电阻限流来连接LED的相应8位段码线[2]。P0.4-P0.7分别接电阻限流后接三极管来作为各LED的位选线。DS1用来显示当前显示的一路,DS2、DS3、DS4、用来显示该路的实时温度,其具体连接如下图.
图3-3 MC14543驱动器驱动LED显示电路[3]
4、键盘电路设计
其原理图如图3-4:本课题使用独立式键盘行列扫描方式,在单片机的P1.0-P1.3口线上连接独立式的键盘,单片机扫描键盘,如果有键按下,单片机会根据键码执行相应的程序,使整个系统的功能更加完善[2]、[7]。
图3-4独立式键盘电路
5、电源电路设计
单片机工作电源为+5 V, 系统电路功耗很小,因此,采用CW7805三端稳压片即可满足要求。具体电路如下图所示:通过变压器将220V电压降到7V,再通过整流电路将交流变成直流。经三态稳压器输出单片机所需+5V电源。
图3-5 电源电路[3]
6、报警电路设计
为了实现多点温度检测报警系统,本课题采用AT89C51单片机作为主控制器,采用扫描的方式对多点DS18B20温度传感器获取对应该位置的温度值,。串口可以立即发送到上位机,如温度不在设定的范围内,经处理后由P2.4-P2.1引脚接74LS138的G1、C、B、A,其它输入引脚接地。通过74LS138译码器输出8路报警信号。任意时刻只可能有一路输出有效给出报警信号。报警硬件电路图[3]如下所示:
图3-6 8路报警信号指示电路[3]
7、复位电路如下
设计原理:复位是单片机的初始化操作,只需给AT89S51的复位引脚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、软件实现
系统软件设计主要包括系统程序和流程图,根据整个系统的要求,完成温度的测量与控制必须经过以下几个步骤:单片机接受传感器的温度信号,并通过mc14543驱动显示出来,单片机扫描键盘,接受控制信号,并将温度显示出来,若温度不在范围内则发出报警。
1)、系统主程序流程图
开始
系统初始化
测温子程序
显
示
温
度
测温键是否按下?
Y
清楚显示子程序
N
清除键是否按下
Y
N
图 4-1系统主程序流程图
流程图说明:
系统开始应现将其进行初始化操作,然后系统进入测温程序,通过键盘检测扫描是否按键被按下,如果按下则LED会显示当前按下通道的温度,然后检测是否清除按键按下,若按下则清除显示子程序。最后返回测温子程序,对8路测温进行循环显示。
2)、温度测量子程序流图
开始
延时
复位DS18B20
复位DS18B20
发出跳过ROM命令
发出匹配ROM命令
复位DS18B20
发出温度转换命令
发一个DS18B20序号
N
发报警搜索命令
转换完毕?
N
有温度超限否
读温度值
N Y
指向下一个DS18B20
存入存储器
第n个DS18B20处理完
Y Y
报警输出
图4-2 DS18B20温度测量程序流图
温度测量程序流程图说明:
首先将其所有的DS18B20进行复位操作,按后跳过ROM命令,对温度传感器发出温度转换命令,转换完毕后将当前DS18B20进行复位操作,发出匹配的ROM命令,指向下一个DS18B20 ,程序对其进行读温度值,将温度值存入存储器。若处理完后指向下一个DS18B20,如果没处理完先将其复位,发送报警搜索命令。判断该路温度是否有温度超限否,超限则通过P2.4-P2.1驱动74LS138译码器,输出该路报警信号。没有超限则经延时后,指向下一路温度传感器进行温度循环监视。
3)、键盘程序流程图
根据本课题的系统要求,采用独立式的键盘电路结构,P1.0- P1.3接4条行线通过按键接地,各行线均通过上拉电阻接+5V电源,整个系统的功能可以利用4个按键将系统完善化、系统化,可以通过键盘随时查看指定通道的温度[4]、[6]。对于键盘各键的功能如下图所示:
等待键盘按下
延时
确定键
手动模式
温度置125
Key1按下?
温度值减1
?
Key1等于2?
Key2按下?
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 显示子程序流程图
五、结论
1、课题总结
本课题主要是实现对温度进行多点同时测量并准确显示。整个系统由单片机控制,要能够接受传感器的数据并显示出来,可以从键盘输入命令,系统根据命令选择对应的传感器,并由驱动电路驱动温度显示,对异常情况进行报警。
2、感悟
通过这次课程的设计,将课本的知识实际应用,摆脱考试的局限性,锻炼自己独立的解决问题的能力,独立思考能力。本课题使我熟悉了单片机设计原则,对51系列单片机内部构造、以及MC14543驱动器、74LS138译码器的工作原理引脚功能与其它芯片的接口技术及其工作情况有了更进一步了解,虽然是很简单的运用,但比为了考试而瞬时记忆的知识牢固多了,工作需要独立解决问题的的能力,还是希望多一些这样的机会。
同时感觉到自己的知识还有很多不足的地方,要在今后的学习中不断完善自己。
六、参考文献
[1]方佩敏编著·智能化集成温度传感器原理与应用[M]·北京:电子工业出版社,2002
[2]张毅刚,彭喜元,彭宇编著.单片机原理及其应用[M].北京:高等教育出版社,2010.5
[3] 张伟等.《Protel 99SE 实用教程 》[M].北京:人民电邮出版社,2008;
[4]周慈航著·单片机程序设计基础[M]·北京:北京航空航天大学出版社,2003
[5]李道玲,李玲,朱艳编著·传感器电路分析与设计[M]·武汉:武汉大学出版社,2003
[6]刘笃人,韩保军编著。传感器及应用技术[M]·西安:西安电子科技大学出版社,2003
[7]陈小忠等,单片机接口技术实用子程序[M]·北京:人民邮电出版社,2005
[8] 李红刚,方佳,王强,钱双艳.《基于At89C51的八路温度巡回检测系统设计》[J]. 热带农业工程,2010年第34卷第1期;
七、附录
(1)系统程序
工作内存定义
BITST DATA 20H
TIMEISOK BIT BITST.1
TEMPONEOK BIT BITST.2
TEMPL DATA 26H
TEMPH DATA 27H
TEMPHC DATA 28H
TEMPLC DATA 29H
引脚定义
TEMPDIN BIT P3.7
中断向量区
ORG 000H
LJMP START
ORG 00BH
LJMP T0IT
系统初始化[4]、[7]
ORG 100H
START: MOV SP,#60H
CLSMEM: MOV R0,#20H
MOV R1,#60H
CLSMEM1: MOV @R0,#00H
INC R0
DJNZ R1,CLSMEM1
MOV TMOD,#00100001B
MOV TH0,#TIMEL
MOV TL0,#TIMEH
SJMP INIT
ERROR: NOP
LJMP START
NOP
INIT: NOP
SETB ET0
SETB TR0
SETB EA
MOV PSW,#00H
CLR TEMPONEOK
LJMP MAIN
定时器0中断服务程序
T0IT: PUSH PSW
MOV PSW,#10H
MOV TH0,#TIMEH
MOV TL0,#TIMEL
INC R7
CJNE R7,#32H,T0ITI
MOV R7,#00H
SETB TIMEISOK
TOIT1: POP PSW
RETI
子程序区
RESET DS18B20
INITDS1820:
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,#3CH
LOOP1820: MOV C,TEMPDIN
JC INITDS1820OUT
DJNZ R6,LOOP1820
MOV R6,#064H
DJNZ R6,$
SJMP INITDS1820
RET
INITDS1820OUT: SETB TEMPDIN
RET
主程序
MAIN: LCALL DISP1
JNB TIME1SOK ,MAIN
CLR TIME1SOK
JNB TEMPONEOK ,MAIN2
LCALL READTEMP1
LCALL CONVTEMP
LCALL DISPBCD
LCALL DISP1
MAIN2: LCALL READTEMP
SETB TEMPONEOK
LJMP MAIN
读DS18B20的程序,从DS18B20中读出一个字节的数据
READDS1820:
MOV R7,#08H
SETB TEMPDIN
NOP
NOP
READDS1820LOOP:
CLR TEMPDIN
NOP
NOP
NOP
SETB TEMPDIN
MOV R6,#07H
DJNZ R6,$
MOV C,TEMPDIN
MOV R6,#3CH
DJNZ R6,$
RRC A
SETB TEMPDIN
DJNZ R7,READDS1820LOOP
MOV R6,#3CH
DJNZ R6,$
RET
写DS18B20的程序,从DS18B20中写一个字节的数据
WRITEDS1820:
MOV R7,#08H
SETB TEMPDIN
NOP
NOP
WRITEDS1820LOP:
CLR TEMPDIN
MOV R6,#07H
DJNZ R6,$
RRC A
MOV TEMPDIN,C
MOV R6,#34H
DJNZ R6,$
SETB TENPDIN
DJNZ R7,WRITEDS1820LOP
RET
READ TEMP
READTEMP:
LCALL INITEDS1820
MOV A,#0CCH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV A,#44H
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
RET
READTEMP1:
LCALL INITDS1820
MOV A,#0CCH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV A,#0BEH
LCALL WRITEDS1820
MOV R6,#34H
DJNZ R6,$
MOV R5,#09H
MOV R0,#TEMPHEAD
MOV B,#00H
READTEMP2:
LCALL READDS1820
MOV @R0,A
INC R0
READTEMP21:
LCALL CRC8CAL
DJNZ R5,READTEMP2
MOV A,B
JNZ READTEMPOUT
MOV A,TEMPHEAD+0
MOV TEMPL,A
MOV A,TEMPHEAD+1
MOV TEMPH,A
READTEMPOUT: RET
处理温度BCD码子程序
CONVTEAMP:
MOV A,TEMPH
ANL A,#80H
JZ TEMPC1
CLR C
MOV A,TEMPL
CPL A
ADD A,#01H
MOV TEMPL,A
MOV A,TEMPH
CPL A
ADDC A,#00H
MOV TEMPH,A
MOV TEMPHC,#0BH
SJMP TEMPCH
TEMPC1: MOV TEMPHC,#0AH
TEMPC11: MOV A,TEMPHC
SWAP A
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH
MOV DPTR,#TEMPDOTTAB
MOVC A,@A+DPTR
MOV TEMPLC,A
MOV A,TEMPL
ANL A,#0F0H
SWAP A
MOV TEMPL,A
MOV A,TEMPH
ANL A,#0FH
SWAP A
ORL A,TEMPL
LCALL HEX2BCD1
MOV TEMPL,A
ANL A,#0F0H
SWAP A
ORL A,TEMPHC
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH
SWAP A
ORL A,TEMPLC
MOV TEMPLC,A
MOV A,R7
JZ TEMPC12
ANL A,#0FH
SWAP A
MOV R7,A
MOV A,TEMPHC
ANL A,#0FH
ORL A,R7
MOV TEMPHC,A
TEMPC12: RET
显示子程序
显示数据在70H—73H单元内,用4位LED共阳数码管显示,P1口输出段码数据,;P3口作扫描控制,每个LED数码管亮1ms时间再逐位循环。
DISP1: MOV R1,#70H
MOV R5,#0FEH
PLAY: 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.7
LOOP5: LCALL DLIMS
INC R1
MOV A,R5
JNB ACC.3,ENDOUT
RL A
MOV R5,A
AJMP PLAY
ENDOUT: MOV P1,#0FEH
MOV P3,#0FEH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
;共阳段码表 “0” “1” “2” “3” “4” “5” “6” “7” “8” “9” “不亮” “—”
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
单字节十六进制转BCD
HEX2BCD1: MOV B,#064H
DIV AB
MOV R7,A
MOV A,#0AH
XCH A,B
DIV AB
SWAP A
ORL A,B
RET
Calculate CRC—8 Values. Uses The CCITT—8 Polynomial,Expressed As
X^8+X^5+X^4+1
CRC8CAL:
展开阅读全文