基于单片机的水温自动控制系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的水温自动控制系统设计
一、题目要求及分析
要求设计一个水温控制系统,能正常控制和测量温度范围,用AT89C51控制DS18B20,读取数据对DS18B20转换后的数据进行处理,转换成实际温度,使用6位数码管显示DS18B20测出的温度。
二、系统总体方案
1、温度传感器选择
采用DS18B20单线数字温度传感器做温度检测器。
DS18B20能够直接将所采集的
信号进行模|数转换
2、LED显示方案
系统需要采用6位LED数码管显示,LED显示有动态显示和静态显示。
本次采用
动态显示,增加74LS245芯片最为LED数码管的驱动,采用共阴极的LED,其中
单片机的P1口为LED的段码输出口,P3.0~P3.5分别是LED的位码输出口
三、硬件电路组成部分
(1)DS18B20温度采集电路
DS18B20有3个引脚,GND接地信号、DQ数据输入\输出引脚、VDD外接供电电源输入端。
如图示:
DS18B20温度值格式表,如下图所示。
这是12位转换后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得温度大于0,这5位为0,只要将测得得数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1测得的数值需要取反加1再乘0.0625即可得到实际温度。
高8为中的高五位是符号位,表示温度是零上还是零下。
高8位中的低三位和低8为中的高4位构成温度的整数部分。
低8位中的低4位为温度的小数部分。
(2)数码管LED
(3)单片机外部时钟电路
(4)单片机复位电路
四、软件设计
1、主程序
2、DS18B20复位子程序
3、DS18B20读温度子程序
4、DS18B20数据处理子程序
五、程序
(一)编写、汇编源程序
;变量定义
DQ BIT P2.4 ;DS18B20数据位FLAG1 BIT 00H
SIGN BIT 01H
MSB EQU 30H
LSB EQU 31H
INTEG EQU 32H
DECIM EQU 33H
SEG-S EQU 34H
SEG-I3 EQU 35H
SEGI2 EQU 36H
SEG-I1 EQU 37H
SEG-D1 EQU 38H
SEG-C EQU 39H
;主程序
ORG 0000H
MAIN LCALL INIT-1820
LCALL GET-TEMPER
LCALL DATA-PPOC
LCALL SEG-GEN
LCALL DISPLAY
SJMP MAIN
;DS18B20复位初始化子程序
INIT-1820: SETB DQ
NOP
CLR DQ
MOV R1,#3
TSR1: MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB DQ
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB DQ,TSR3
DJNZ R0,TSR2
LJMP TSR4
TSR3: SETB FLAG1
LJMP TSR5
TSR4 : CLR FLAG1
LJMP TSR6 TSR5: MOV R0,#117
DJNZ R0,$
TSR6: SETB DQ
RET
;读出转换后的温度值
GET-TEMPER: SETB DQ
LCALL INIT-1820
JB FLAG1,TSS2
RET
TSS2:MOV A,#0CCH
LCALL WRITE-1820
MOV A, #44H
LCALL WRITE-1820
LCALL DELAY
LCALL INIT-1820
MOV A,#0CCH
LCALL WRITE-1820
MOV A,#0BEH
LCALL WRITE-1820
LCALL READ-1820
RET
;写DS18B20的子程序
WRITE-1820: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
;读DS18B20的程序
READ-18200:MOV R4,#2
MOV R1,#31H
RE00:MOV R,#8
RE01:CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9 RE10:DJNZ R3,RE10
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;数据处理子程序
DATA-PROC: CLR C
CLR SIGN
MOV A,MSB
RLC A
JC NEG
LJMP PROC NEG: CLR C
SETB SIGN
MOV A,LSB
CPL A
ADD A,#1
MOV LSB,A
MOV A,MSB
CPL A
ADDC A,#0
MOV MSB,A PROC: MOV A,LSB
ANL A,#0FH
MOV DECIM,A
MOV A,MSB
SWAP A
ANL A,#0F0H
MOV INTEG,A
MOV A,LSB
SWAP A
ANL A,#0FH
MOV R0,INTEG
ORL A,R0
MOV INTEG,A
RET
;生成显示码子程序
SEG-GEN:MOV DPTR,#TABLE
JB SIGN,S-NEG
MOV SEG-S,#00H
SJMP S-INT
S-NEG: MOV SEG-S,#40H
S-INT MOV A,INTEG
MOV B,#100
DIV AB
MOVC A,@A+DPTR
MOV SEG-I3,A
MOV A,B
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV SEG-I2,A
MOV A,B
MOVC A,@A+DPTR
ORL A,#80H
MOV SEG-I1,A
MOV DPTR,#FLOAT-TAB
MOV A,DECIM
MOVC A,@A+DPTR
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV SEG-D1,A
MOV SEG-C,#39H
RET
;显示子程序
DISPLAY: MOV P3,#0FFH
CLR P3.0
MOV P1,SEG-S
LCALL DELAY
SETB P3.0
CLR P3.1
MOV P1,SEG-I3
CALL DELAY
SETB P3.1
CLR P3.2
MOV P1,SEG-I2
LCALL DELAY
SETB P3.2
CLR P3.3
MOV P1,SEG-I1
LCALL DELAY
SETB P3.3
CLE P3.4
MOV P1,SEG-D1
LCALL DELAY
SETB P3.4
CLR P3.5
MOV P1,SEG-C
LCALL DELAY
SETB P3.5
RET
;延时子程序,延时5秒
DELAY: MOV R5,#5
D1:MOV R6,#248
DJNZ R6,$
DJNZ R5,D1
RET
;
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
FLOAT-TAB DB00,01,01,02,03,03,04,04,05,06,06,07,08,08,
DB09,09
END
(二)程序仿真
1、先在protues仿真软件中搭建硬件电路;
2、根据设计思想和硬件电路在keil2中编写程序代码调试通过并生成.axm文件;
3、双击protues仿真电路中的单片机,将.axm文件添加到单片机中,然后运行观察结
果。
(三)结果分析
能够从温度传感器中获得温度数据,程序能正常执行,测得结果有一定的误差,总之,效果还行。
六、心的体会
本设计以单片机为核心部件的控制系统,利用软件编程,最终实现设计要求。
这次课程设计历时两个星期,从一开始的确定课题,理论学习,到后来的资料查找,再到调试仿真,这一切都使我的理论知识和动手能力进一步提高。
在本次课程设计中,遇到了很多困难,如查找元器件,写程序,调试仿真,但通过
仔细分析以及查找资料后解决了问题,提高了自己解决问题的能力。
在这个过程中我感受颇多,它不仅是一个对我这学期知识学习情况和我的应用动手能力的检验,而且还是我面对困难的心态,做事的毅力和耐心的考验,同时让我深刻感受到了做课程设计意义的所在,在整个过程中受到了同学的帮助,在此表示感谢!。