单片机多点温度测量.docx
《单片机多点温度测量.docx》由会员分享,可在线阅读,更多相关《单片机多点温度测量.docx(25页珍藏版)》请在冰豆网上搜索。
单片机多点温度测量
毕业设计
课题名称:
基于AT89S51单片机的多路温度测量及显示系统设计
设计时间:
2009年12月
系部:
电子信息工程系
班级:
**************
姓名:
********
指导老师:
********
目录
一、摘要……………………………….3
二、总体方案设计……………………3
三、系统硬件设计…………………….4
四、系统软件设计……………………7
五、结论………………………………20
六、参考文献…………………………20
(一)摘要
本课题AT89C51单片机系统为核心,能对多点的温度进行实时巡检。
DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。
本文结合实际使用经验,介绍了DS18B20数字温度传感器在单片机下的硬件连接及软件编程,并给出了软件流程图。
(二)总体方案设计
(1)方案的阐述与特点:
本设计方案以DS18B20为传感器、AT89C51单片机为控制核心组成多点温度测试系统,该系统包括传感器电路、键盘与显示电路、串口通信电路组成。
采用美国Dallas半导体公司推出的数字温度传感器DS18B20,属于新一代适配微处理器的智能温度传感器。
它具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成与微处理器的通信。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
1、本方案系统框图为:
本设计运用主从分布式思想,由一位上位机(pc微型计算机),下位机(单片机)多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统。
该系统采用RS-232串行通讯标准,通过上位机(PC)控制下位机(单片机)进行现场温度采集。
温度值既可以送回主控PC进行数据处理,由显示器显示。
也可以由下位机单独工作,实时显示当前各点的温度值,对各点进行控制。
下位机采用的是单片机基于数字温度传感器DS18B20的系统。
DS18B20利用单总线的特点可以方便的实现多点温度的测量,轻松地组建传感器网络,系统的抗干扰性好、设计灵活、方便,而且适合于在恶劣的环境下进行现场温度测量。
2、它有如下特点:
(1)独特的单线接口,既可通过串行口线,也可通过其它I/O口线与微机接口,无需变换其他电路,直接输出被测温度值;
(2)多点能力使分布式温度检测应用得以简化;
(3)不需要外部元件;
(4)既可用数据线供电,也可采用外部电源供电;
(5)不需备份电源;
(6)测量范围为-55~125,固有测温分辨率为0.5;
(7)通过编程可实现9~12位的数字读数方式;
(8)用户可定义非易失性的温度告警设置;
(9)警告搜索命令能识别和寻址温度在编定的极限之外的器件(温度警告情况);
(10)应用范围包括恒温控制、工业系统、消费类产品、温度计或任何热敏系统。
以上特性使得DS18B20非常适用于构建高精度、多点温度测量系统。
根据DS18B20以上特点,此方案实现本课题较好。
(三)硬件设计
本课题的整个系统是由单片机、显示电路、键盘电路、驱动电路、串口通信等构成。
1、温度传感器DS18B20的连线图:
2、单片机系统设计
本课题运用Intel公司的8051进行系统控制,运用到了复位电路、时钟电路、串口、I/O口。
1)常用的上电复位且开关复位电路如下
2)时钟电路如下图左侧部分:
89c51单片机串口主要有两个数据缓冲寄存器SBUF和一个输入移位寄存器组成,其内部还有一个串行控制寄存器SCON和一个波特率发生器。
接收缓冲器与发送缓冲器占用同一个地址99H,其名称亦同样为SBUF。
3)单片机连线图
4)显示电路设计
本课题用四个LED数码管,具体连接如下图(图中为六个LED,连线时只用四个):
5)键盘电路设计
其原理图如下:
本课题使用行列扫描方式,在单片机的P1口上连接上4*4的键盘,单片机扫描键盘,如果有键按下,单片机会根据键码执行相应的程序,使整个系统的功能更加完善。
6)报警电路设计
为了实现多点温度检测报警系统,本课题采用AT89C51单片机作为主控制器,采用扫描的方式对多点DS18B20温度传感器获取对应该位置的温度值,经处理后通过串口可以立即发送到上位机,如温度不在设定的范围内,给出报警信号。
系统总体硬件电路图如下所示:
7)通信模块设计
PC机与单片机的串行通信接口电路如图所示
(四)软件设计
1、软件实现
系统软件设计主要包括系统程序和流程图,根据整个系统的要求,完成温度的测量与控制必须经过以下几个步骤:
单片机接受传感器的温度信号,并通过MAX7219驱动显示出来,单片机扫描键盘,接受控制信号,并将温度显示出来,若温度不在范围内则发出报警。
1)系统主程序流程图
温度测量程序流图
2)键盘程序设计
根据本课题的系统要求,采用4*4的键盘电路结构,P1.0-P1.3接四条行线,P1.4-P1.7接四条列线,整个系统的功能可以利用16个按键将系统完善化、系统化,对于键盘各键的功能如下图所示:
系统程序
;****************************************************************
;常数定义
;****************************************************************
TMELEQU0E0H;20ms,定时器0时间常数
TMEHEQU0B1H
TMEPHEADEQU36H
;****************************************************************
;工作内存定义
;****************************************************************
BITSTDATA20H
TIMEISOKBITBITST.1
TEMPONEOKBITBITST.2
TEMPLDATA26H
TEMPHDATA27H
TEMPHCDATA28H
TEMPLCDATA29H
;****************************************************************
;引脚定义
;****************************************************************
TEMPDINBITP3.7
;****************************************************************
;中断向量区
;****************************************************************
ORG000H
LJMPSTART
ORG00BH
LJMPT0IT
;****************************************************************
;系统初始化
;****************************************************************
ORG100H
START:
MOVSP,#60H
CLSMEM:
MOVR0,#20H
MOVR1,#60H
CLSMEM1:
MOV@R0,#00H
INCR0
DJNZR1,CLSMEM1
MOVTMOD,#00100001B
MOVTH0,#TIMEL
MOVTL0,#TIMEH
SJMPINIT
ERROR:
NOP
LJMPSTART
NOP
INIT:
NOP
SETBET0
SETBTR0
SETBEA
MOVPSW,#00H
CLRTEMPONEOK
LJMPMAIN
;****************************************************************
;定时器0中断服务程序
;****************************************************************
T0IT:
PUSHPSW
MOVPSW,#10H
MOVTH0,#TIMEH
MOVTL0,#TIMEL
INCR7
CJNER7,#32H,T0ITI
MOVR7,#00H
SETBTIMEISOK
TOIT1:
POPPSW
RETI
;****************************************************************
;主程序
;****************************************************************
MAIN:
LCALLDISP1
JNBTIME1SOK,MAIN
CLRTIME1SOK
JNBTEMPONEOK,MAIN2
LCALLREADTEMP1
LCALLCONVTEMP
LCALLDISPBCD
LCALLDISP1
MAIN2:
LCALLREADTEMP
SETBTEMPONEOK
LJMPMAIN
;****************************************************************
;****************************************************************
;子程序区
;****************************************************************
;RESETDS18B20
;****************************************************************
INITDS1820:
SETBTEMPDIN
NOP
NOP
CLRTEMPDIN
MOVR6,#0A0H
DJNZR6,$
MOVR6,#0A0H
DJNZR6,$
SETBTEMPDIN
MOVR6,#32H
DJNZR6,$
MOVR6,#3CH
LOOP1820:
MOVC,TEMPDIN
JCINITDS1820OUT
DJNZR6,LOOP1820
MOVR6,#064H
DJNZR6,$
SJMPINITDS1820
RET
;
INITDS1820OUT:
SETBTEMPDIN
RET
;****************************************************************
;读DS18B20的程序,从DS18B20中读出一个字节的数据
;****************************************************************
READDS1820:
MOVR7,#08H
SETBTEMPDIN
NOP
NOP
READDS1820LOOP:
CLRTEMPDIN
NOP
NOP
NOP
SETBTEMPDIN
MOVR6,#07H
DJNZR6,$
MOVC,TEMPDIN
MOVR6,#3CH
DJNZR6,$
RRCA
SETBTEMPDIN
DJNZR7,READDS1820LOOP
MOVR6,#3CH
DJNZR6,$
RET
;****************************************************************
;写DS18B20的程序,从DS18B20中写一个字节的数据
;****************************************************************
WRITEDS1820:
MOVR7,#08H
SETBTEMPDIN
NOP
NOP
WRITEDS1820LOP:
CLRTEMPDIN
MOVR6,#07H
DJNZR6,$
RRCA
MOVTEMPDIN,C
MOVR6,#34H
DJNZR6,$
SETBTENPDIN
DJNZR7,WRITEDS1820LOP
RET
;****************************************************************
;READTEMP
;****************************************************************
READTEMP:
LCALLINITEDS1820
MOVA,#0CCH
LCALLWRITEDS1820
MOVR6,#34H
DJNZR6,$
MOVA,#44H
LCALLWRITEDS1820
MOVR6,#34H
DJNZR6,$
RET
READTEMP1:
LCALLINITDS1820
MOVA,#0CCH
LCALLWRITEDS1820
MOVR6,#34H
DJNZR6,$
MOVA,#0BEH
LCALLWRITEDS1820
MOVR6,#34H
DJNZR6,$
MOVR5,#09H
MOVR0,#TEMPHEAD
MOVB,#00H
READTEMP2:
LCALLREADDS1820
MOV@R0,A
INCR0
READTEMP21:
LCALLCRC8CAL
DJNZR5,READTEMP2
MOVA,B
JNZREADTEMPOUT
MOVA,TEMPHEAD+0
MOVTEMPL,A
MOVA,TEMPHEAD+1
MOVTEMPH,A
READTEMPOUT:
RET
;****************************************************************
;处理温度BCD码子程序
;****************************************************************
CONVTEAMP:
MOVA,TEMPH
ANLA,#80H
JZTEMPC1
CLRC
MOVA,TEMPL
CPLA
ADDA,#01H
MOVTEMPL,A
MOVA,TEMPH
CPLA
ADDCA,#00H
MOVTEMPH,A
MOVTEMPHC,#0BH
SJMPTEMPCH
TEMPC1:
MOVTEMPHC,#0AH
TEMPC11:
MOVA,TEMPHC
SWAPA
MOVTEMPHC,A
MOVA,TEMPL
ANLA,#0FH
MOVDPTR,#TEMPDOTTAB
MOVCA,@A+DPTR
MOVTEMPLC,A
MOVA,TEMPL
ANLA,#0F0H
SWAPA
MOVTEMPL,A
MOVA,TEMPH
ANLA,#0FH
SWAPA
ORLA,TEMPL
LCALLHEX2BCD1
MOVTEMPL,A
ANLA,#0F0H
SWAPA
ORLA,TEMPHC
MOVTEMPHC,A
MOVA,TEMPL
ANLA,#0FH
SWAPA
ORLA,TEMPLC
MOVTEMPLC,A
MOVA,R7
JZTEMPC12
ANLA,#0FH
SWAPA
MOVR7,A
MOVA,TEMPHC
ANLA,#0FH
ORLA,R7
MOVTEMPHC,A
TEMPC12:
RET
;****************************************************************
;小数部分码表
;****************************************************************
TEMPDOTTAB:
DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB06H,07H,08H,09H,09H
;****************************************************************
;显示区BCD码温度值刷新子程序
;****************************************************************
DISPBCD:
MOVA,TEMPLC
ANLA,#0FH
MOV70H,A
MOVA,TEMPLC
SWAPA
ANLA,#0FH
MOV71H,A
MOVA,TEMPHC
ANLA,#0FH
MOV72H,A
MOVA,TEMPHC
SWAPA
ANLA,#0FH
MOV73H,A
MOVA,TEMPHC
ANLA,#0F0H
CJNZA,#010H,DISPBCD0
SJMPDISPBCD2
DISPBCD0:
MOVA,TEMPHC
ANLA,#0FH
JNZDISPBCD2
MOVA,TEMPHC
SWAPA
ANLA,#0FH
MOV73H,#0AH
MOV72H,A
DISPBCD2:
RET
;***************************************************************
;显示子程序
;****************************************************************
;显示数据在70H—73H单元内,用4位LED共阳数码管显示,P1口输出段码数据,;P3口作扫描控制,每个LED数码管亮1ms时间再逐位循环。
DISP1:
MOVR1,#70H
MOVR5,#0FEH
PLAY:
MOVP1,#0FFH
MOVA,R5
MOVP3,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP1,A
MOVA,R5
JBACC.1,LOOP5
CLRP1.7
LOOP5:
LCALLDLIMS
INCR1
MOVA,R5
JNBACC.3,ENDOUT
RLA
MOVR5,A
AJMPPLAY
ENDOUT:
MOVP1,#0FEH
MOVP3,#0FEH
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
;共阳段码表“0”“1”“2”“3”“4”“5”“6”“7”“8”“9”“不亮”“—”
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
;****************************************************************
;单字节十六进制转BCD
;****************************************************************
HEX2BCD1:
MOVB,#064H
DIVAB
MOVR7,A
MOVA,#0AH
XCHA,B
DIVAB
SWAPA
ORLA,B
RET
;****************************************************************
;CalculateCRC—8Values.UsesTheCCITT—8Polynomial,ExpressedAs
;X^8+X^5+X^4+1
;****************************************************************
CRC8CAL:
PUSHACC
MOVR7,#08H
CRC8LOOP1:
XRLA,B
RRCA
MOVA,B
JNCCRC8LOOP2
XRLA,#18H
CRC8LOOP2:
RRCA
MOVB,A
POPACC
RRA
PUSHACC
DJNZR7,CRC8LOOP1
POPACC
RET
END
(五)结论
1、课题总结
本课题主要是实现对温度进行多点同时测量并准确显示。
整个系统由单片机控制,要能够接受传感器的数据并显示出来,可以从键盘输入命令,系统根据命令选择对应的传感器,并由驱动电路驱动温度显示,对异常情况进行报警。
2、心得
通过这次课程的设计,将课本的知识实际应用,摆脱考试的局限,锻炼自己的解决问题的能力,独立思考能力。
本课题使我熟悉了单片机设计原则,对51系列单片机内部构造、与其它芯片的接口技术及其工作情况有了更进一步了解,虽然是很简单的运用,但比为了考试而瞬时记忆的知识牢固多了,工作需要独立解决问题的的能力,还是希望多一些这样的机会。
(六)参考文献
[1]周慈航著·单片机程序设计基础[M]·北京:
北京航空航天大学出版社,2003
[2]方佩敏编著·智能化集成温度传感器原理与应用[M]·北京:
电子工业出版社,2002
[3]张毅刚主编·单片机原理及应用[M]·北京:
高等教育出版社,2008
[4]李道玲,李玲,朱艳编著·传感器电路分析与设计[M]·武汉:
武汉大学出版社,2003
[5]刘笃人,韩保军编著。
传感器及应用技术[M]·西安:
西安电子科技大学出版社,2003
[6]陈小忠等,单片机接口技术实用子程序·北京:
人民邮电出版社,2005
[7]李群芳编著,单片机原理、接口及应用—嵌入式系统计数基础·北京:
清华大学出版社
数字温度及设计电路原理图