基于单片机的温度控制系统设计报告docWord文件下载.docx
《基于单片机的温度控制系统设计报告docWord文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度控制系统设计报告docWord文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
如直接输出数字信号,故省去了后继的信号放大及模数转换部分,外围电路简单,成本低;
单总线接口,只有一根信号线作为单总线与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
MOVA,#0BEH
ACALLREAD_1820
=========把高温和低温限值写入寄存器=================
WR_THL:
JBFLAG,WR_HL
WR_HL:
MOVA,#4EH
MOVA,TEMP_TH
MOVA,TEMP_TL
==========把高温和低温限值写入EEPROM=================
WR_PROM:
ACALLRESET
MOVA,#48H
========把EEPROM的值返回到高温和低温限值寄存器========
RE_PROM:
MOVA,#0B8H
===========初始化1820==================================
RESET:
SETBDQ
NOP
CLRDQ
MOVR5,#250
DJNZR5,$
SETBDQ
MOVR5,#25H
RESET1:
JNBDQ,FLAG1
DJNZR5,RESET1
JMPNDQ
FLAG1:
SETBFLAG
MOVR5,#100
JMPRETU
NDQ:
CLRFLAG
ACALLERROR
RETU:
=============1820写字节========================
WR_1820:
MOVR6,#8
CLRC
WR1:
MOVR5,#7
RRCA
MOVDQ,C
MOVR5,#25
DJNZR6,WR1
==============读取1820数据======================
READ_1820:
MOVR2,#4
MOVR1,#TEMPL
RE1:
RE2:
MOVR5,#9
MOVC,DQ
MOVR5,#24
DJNZR6,RE2
MOV@R1,A
DECR1
DJNZR2,RE1
===========转换数据=============================
TURN:
MOVXIAOSHU,TEMPL;
保存TEMPL值,后面用于取低4位转换小数部分
MOVA,TEMPL
MOVC,16;
22H的位寻址
MOVC,17
MOVC,18
MOVC,19
MOVTEMP,A
MOVA,XIAOSHU
ANLA,#00001111B
MOVXIAOSHU,A
========键盘扫描=============================
KEYSCAN:
JBK1,RETUN;
按下K1,进入键盘扫描
ACALLDELAY20
JNBK1,$
ACALLCLR_LCD;
清屏
ACALLDISP_THL;
显示高温限值和低温限值
ACALLSET_HL;
设定限值
把高温限值和低温限值写入RAM
//.../ACALLLED
ACALLWR_PROM;
限值复制到EEPROM中
RETUN:
------------设定高低限值----------------------
SET_HL:
//JNBK4,EXIT
JBK1,KEY4
ACALLDELAY20
CPL20H.1;
标志位,标志设定高温限值或低温限值
JB20H.1,SET_H
JMPSET_L
-------------调高温限值-------------------------
SET_H:
ACALLTH_SHAN;
光标闪,进入设定
KEY2H:
JNBK1,SET_L;
高温限值与低温限值间设定转换
JNBK4,EXIT
JBK2,KEY3H;
按下K2,值加1
JNBK2,$
INCTEMP_TH
CJNEA,#99,A0
MOVTEMP_TH,#00
A0:
ACALLDISP_THL
KEY3H:
JBK3,KEY2H;
按下K3,值减1
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;
JBK2,KEY3L;
INCTEMP_TL
CJNEA,#99,A2
MOVTEMP_TL,#00
A2:
KEY3L:
JBK3,KEY2L;
DECTEMP_TL
CJNEA,#0,A3
MOVTEMP_TL,#99
A3:
----------------------
KEY4:
JNBK4,EXIT;
K4用于退出设定
JMPSET_HL
//JMPSET_HL
EXIT:
JNBK4,$
MOVLCD,#00001100B;
设置液晶光标不显示、不闪烁
ACALLWR_COMM
ACALLCLR_LCD
ACALLDISP_TEMP
RET
==============温度比较======================================
TEMP_COMP:
SUBBA,TEMP
ACALLDIANJI
MOVA,TEMP
SUBBA,TEMP_TL
============================================
/*MORE:
MOVDPTR,#MORE0
MOVLCD,#0CEH
ACALLWR_COMM
ACALLDISP0
MORE0:
DB'
>
H'
0H
*/
=============启动电机========================
电机接口是P1低4位,因为P1.7是温度传感器的控制口
避免冲突,电机接口按位控制
DIANJI:
JCDIAN0
DIAN0:
MOVR0,#4
//ACALLMORE
DIAN1:
SETBP1.0
CLRP1.1
CLRP1.2
CLRP1.3
ACALLDELAY
CLRP1.0
SETBP1.1
SETBP1.2
SETBP1.3
//RLA
DJNZR0,DIAN1
CLRP1.3
DELAY:
MOVR5,#5
DLY1:
MOVR6,#10
DLY2:
MOVR7,#50
DJNZR7,$
DJNZR6,DLY2
DJNZR5,DLY1
============清屏=============================
CLR_LCD:
MOVLCD,#80H
MOVR0,#16
CLR1:
MOVLCD,#'
'
ACALLWR_DATA
DJNZR0,CLR1
MOVLCD,#0C0H
CLR2:
DJNZR0,CLR2
===============报错============================
ERROR:
MOVDPTR,#ERORTAB
ERORTAB:
INITERROR!
'
0H
================温度标志===================
DISP_C:
MOVLCD,A
ACALLWR_COMM
MOVLCD,#0DFH
ACALLWR_DATA
MOVLCD,#'
C'
ACALLWR_DATA
=================数码显示======================
SHUMA:
MOVDPTR,#SHUTAB
MOVCA,@A+DPTR
SHUTAB:
DB30H,31H,32H,33H,34H
DB35H,36H,37H,38H,39H
===============显示实时温度======================
DISP_TEMP:
ACALLTURN
MOVLCD,#80H
ACALLWR_COMM
MOVDPTR,#CURRENT
ACALLDISP0
MOVLCD,#0CAH
MOVLCD,#2EH;
小数点
ACALLWR_DATA
ACALLDISP_C;
温度标志
------------------------------
MOVA,XIAOSHU
MOVDPTR,#XIAO
MOVCA,@A+DPTR
MOVB,#10
DIVAB
MOVSHI,A
MOVGEWEI,B
MOVLCD,#0CBH
ACALLSHUMA
MOVA,SHI
MOVLCD,#0C8H
ACALLSHUMA
MOVA,GEWEI
//MOVLCD,#0D0H;
把光标移到别处
//ACALLWR_COMM
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
JMPNEXT
RETT:
RET
==========显示高温限值和低温限值======================
DISP_THL:
MOVDPTR,#SETTHL
MOVDPTR,#THL
MOVLCD,#0C1H
---------------------------
F5_THL:
//ACALLRE_PROM
MOVSHI,A//SHI
MOVGEWEI,B//GE
MOVLCD,#0C4H
MOVA,#0C6H
ACALLDISP_C
----------------
MOV