资源描述
- -
建筑工程学院
单片机课程设计报告
题目名称: 多路数字温度测量系统设计
系: 电气工程系
专 业: 电气工程及其自动化
班 级: 电控072
学 号: 2007308203
学生: 朱立娜
指导教师: 龚志广
职 称: 讲师
2011年 1 月 6 日
目录
一、摘要……………………………….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个按键将系统完善化、系统化,对于键盘各键的功能如下列图所示:
系统程序
;****************************************************************
;常数定义
;****************************************************************
TMEL EQU 0E0H ;20ms,定时器0时间常数
TMEH EQU 0B1H
TMEPHEAD EQU 36H
;****************************************************************
;工作存定义
;****************************************************************
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
;****************************************************************
;系统初始化
;****************************************************************
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
;****************************************************************
; 主程序
;****************************************************************
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
;****************************************************************
;****************************************************************
;子程序区
;****************************************************************
; 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
; ****************************************************************
; 读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
; ****************************************************************
; 小数局部码表
; ****************************************************************
TEMPDOTTAB: DB 00H, 01H, 01H, 02H, 03H, 03H, 04H,04H,05H,06H
DB 06H,07H,08H,09H,09H
; ****************************************************************
; 显示区BCD码温度值刷新子程序
; ****************************************************************
DISPBCD: MOV A,TEMPLC
ANL A,#0FH
MOV 70H,A
MOV A,TEMPLC
SWAP A
ANL A,#0FH
MOV 71H,A
MOV A,TEMPHC
ANL A,#0FH
MOV 72H,A
MOV A,TEMPHC
SWAP A
ANL A,#0FH
MOV 73H,A
MOV A,TEMPHC
ANL A,#0F0H
CJNZ A,#010H,DISPBCD0
SJMP DISPBCD2
DISPBCD0: MOV A,TEMPHC
ANL A,#0FH
JNZ DISPBCD2
MOV A,TEMPHC
SWAP A
ANL A,#0FH
MOV 73H,#0AH
MOV 72H,A
DISPBCD2: 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
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: PUSH ACC
MOV R7,#08H
CRC8LOOP1: XRL A,B
RRC A
MOV A,B
JNC CRC8LOOP2
XRL A,#18H
CRC8LOOP2: RRC A
MOV B,A
POP ACC
RR A
PUSH ACC
DJNZ R7,CRC8LOOP1
POP ACC
RET
END
〔五〕结论
1、课题总结
本课题主要是实现对温度进展多点同时测量并准确显示。整个系统由单片机控制,要能够承受传感器的数据并显示出来,可以从键盘输入命令,系统根据命令选择对应的传感器,并由驱动电路驱动温度显示,对异常情况进展报警。
2、心得
通过这次课程的设计,将课本的知识实际应用,摆脱考试的局限,锻炼自己的解决问题的能力,独立思考能力。本课题使我熟悉了单片机设计原那么,对51系列单片机部构造、与其它芯片的接口技术及其工作情况有了更进一步了解,虽然是很简单的运用,但比为了考试而瞬时记忆的知识结实多了,工作需要独立解决问题的的能力,还是希望多一些这样的时机。
〔六〕参考文献
[1]周慈航著·单片机程序设计根底[M]·:航空航天大学,2003
[2]方佩敏编著·智能化集成温度传感器原理与应用[M]·:电子工业,2002
[3]毅刚主编·单片机原理及应用[M]·:高等教育,2021
[4]道玲,玲,朱艳编著·传感器电路分析与设计[M]·:大学,2003
[5]笃人,保军编著。传感器及应用技术[M]·:电子科技大学,2003
[6]小忠等,单片机接口技术实用子程序·:人民邮电,2005
[7]群芳编著 ,单片机原理、接口及应用—嵌入式系统计数根底·:清华大学
数字温度及设计电路原理图
- word.zl
展开阅读全文