资源描述
智能仪器仪表综合实训
题 目 基于单片机温度控制系统设计
学 院
专 业 电子信息工程
班 级 (仪器仪表)
学生姓名
学 号
指引教师
完毕时间:
目录
一、系统设计---------------------------------------------------------第 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
;==========================================
展开阅读全文