资源描述
基于单片机的温度控制系统设计报告
37
2020年4月19日
文档仅供参考
智能仪器仪表综合实训
题 目 基于单片机的温度控制系统设计
学 院
专 业 电子信息工程
班 级 (仪器仪表)
学生姓名
学 号
指导教师
完成时间:
目录
一、系统设计---------------------------------------------------------第 1 页
(一) 系统总体设计方案----------------------------------------------第 1 页
(二) 温度信号采集电路选择和数据处理--------------------------------第 3 页
(三) 软件设计------------------------------------------------------第 3 页
二、单元电路设计-----------------------------------------------------第 5 页
(一) 温度信号采集电路----------------------------------------------第 5 页
(二) 步进电机电路------------------------------------------------- 第 5 页
(三) 液晶显示模块---------------------------------------------------------- 第 6 页
(四) 晶振复位电路--------------------------------------------------第 7 页
三、总结体会--------------------------------------------------------------------------------------第 7 页
四、参考文献-------------------------------------------第 8 页
附录:程序清单------------------------------------------第 8 页
一、系统设计
(一) 系统总体设计方案
设计框图如下所示:
液晶显示及按键设置
温
度
信
号
采
集
温度控制接口
步进电机控制
图1 系统总体设计框图
总电路图如下:
图2 系统总电路图
简单功能说明:
一个显示实时温度的小系统,能够自行设定高温报警和低温报警值,实现温度控制电机带动外围器件功能。本系统经过温度传感器DS18B20实现对温度数据的采集,数据处理后显示到液晶屏上,经过数据处理,温度值精确度为0.1。
简单操作方法:
系统上电后液晶显示实时温度,经过按键能够设定高低温限定值:
A.按下K1,显示系统的高低温限定值;
B.再按K1,进入设定状态,液晶屏光标闪动提示设定,此时设定高温限值还是低温限值能够在
K1键转换;
C.进入设定状态后,K2键用于值加1,K3键用于值减1;
D.设定完后,按键K4确认后退出,返回显示实时温度!
(二) 温度信号采集电路选择和数据处理
方案:采用温度传感器DS18B20
美国DALLAS公司的产品可编程单总线数字式温度传感器DS18B20可实现室内温度信号的采集,有很多优点:如直接输出数字信号,故省去了后继的信号放大及模数转换部分,外围电路简单,成本低;单总线接口,只有一根信号线作为单总线与MCU连接,且每一只都有自己唯一的64位系列号存储在其内部的ROM存储器中,故在一根信号线上能够挂接多个DS18820,便于多点测量且易于扩展.
DS18B20的测温范围较大,集成度较高,故选用此方案。
DS18B20内部1,2位寄存器存放实时温度值,本系统对以上两寄存器数据处理后精度为0.1;DS18B20第3,4位寄存器分别存放高温限值和低温限值,而且DS18B20内部还有EEPROM,因此经过第3,4寄存器与EEPROM的数据交换就能实现对设定后的值进行贮存。
(三) 软件设计
本实验中我选用Keil编程平台.
主程序流程图:
初始化液晶显示
启动DS18B20并初始化
读取温度数据
数据转换
显示温度
显示温度上下限值
KeyScan?kkk1k
设置温度上下限值
温度上下限值存入寄存器
温度比较
启动电机
温度是否大于高温限值或小于低温限值
YES
NO
YESk
NO
图3 主程序流程图
二、单元电路设计
(一) 温度信号采集电路
图4 温度信号采集电路
(二) 步进电机电路
图5 步进电机电路
(三) 液晶显示模块
图6液晶显示模块
(四) 晶振复位电路
图7 晶振复位电路
三、总结体会
本次课程设计给我们提供了一个将自己所学的知识应用于实践的良机,经过了两个周的设计我学到了很多非常有价值的东西,懂得了如何将理论知识转化成实际程序的设计;掌握的单片机开发与设计的思路与方案确定;学会了更有效的查找自己所需的资料;同时也意识到了团队协作的重要性;掌握了硬件与程序设计的一般步骤和方法。这对我们以后的学习和工作的是非常有帮助的。
设计是我们将来必须的技能,这次课程设计刚好给我们提供了一个应用自己所学知识的机会,从到图书馆和网上查找资料到对硬件与程序模块的设计对各模块的调试再到最后整体设计调试,都对我所学的知识进行了检验,增强了自信心。
经过本次课程设计,我进一步温习和巩固了课本的理论知识,对单片机各接口与外部电路之间的连接关系有了更加深刻的理解。同时掌握了Proteus和keil软件的基本应用。同时,在课程设计过程中,将理论知识应用于实际应用,增强了理论联系实际的能力。虽然设计时有时一个问题需要我们花费很长的时间,很烦很累但当我们经过查找资料解决了之后心里很开心很有成就感。同时也使我明白了要将理论运用于实践还是一种非常重要的能力,要想牢固的掌握所学的知识我们必须将理论与实践结合起来,用理论来指导实践,用实践来验证理论,增强对理论的理解。不断地充实自己的理论,提高自己的动手能力。最终完成了整个设计之后,使我更加坚信只要我们努力和采用正确的方法,没有什么事是我们解决不了的。
最后,我在这里衷心地感谢所有教给我知识和在课程设计中给予我帮助的老师们和同学们,是她们给我们的知识才使我们得以顺利完成此次课程设计。
四、参考文献
《单片微型计算机原理与应用》 , 张毅坤、陈善久、裘雪红 西安电子科技大学出版社
《51单片机应用从零开始》 杨欣、王玉凤、李湘黔 清华大学出版社
《51单片机应用开发范例大全》 宋戈、黄鹤松、员玉良 人民邮电出版社
郭天祥 电子工业出版社
附录:程序清单
;-------------------------------------------------
; 简单功能说明:一个显示实时温度的小系统,能够自行设
; 定高温报警和低温报警值,实现温度控制电机带动外围器
; 件功能。
;
;-------------------------------------------------
DQ EQU P1.7 ;DS18B20控制口
RS EQU P2.4
RW EQU P2.5
E EQU P2.6
LCD EQU P0
FLAG EQU 30H
GEWEI EQU 29H
SHI EQU 28H
XIAOSHU EQU 27H
TEMP_TL EQU 20H ;低温限值
TEMP_TH EQU 21H ;高温限值
TEMPH EQU 22H ;温度高字节
TEMPL EQU 23H ;温度低字节
TEMP EQU 24H
K1 EQU P3.0
K2 EQU P3.1
K3 EQU P3.2
K4 EQU P3.3
;===============================================
MAIN: MOV TEMP_TH,#25
MOV TEMP_TL,#01
ACALL INIT_LCD ;初始化液晶
ACALL WR_THL ;写入高温限值和低温限值寄存器
ACALL WR_PROM
ACALL RE_PROM ;从EEPROM中返回高温限值和低温限值
ACALL RESET ;初始化1820
JB FLAG,LOOP
ACALL ERROR ;报错
LOOP: ACALL READ_T ;1820读取温度
ACALL DISP_TEMP ;液晶显示实时温度
ACALL KEYSCAN ;键盘设定高温限值和低温限值
ACALL TEMP_COMP
JMP LOOP
;=============启动1820读取温度====================
READ_T: SETB DQ
ACALL RESET
JB FLAG,READ_T1
RET
READ_T1:
MOV A,#0CCH
ACALL WR_1820
MOV A,#44H
ACALL WR_1820
ACALL RESET
MOV A,#0CCH
ACALL WR_1820
MOV A,#0BEH
ACALL WR_1820
ACALL READ_1820
RET
;=========把高温和低温限值写入寄存器=================
WR_THL: JB FLAG,WR_HL
RET
WR_HL: ACALL RESET
MOV A,#0CCH
ACALL WR_1820
MOV A,#4EH
ACALL WR_1820
MOV A,TEMP_TH
ACALL WR_1820
MOV A,TEMP_TL
ACALL WR_1820
RET
;==========把高温和低温限值写入EEPROM=================
WR_PROM:ACALL RESET
MOV A,#0CCH
ACALL WR_1820
MOV A,#48H
ACALL WR_1820
RET
;========把EEPROM的值返回到高温和低温限值寄存器========
RE_PROM:
ACALL RESET
MOV A,#0CCH
ACALL WR_1820
MOV A,#0B8H
ACALL WR_1820
RET
;===========初始化1820==================================
RESET: SETB DQ
NOP
CLR DQ
MOV R5,#250
DJNZ R5,$
SETB DQ
NOP
MOV R5,#25H
RESET1: JNB DQ,FLAG1
DJNZ R5,RESET1
JMP NDQ
FLAG1: SETB FLAG
MOV R5,#100
DJNZ R5,$
SETB DQ
MOV R5,#100
DJNZ R5,$
JMP RETU
NDQ: CLR FLAG
ACALL ERROR
RETU: SETB DQ
RET
;=============1820写字节========================
WR_1820:
MOV R6,#8
CLR C
WR1: CLR DQ
MOV R5,#7
DJNZ R5,$
RRC A
MOV DQ,C
MOV R5,#25
DJNZ R5,$
SETB DQ
NOP
NOP
DJNZ R6,WR1
SETB DQ
RET
;==============读取1820数据======================
READ_1820:
MOV R2,#4
MOV R1,#TEMPL
RE1: MOV R6,#8
RE2: SETB DQ
NOP
CLR DQ
CLR C
NOP
NOP
SETB DQ
MOV R5,#9
DJNZ R5,$
MOV C,DQ
MOV R5,#24
DJNZ R5,$
RRC A
DJNZ R6,RE2
MOV @R1,A
DEC R1
DJNZ R2,RE1
RET
;===========转换数据=============================
TURN: MOV XIAOSHU,TEMPL ;保存TEMPL值,后面用于取低4位转换小数部分
MOV A,TEMPL
MOV C,16 ;22H的位寻址
RRC A
MOV C,17
RRC A
MOV C,18
RRC A
MOV C,19
RRC A
MOV TEMP,A
MOV A,XIAOSHU
ANL A,#00001111B
MOV XIAOSHU,A
RET
;========键盘扫描=============================
KEYSCAN:
JB K1,RETUN ;按下K1,进入键盘扫描
ACALL DELAY20
JNB K1,$
ACALL CLR_LCD ;清屏
ACALL DISP_THL ;显示高温限值和低温限值
ACALL SET_HL ;设定限值
ACALL WR_THL ;把高温限值和低温限值写入RAM
//.../ACALL LED
ACALL WR_PROM ;限值复制到EEPROM中
RETUN: RET
;------------设定高低限值----------------------
SET_HL: //JNB K4,EXIT
JB K1,KEY4
ACALL DELAY20
JNB K1,$
CPL 20H.1 ;标志位,标志设定高温限值或低温限值
JB 20H.1,SET_H
JMP SET_L
;-------------调高温限值-------------------------
SET_H:
ACALL TH_SHAN ;光标闪,进入设定
KEY2H: JNB K1,SET_L ;高温限值与低温限值间设定转换
JNB K4,EXIT
JB K2,KEY3H ;按下K2,值加1
ACALL DELAY20
JNB K2,$
INC TEMP_TH
MOV A,TEMP_TH
CJNE A,#99,A0
MOV TEMP_TH,#00
A0: ACALL DISP_THL
KEY3H:
JB K3,KEY2H ;按下K3,值减1
ACALL DELAY20
JNB K3,$
DEC TEMP_TH
MOV A,TEMP_TH
CJNE A,#0,A1
MOV TEMP_TH,#99
A1: ACALL DISP_THL
JMP SET_H
;-------------调低温限值------------------------------
SET_L:
ACALL TL_SHAN
KEY2L: JNB K1,SET_H ;高温限值与低温限值间设定转换
JNB K4,EXIT
JB K2,KEY3L ;按下K2,值加1
ACALL DELAY20
JNB K2,$
INC TEMP_TL
MOV A,TEMP_TL
CJNE A,#99,A2
MOV TEMP_TL,#00
A2: ACALL DISP_THL
KEY3L: JB K3,KEY2L ;按下K3,值减1
ACALL DELAY20
JNB K3,$
DEC TEMP_TL
MOV A,TEMP_TL
CJNE A,#0,A3
MOV TEMP_TL,#99
A3: ACALL DISP_THL
JMP SET_L
;----------------------
KEY4: JNB K4,EXIT ;K4用于退出设定
JMP SET_HL
//JMP SET_HL
EXIT: ACALL DELAY20
JNB K4,$
MOV LCD,#00001100B ;设置液晶光标不显示、不闪烁
ACALL WR_COMM
ACALL CLR_LCD
ACALL DISP_TEMP
RET
;==============温度比较======================================
TEMP_COMP:
MOV A,TEMP_TH
SUBB A,TEMP
ACALL DIANJI
MOV A,TEMP
SUBB A,TEMP_TL
ACALL DIANJI
RET
;============================================
/*MORE: MOV DPTR,#MORE0
MOV LCD,#0CEH
ACALL WR_COMM
ACALL DISP0
RET
MORE0: DB '>H',0H
*/
;=============启动电机========================
;电机接口是P1低4位,因为P1.7是温度传感器的控制口
;避免冲突,电机接口按位控制
DIANJI: JC DIAN0
RET
DIAN0: MOV R0,#4
//ACALL MORE
DIAN1:
SETB P1.0
CLR P1.1
CLR P1.2
CLR P1.3
ACALL DELAY
CLR P1.0
SETB P1.1
ACALL DELAY
CLR P1.1
SETB P1.2
ACALL DELAY
CLR P1.2
SETB P1.3
ACALL DELAY
//RL A
DJNZ R0,DIAN1
CLR P1.0
CLR P1.1
CLR P1.2
CLR P1.3
RET
DELAY: MOV R5,#5
DLY1: MOV R6,#10
DLY2: MOV R7,#50
DJNZ R7,$
DJNZ R6,DLY2
DJNZ R5,DLY1
RET
;============清屏=============================
CLR_LCD:
MOV LCD,#80H
ACALL WR_COMM
MOV R0,#16
CLR1: MOV LCD,#' '
ACALL WR_DATA
DJNZ R0,CLR1
MOV LCD,#0C0H
ACALL WR_COMM
MOV R0,#16
CLR2: MOV LCD,#' '
ACALL WR_DATA
DJNZ R0,CLR2
RET
;===============报错============================
ERROR: MOV LCD,#80H
ACALL WR_COMM
MOV DPTR,#ERORTAB
ACALL DISP0
RET
ERORTAB:
DB 'INIT ERROR!',0H
;================温度标志===================
DISP_C: MOV LCD,A
ACALL WR_COMM
MOV LCD,#0DFH
ACALL WR_DATA
MOV LCD,#'C'
ACALL WR_DATA
RET
;=================数码显示======================
SHUMA: MOV DPTR,#SHUTAB
MOVC A,@A+DPTR
MOV LCD,A
ACALL WR_DATA
RET
SHUTAB: DB 30H,31H,32H,33H,34H
DB 35H,36H,37H,38H,39H
;===============显示实时温度======================
DISP_TEMP:
ACALL TURN
MOV LCD,#80H
ACALL WR_COMM
MOV DPTR,#CURRENT
ACALL DISP0
MOV LCD,#0CAH
ACALL WR_COMM
MOV LCD,#2EH ;小数点
ACALL WR_DATA
MOV A,#0CCH
ACALL DISP_C ;温度标志
;------------------------------
MOV A,XIAOSHU
MOV DPTR,#XIAO
MOVC A,@A+DPTR
MOV XIAOSHU,A
MOV A,TEMP
MOV B,#10
DIV AB
MOV SHI,A
MOV GEWEI,B
MOV A,XIAOSHU
MOV LCD,#0CBH
ACALL WR_COMM
ACALL SHUMA
MOV A,SHI
MOV LCD,#0C8H
ACALL WR_COMM
ACALL SHUMA
MOV A,GEWEI
ACALL SHUMA
//MOV LCD,#0D0H ;把光标移到别处
//ACALL WR_COMM
RET
CURRENT:DB 'Tempreture Now: ',0H
XIAO: DB 00H,00H,01H,01H,02H,03H,03H,04H
DB 05H,05H,06H,06H,07H,08H,08H,09H
;================字符显示=============================
DISP0: MOV R1,#0
NEXT: MOV A,R1
MOVC A,@A+DPTR
JZ RETT
MOV LCD,A
INC R1
ACALL WR_DATA
JMP NEXT
RETT: RET
;==========显示高温限值和低温限值======================
DISP_THL:
MOV DPTR,#SETTHL
MOV LCD,#80H
ACALL WR_COMM
ACALL DISP0
MOV DPTR,#THL
MOV LCD,#0C1H
ACALL WR_COMM
ACALL DISP0
;---------------------------
F5_THL:
//ACALL RE_PROM
MOV A,TEMP_TH
MOV B,#10
DIV AB
MOV SHI,A //SHI
MOV GEWEI,B //GE
MOV A,SHI
MOV LCD,#0C4H
ACALL WR_COMM
ACALL SHUMA
MOV A,GEWEI
ACALL SHUMA
MOV A,#0C6H
ACALL DISP_C
;----------------
MOV A,TEMP_TL
MOV B,#10
DIV AB
MOV SHI,A //SHI
MOV GEWEI,B //GE
MOV A,SHI
MOV LCD,#0CCH
ACALL WR_COMM
ACALL SHUMA
MOV A,GEWEI
ACALL SHUMA
MOV A,#0CEH
ACALL DISP_C
RET
SETTHL:
DB 'Set TH/TL:',0H
THL: DB 'TH: TL:',0H
;==========液晶初始化================================
INIT_LCD:
MOV LCD,#00000001B
ACALL WR_COMM
MOV LCD,#00111000B
ACALL WR_COMM
MOV LCD,#00001100B
ACALL WR_COMM
MOV LCD,#00000110B
ACALL WR_COMM
RET
;============TH光标闪==============================
TH_SHAN:
MOV LCD,#00001111B
ACALL WR_COMM
MOV LCD,#0C5H
ACALL WR_COMM
RET
;=============TL光标闪=============================
TL_SHAN:
MOV LCD,#00001111B
ACALL WR_COMM
MOV LCD,#0CDH
ACALL WR_COMM
RET
;============液晶写命令============================
WR_COMM:
CLR RS
CLR RW
CLR E
ACALL CHECK_BF
SETB E
RET
;==============液晶写数据==============================
WR_DATA:
SETB RS
CLR RW
CLR E
ACALL CHECK_BF
SETB E
RET
;============液晶是否忙碌============================
CHECK_BF:
MOV LCD, #0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB LCD.7,CHECK_BF
RET
;======================================================
DELAY20:
MOV R5,#50
DLY: MOV R6,#100
DJNZ R6,$
DJNZ R5,DLY
RET
END
;==========================================
展开阅读全文