基于单片机的温度控制系统设计报告.docx
《基于单片机的温度控制系统设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度控制系统设计报告.docx(29页珍藏版)》请在冰豆网上搜索。
基于单片机的温度控制系统设计报告
基于单片机的温度控制系统设计报告
智能仪器仪表综合实训
题目基于单片机的温度控制系统设计
学院
专业电子信息工程
班级(仪器仪表)
学生姓名
学号
指导教师
一、系统设计
(一)系统总体设计方案
设计框图如下所示:
图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编程平台.
主程序流程图:
图3主程序流程图
二、单元电路设计
(一)温度信号采集电路
图4温度信号采集电路
(二)步进电机电路
图5步进电机电路
(三)液晶显示模块
图6液晶显示模块
(四)晶振复位电路
图7晶振复位电路
三、总结体会
本次课程设计给我们提供了一个将自己所学的知识应用于实践的良机,通过了两个周的设计我学到了很多非常有价值的东西,懂得了如何将理论知识转化成实际程序的设计;掌握的单片机开发与设计的思路与方案确定;学会了更有效的查找自己所需的资料;同时也意识到了团队协作的重要性;掌握了硬件与程序设计的一般步骤和方法。
这对我们以后的学习和工作的是非常有帮助的。
设计是我们将来必需的技能,这次课程设计刚好给我们提供了一个应用自己所学知识的机会,从到图书馆和网上查找资料到对硬件与程序模块的设计对各模块的调试再到最后整体设计调试,都对我所学的知识进行了检验,增强了自信心。
通过本次课程设计,我进一步温习和巩固了课本的理论知识,对单片机各接口与外部电路之间的连接关系有了更加深刻的理解。
同时掌握了Proteus和keil软件的基本应用。
同时,在课程设计过程中,将理论知识应用于实际应用,增强了理论联系实际的能力。
虽然设计时有时一个问题需要我们花费很长的时间,很烦很累但当我们通过查找资料解决了之后心里很开心很有成就感。
同时也使我明白了要将理论运用于实践还是一种非常重要的能力,要想牢固的掌握所学的知识我们必须将理论与实践结合起来,用理论来指导实践,用实践来验证理论,增强对理论的理解。
不断地充实自己的理论,提高自己的动手能力。
最终完成了整个设计之后,使我更加坚信只要我们努力和采用正确的方法,没有什么事是我们解决不了的。
最后,我在这里衷心地感谢所有教给我知识和在课程设计中给予我帮助的老师们和同学们,是他们给我们的知识才使我们得以顺利完成此次课程设计。
四、参考文献
《单片微型计算机原理与应用》,张毅坤、陈善久、裘雪红西安电子科技大学出版社
《51单片机应用从零开始》杨欣、王玉凤、李湘黔清华大学出版社
《51单片机应用开发范例大全》宋戈、黄鹤松、员玉良人民邮电出版社
郭天祥电子工业出版社
附录:
程序清单
;-------------------------------------------------
;简单功能说明:
一个显示实时温度的小系统,可以自行设
;定高温报警和低温报警值,实现温度控制电机带动外围器
;件功能。
;
;-------------------------------------------------
DQEQUP1.7;DS18B20控制口
RSEQUP2.4
RWEQUP2.5
EEQUP2.6
LCDEQUP0
FLAGEQU30H
GEWEIEQU29H
SHIEQU28H
XIAOSHUEQU27H
TEMP_TLEQU20H;低温限值
TEMP_THEQU21H;高温限值
TEMPHEQU22H;温度高字节
TEMPLEQU23H;温度低字节
TEMPEQU24H
K1EQUP3.0
K2EQUP3.1
K3EQUP3.2
K4EQUP3.3
;===============================================
MAIN:
MOVTEMP_TH,#25
MOVTEMP_TL,#01
ACALLINIT_LCD;初始化液晶
ACALLWR_THL;写入高温限值和低温限值寄存器
ACALLWR_PROM
ACALLRE_PROM;从EEPROM中返回高温限值和低温限值
ACALLRESET;初始化1820
JBFLAG,LOOP
ACALLERROR;报错
LOOP:
ACALLREAD_T;1820读取温度
ACALLDISP_TEMP;液晶显示实时温度
ACALLKEYSCAN;键盘设定高温限值和低温限值
ACALLTEMP_COMP
JMPLOOP
;=============启动1820读取温度====================
READ_T:
SETBDQ
ACALLRESET
JBFLAG,READ_T1
RET
READ_T1:
MOVA,#0CCH
ACALLWR_1820
MOVA,#44H
ACALLWR_1820
ACALLRESET
MOVA,#0CCH
ACALLWR_1820
MOVA,#0BEH
ACALLWR_1820
ACALLREAD_1820
RET
;=========把高温和低温限值写入寄存器=================
WR_THL:
JBFLAG,WR_HL
RET
WR_HL:
ACALLRESET
MOVA,#0CCH
ACALLWR_1820
MOVA,#4EH
ACALLWR_1820
MOVA,TEMP_TH
ACALLWR_1820
MOVA,TEMP_TL
ACALLWR_1820
RET
;==========把高温和低温限值写入EEPROM=================
WR_PROM:
ACALLRESET
MOVA,#0CCH
ACALLWR_1820
MOVA,#48H
ACALLWR_1820
RET
;========把EEPROM的值返回到高温和低温限值寄存器========
RE_PROM:
ACALLRESET
MOVA,#0CCH
ACALLWR_1820
MOVA,#0B8H
ACALLWR_1820
RET
;===========初始化1820==================================
RESET:
SETBDQ
NOP
CLRDQ
MOVR5,#250
DJNZR5,$
SETBDQ
NOP
MOVR5,#25H
RESET1:
JNBDQ,FLAG1
DJNZR5,RESET1
JMPNDQ
FLAG1:
SETBFLAG
MOVR5,#100
DJNZR5,$
SETBDQ
MOVR5,#100
DJNZR5,$
JMPRETU
NDQ:
CLRFLAG
ACALLERROR
RETU:
SETBDQ
RET
;=============1820写字节========================
WR_1820:
MOVR6,#8
CLRC
WR1:
CLRDQ
MOVR5,#7
DJNZR5,$
RRCA
MOVDQ,C
MOVR5,#25
DJNZR5,$
SETBDQ
NOP
NOP
DJNZR6,WR1
SETBDQ
RET
;==============读取1820数据======================
READ_1820:
MOVR2,#4
MOVR1,#TEMPL
RE1:
MOVR6,#8
RE2:
SETBDQ
NOP
CLRDQ
CLRC
NOP
NOP
SETBDQ
MOVR5,#9
DJNZR5,$
MOVC,DQ
MOVR5,#24
DJNZR5,$
RRCA
DJNZR6,RE2
MOV@R1,A
DECR1
DJNZR2,RE1
RET
;===========转换数据=============================
TURN:
MOVXIAOSHU,TEMPL;保存TEMPL值,后面用于取低4位转换小数部分
MOVA,TEMPL
MOVC,16;22H的位寻址
RRCA
MOVC,17
RRCA
MOVC,18
RRCA
MOVC,19
RRCA
MOVTEMP,A
MOVA,XIAOSHU
ANLA,#00001111B
MOVXIAOSHU,A
RET
;========键盘扫描=============================
KEYSCAN:
JBK1,RETUN;按下K1,进入键盘扫描
ACALLDELAY20
JNBK1,$
ACALLCLR_LCD;清屏
ACALLDISP_THL;显示高温限值和低温限值
ACALLSET_HL;设定限值
ACALLWR_THL;把高温限值和低温限值写入RAM
//.../ACALLLED
ACALLWR_PROM;限值复制到EEPROM中
RETUN:
RET
;------------设定高低限值----------------------
SET_HL:
//JNBK4,EXIT
JBK1,KEY4
ACALLDELAY20
JNBK1,$
CPL20H.1;标志位,标志设定高温限值或低温限值
JB20H.1,SET_H
JMPSET_L
;-------------调高温限值-------------------------
SET_H:
ACALLTH_SHAN;光标闪,进入设定
KEY2H:
JNBK1,SET_L;高温限值与低温限值间设定转换
JNBK4,EXIT
JBK2,KEY3H;按下K2,值加1
ACALLDELAY20
JNBK2,$
INCTEMP_TH
MOVA,TEMP_TH
CJNEA,#99,A0
MOVTEMP_TH,#00
A0:
ACALLDISP_THL
KEY3H:
JBK3,KEY2H;按下K3,值减1
ACALLDELAY20
JNBK3,$
DECTEMP_TH
MOVA,TEMP_TH
CJNEA,#0,A1
MOVTEMP_TH,#99
A1:
ACALLDISP_THL
JMPSET_H
;-------------调低温限值------------------------------
SET_L:
ACALLTL_SHAN
KEY2L:
JNBK1,SET_H;高温限值与低温限值间设定转换
JNBK4,EXIT
JBK2,KEY3L;按下K2,值加1
ACALLDELAY20
JNBK2,$
INCTEMP_TL
MOVA,TEMP_TL
CJNEA,#99,A2
MOVTEMP_TL,#00
A2:
ACALLDISP_THL
KEY3L:
JBK3,KEY2L;按下K3,值减1
ACALLDELAY20
JNBK3,$
DECTEMP_TL
MOVA,TEMP_TL
CJNEA,#0,A3
MOVTEMP_TL,#99
A3:
ACALLDISP_THL
JMPSET_L
;----------------------
KEY4:
JNBK4,EXIT;K4用于退出设定
JMPSET_HL
//JMPSET_HL
EXIT:
ACALLDELAY20
JNBK4,$
MOVLCD,#00001100B;设置液晶光标不显示、不闪烁
ACALLWR_COMM
ACALLCLR_LCD
ACALLDISP_TEMP
RET
;==============温度比较======================================
TEMP_COMP:
MOVA,TEMP_TH
SUBBA,TEMP
ACALLDIANJI
MOVA,TEMP
SUBBA,TEMP_TL
ACALLDIANJI
RET
;============================================
/*MORE:
MOVDPTR,#MORE0
MOVLCD,#0CEH
ACALLWR_COMM
ACALLDISP0
RET
MORE0:
DB'>H',0H
*/
;=============启动电机========================
;电机接口是P1低4位,因为P1.7是温度传感器的控制口
;避免冲突,电机接口按位控制
DIANJI:
JCDIAN0
RET
DIAN0:
MOVR0,#4
//ACALLMORE
DIAN1:
SETBP1.0
CLRP1.1
CLRP1.2
CLRP1.3
ACALLDELAY
CLRP1.0
SETBP1.1
ACALLDELAY
CLRP1.1
SETBP1.2
ACALLDELAY
CLRP1.2
SETBP1.3
ACALLDELAY
//RLA
DJNZR0,DIAN1
CLRP1.0
CLRP1.1
CLRP1.2
CLRP1.3
RET
DELAY:
MOVR5,#5
DLY1:
MOVR6,#10
DLY2:
MOVR7,#50
DJNZR7,$
DJNZR6,DLY2
DJNZR5,DLY1
RET
;============清屏=============================
CLR_LCD:
MOVLCD,#80H
ACALLWR_COMM
MOVR0,#16
CLR1:
MOVLCD,#''
ACALLWR_DATA
DJNZR0,CLR1
MOVLCD,#0C0H
ACALLWR_COMM
MOVR0,#16
CLR2:
MOVLCD,#''
ACALLWR_DATA
DJNZR0,CLR2
RET
;===============报错============================
ERROR:
MOVLCD,#80H
ACALLWR_COMM
MOVDPTR,#ERORTAB
ACALLDISP0
RET
ERORTAB:
DB'INITERROR!
',0H
;================温度标志===================
DISP_C:
MOVLCD,A
ACALLWR_COMM
MOVLCD,#0DFH
ACALLWR_DATA
MOVLCD,#'C'
ACALLWR_DATA
RET
;=================数码显示======================
SHUMA:
MOVDPTR,#SHUTAB
MOVCA,@A+DPTR
MOVLCD,A
ACALLWR_DATA
RET
SHUTAB:
DB30H,31H,32H,33H,34H
DB35H,36H,37H,38H,39H
;===============显示实时温度======================
DISP_TEMP:
ACALLTURN
MOVLCD,#80H
ACALLWR_COMM
MOVDPTR,#CURRENT
ACALLDISP0
MOVLCD,#0CAH
ACALLWR_COMM
MOVLCD,#2EH;小数点
ACALLWR_DATA
MOVA,#0CCH
ACALLDISP_C;温度标志
;------------------------------
MOVA,XIAOSHU
MOVDPTR,#XIAO
MOVCA,@A+DPTR
MOVXIAOSHU,A
MOVA,TEMP
MOVB,#10
DIVAB
MOVSHI,A
MOVGEWEI,B
MOVA,XIAOSHU
MOVLCD,#0CBH
ACALLWR_COMM
ACALLSHUMA
MOVA,SHI
MOVLCD,#0C8H
ACALLWR_COMM
ACALLSHUMA
MOVA,GEWEI
ACALLSHUMA
//MOVLCD,#0D0H;把光标移到别处
//ACALLWR_COMM
RET
CURRENT:
DB'TempretureNow:
',0H
XIAO:
DB00H,00H,01H,01H,02H,03H,03H,04H
DB05H,05H,06H,06H,07H,08H,08H,09H
;================字符显示=============================
DISP0:
MOVR1,#0
NEXT:
MOVA,R1
MOVCA,@A+DPTR
JZRETT
MOVLCD,A
INCR1
ACALLWR_DATA
JMPNEXT
RETT:
RET
;==========显示高温限值和低温限值======================
DISP_THL:
MOVDPTR,#SETTHL
MOVLCD,#80H
ACALLWR_COMM
ACALLDISP0
MOVDPTR,#THL
MOVLCD,#0C1H
ACALLWR_COMM
ACALLDISP0
;---------------------------
F5_THL:
//ACALLRE_PROM
MOVA,TEMP_TH
MOVB,#10
DIVAB
MOVSHI,A//SHI
MOVGEWEI,B//GE
MOVA,SHI
MOVLCD,#0C4H
ACALLWR_COMM
ACALLSHUMA
MOVA,GEWEI
ACALLSHUMA
MOVA,#0C6H
ACALLDISP_C
;----------------
MOVA,TEMP_TL
MOVB,#10
DIVAB
MOVSHI,A//SHI
MOVGEWEI,B//GE
MOVA,SHI
MOVLCD,#0CCH
ACALLWR_COMM
ACALLSHUMA
MOVA,GEWEI
ACALLSHUMA
MOVA,#0CEH
ACALLDISP_C
RET
SETTHL:
DB'SetTH/TL:
',0H
THL:
DB'TH:
TL:
',0H
;==========液晶初始化================================
INIT_LCD:
MOVLCD,#00000001B
ACALLWR_COMM
MOVLCD,#00111000B
ACALLWR_COMM
MOVLCD,#00001100B
ACALLWR_COMM
MOVLCD,#00000110B
ACALLWR_COMM
RET
;============TH光标闪==============================
TH_SHAN:
MOVLCD,#00001111B
ACALLWR_COMM
MOVLCD,#0C5H
ACALLWR_COMM
RET
;=============TL光标闪=============================
TL_SHAN:
MOVLCD,#00001111B
ACALLWR_COMM
MOVLCD,#0CDH
ACALLWR_COMM
RET
;============液晶写命令============================
WR_COMM:
CLRRS
CLRRW
CLRE
ACALLCHECK_BF
S