当前位置:文档之家› 基于单片机的温度控制系统设计报告

基于单片机的温度控制系统设计报告

智能仪器仪表综合实训题目基于单片机的温度控制系统设计学院专业电子信息工程班级 (仪器仪表) 学生姓名学号指导教师完成时间:目录一、系统设计---------------------------------------------------------第 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编程平台.主程序流程图:图3 主程序流程图二、单元电路设计(一) 温度信号采集电路图4 温度信号采集电路(二) 步进电机电路图5 步进电机电路(三) 液晶显示模块图6液晶显示模块(四) 晶振复位电路图7 晶振复位电路三、总结体会本次课程设计给我们提供了一个将自己所学的知识应用于实践的良机,通过了两个周的设计我学到了很多非常有价值的东西,懂得了如何将理论知识转化成实际程序的设计;掌握的单片机开发与设计的思路与方案确定;学会了更有效的查找自己所需的资料;同时也意识到了团队协作的重要性;掌握了硬件与程序设计的一般步骤和方法。

这对我们以后的学习和工作的是非常有帮助的。

设计是我们将来必需的技能,这次课程设计刚好给我们提供了一个应用自己所学知识的机会,从到图书馆和网上查找资料到对硬件与程序模块的设计对各模块的调试再到最后整体设计调试,都对我所学的知识进行了检验,增强了自信心。

通过本次课程设计,我进一步温习和巩固了课本的理论知识,对单片机各接口与外部电路之间的连接关系有了更加深刻的理解。

同时掌握了Proteus和keil软件的基本应用。

同时,在课程设计过程中,将理论知识应用于实际应用,增强了理论联系实际的能力。

虽然设计时有时一个问题需要我们花费很长的时间,很烦很累但当我们通过查找资料解决了之后心里很开心很有成就感。

同时也使我明白了要将理论运用于实践还是一种非常重要的能力,要想牢固的掌握所学的知识我们必须将理论与实践结合起来,用理论来指导实践,用实践来验证理论,增强对理论的理解。

不断地充实自己的理论,提高自己的动手能力。

最终完成了整个设计之后,使我更加坚信只要我们努力和采用正确的方法,没有什么事是我们解决不了的。

最后,我在这里衷心地感谢所有教给我知识和在课程设计中给予我帮助的老师们和同学们,是他们给我们的知识才使我们得以顺利完成此次课程设计。

四、参考文献《单片微型计算机原理与应用》,张毅坤、陈善久、裘雪红西安电子科技大学出版社《51单片机应用从零开始》杨欣、王玉凤、李湘黔清华大学出版社《51单片机应用开发范例大全》宋戈、黄鹤松、员玉良人民邮电出版社郭天祥电子工业出版社附录:程序清单;-------------------------------------------------; 简单功能说明:一个显示实时温度的小系统,可以自行设; 定高温报警和低温报警值,实现温度控制电机带动外围器; 件功能。

;;-------------------------------------------------DQ EQU P1.7 ;DS18B20控制口RS EQU P2.4RW EQU P2.5E EQU P2.6LCD EQU P0FLAG EQU 30HGEWEI EQU 29HSHI EQU 28HXIAOSHU EQU 27HTEMP_TL EQU 20H ;低温限值TEMP_TH EQU 21H ;高温限值TEMPH EQU 22H ;温度高字节TEMPL EQU 23H ;温度低字节TEMP EQU 24HK1 EQU P3.0K2 EQU P3.1K3 EQU P3.2K4 EQU P3.3;===============================================MAIN: MOV TEMP_TH,#25MOV TEMP_TL,#01ACALL INIT_LCD ;初始化液晶ACALL WR_THL ;写入高温限值和低温限值寄存器ACALL WR_PROMACALL RE_PROM ;从EEPROM中返回高温限值和低温限值ACALL RESET ;初始化1820JB FLAG,LOOPACALL ERROR ;报错LOOP: ACALL READ_T ;1820读取温度ACALL DISP_TEMP ;液晶显示实时温度ACALL KEYSCAN ;键盘设定高温限值和低温限值ACALL TEMP_COMPJMP LOOP;=============启动1820读取温度====================READ_T: SETB DQACALL RESETJB FLAG,READ_T1RETREAD_T1:MOV A,#0CCHACALL WR_1820MOV A,#44HACALL WR_1820ACALL RESETMOV A,#0CCHACALL WR_1820MOV A,#0BEHACALL WR_1820ACALL READ_1820RET;=========把高温和低温限值写入寄存器=================WR_THL: JB FLAG,WR_HLRETWR_HL: ACALL RESETMOV A,#0CCHACALL WR_1820MOV A,#4EHACALL WR_1820MOV A,TEMP_THACALL WR_1820MOV A,TEMP_TLACALL WR_1820RET;==========把高温和低温限值写入EEPROM=================WR_PROM:ACALL RESETMOV A,#0CCHACALL WR_1820MOV A,#48HACALL WR_1820RET;========把EEPROM的值返回到高温和低温限值寄存器======== RE_PROM:ACALL RESETMOV A,#0CCHACALL WR_1820MOV A,#0B8HACALL WR_1820RET;===========初始化1820==================================RESET: SETB DQNOPCLR DQMOV R5,#250DJNZ R5,$SETB DQNOPMOV R5,#25HRESET1: JNB DQ,FLAG1DJNZ R5,RESET1JMP NDQFLAG1: SETB FLAGMOV R5,#100DJNZ R5,$SETB DQMOV R5,#100DJNZ R5,$JMP RETUNDQ: CLR FLAGACALL ERRORRETU: SETB DQRET;=============1820写字节========================WR_1820:MOV R6,#8CLR CWR1: CLR DQMOV R5,#7DJNZ R5,$RRC AMOV DQ,CMOV R5,#25DJNZ R5,$SETB DQNOPNOPDJNZ R6,WR1SETB DQRET;==============读取1820数据======================READ_1820:MOV R2,#4MOV R1,#TEMPLRE1: MOV R6,#8RE2: SETB DQNOPCLR DQCLR CNOPNOPSETB DQMOV R5,#9DJNZ R5,$MOV C,DQMOV R5,#24DJNZ R5,$RRC ADJNZ R6,RE2MOV @R1,ADEC R1DJNZ R2,RE1RET;===========转换数据=============================TURN: MOV XIAOSHU,TEMPL ;保存TEMPL值,后面用于取低4位转换小数部分MOV A,TEMPLMOV C,16 ;22H的位寻址RRC AMOV C,17RRC AMOV C,18RRC AMOV C,19RRC AMOV TEMP,AMOV A,XIAOSHUANL A,#00001111BMOV XIAOSHU,ARET;========键盘扫描=============================KEYSCAN:JB K1,RETUN ;按下K1,进入键盘扫描ACALL DELAY20JNB K1,$ACALL CLR_LCD ;清屏ACALL DISP_THL ;显示高温限值和低温限值ACALL SET_HL ;设定限值ACALL WR_THL ;把高温限值和低温限值写入RAM//.../ACALL LEDACALL WR_PROM ;限值复制到EEPROM中RETUN: RET;------------设定高低限值----------------------SET_HL: //JNB K4,EXITJB K1,KEY4ACALL DELAY20JNB K1,$CPL 20H.1 ;标志位,标志设定高温限值或低温限值JB 20H.1,SET_HJMP SET_L;-------------调高温限值-------------------------SET_H:ACALL TH_SHAN ;光标闪,进入设定KEY2H: JNB K1,SET_L ;高温限值与低温限值间设定转换JNB K4,EXITJB K2,KEY3H ;按下K2,值加1ACALL DELAY20JNB K2,$INC TEMP_THMOV A,TEMP_THCJNE A,#99,A0MOV TEMP_TH,#00A0: ACALL DISP_THLKEY3H:JB K3,KEY2H ;按下K3,值减1ACALL DELAY20JNB K3,$DEC TEMP_THMOV A,TEMP_THCJNE A,#0,A1MOV TEMP_TH,#99A1: ACALL DISP_THLJMP SET_H;-------------调低温限值------------------------------ SET_L:ACALL TL_SHANKEY2L: JNB K1,SET_H ;高温限值与低温限值间设定转换JNB K4,EXITJB K2,KEY3L ;按下K2,值加1ACALL DELAY20JNB K2,$INC TEMP_TLMOV A,TEMP_TLCJNE A,#99,A2MOV TEMP_TL,#00A2: ACALL DISP_THLKEY3L: JB K3,KEY2L ;按下K3,值减1ACALL DELAY20JNB K3,$DEC TEMP_TLMOV A,TEMP_TLCJNE A,#0,A3MOV TEMP_TL,#99A3: ACALL DISP_THLJMP SET_L;----------------------KEY4: JNB K4,EXIT ;K4用于退出设定JMP SET_HL//JMP SET_HLEXIT: ACALL DELAY20JNB K4,$MOV LCD,#00001100B ;设置液晶光标不显示、不闪烁ACALL WR_COMMACALL CLR_LCDACALL DISP_TEMPRET;==============温度比较======================================TEMP_COMP:MOV A,TEMP_THSUBB A,TEMPACALL DIANJIMOV A,TEMPSUBB A,TEMP_TLACALL DIANJIRET;============================================/*MORE: MOV DPTR,#MORE0MOV LCD,#0CEHACALL WR_COMMACALL DISP0RETMORE0: DB '>H',0H*/;=============启动电机========================;电机接口是P1低4位,因为P1.7是温度传感器的控制口;避免冲突,电机接口按位控制DIANJI: JC DIAN0RETDIAN0: MOV R0,#4//ACALL MOREDIAN1:SETB P1.0CLR P1.1CLR P1.2CLR P1.3ACALL DELAYCLR P1.0SETB P1.1ACALL DELAYCLR P1.1SETB P1.2ACALL DELAYCLR P1.2SETB P1.3ACALL DELAY//RL ADJNZ R0,DIAN1CLR P1.0CLR P1.1CLR P1.2CLR P1.3RETDELAY: MOV R5,#5DLY1: MOV R6,#10DLY2: MOV R7,#50DJNZ R7,$DJNZ R6,DLY2DJNZ R5,DLY1RET;============清屏=============================CLR_LCD:MOV LCD,#80HACALL WR_COMMMOV R0,#16CLR1: MOV LCD,#' 'ACALL WR_DATADJNZ R0,CLR1MOV LCD,#0C0HACALL WR_COMMMOV R0,#16CLR2: MOV LCD,#' 'ACALL WR_DATADJNZ R0,CLR2RET;===============报错============================ERROR: MOV LCD,#80HACALL WR_COMMMOV DPTR,#ERORTABACALL DISP0RETERORTAB:DB 'INIT ERROR!',0H;================温度标志===================DISP_C: MOV LCD,AACALL WR_COMMMOV LCD,#0DFHACALL WR_DATAMOV LCD,#'C'ACALL WR_DATARET;=================数码显示======================SHUMA: MOV DPTR,#SHUTABMOVC A,@A+DPTRMOV LCD,AACALL WR_DATARETSHUTAB: DB 30H,31H,32H,33H,34HDB 35H,36H,37H,38H,39H;===============显示实时温度======================DISP_TEMP:ACALL TURNMOV LCD,#80HACALL WR_COMMMOV DPTR,#CURRENTACALL DISP0MOV LCD,#0CAHACALL WR_COMMMOV LCD,#2EH ;小数点ACALL WR_DATAMOV A,#0CCHACALL DISP_C ;温度标志;------------------------------MOV A,XIAOSHUMOV DPTR,#XIAOMOVC A,@A+DPTRMOV XIAOSHU,AMOV A,TEMPMOV B,#10DIV ABMOV SHI,AMOV GEWEI,BMOV A,XIAOSHUMOV LCD,#0CBHACALL WR_COMMACALL SHUMAMOV A,SHIMOV LCD,#0C8HACALL WR_COMMACALL SHUMAMOV A,GEWEIACALL SHUMA//MOV LCD,#0D0H ;把光标移到别处//ACALL WR_COMMRETCURRENT:DB 'Tempreture Now: ',0HXIAO: DB 00H,00H,01H,01H,02H,03H,03H,04HDB 05H,05H,06H,06H,07H,08H,08H,09H;================字符显示=============================DISP0: MOV R1,#0NEXT: MOV A,R1MOVC A,@A+DPTRJZ RETTMOV LCD,AINC R1ACALL WR_DATAJMP NEXTRETT: RET;==========显示高温限值和低温限值======================DISP_THL:MOV DPTR,#SETTHLMOV LCD,#80HACALL WR_COMMACALL DISP0MOV DPTR,#THLMOV LCD,#0C1HACALL WR_COMMACALL DISP0;--------------------------- F5_THL://ACALL RE_PROMMOV A,TEMP_THMOV B,#10DIV ABMOV SHI,A //SHIMOV GEWEI,B //GEMOV A,SHIMOV LCD,#0C4HACALL WR_COMMACALL SHUMAMOV A,GEWEIACALL SHUMAMOV A,#0C6HACALL DISP_C;----------------MOV A,TEMP_TLMOV B,#10DIV ABMOV SHI,A //SHIMOV GEWEI,B //GEMOV A,SHIMOV LCD,#0CCHACALL WR_COMMACALL SHUMAMOV A,GEWEIACALL SHUMAMOV A,#0CEHACALL DISP_CRETSETTHL:DB 'Set TH/TL:',0HTHL: DB 'TH: TL:',0H;==========液晶初始化================================INIT_LCD:MOV LCD,#00000001BACALL WR_COMMMOV LCD,#00111000BACALL WR_COMMMOV LCD,#00001100BACALL WR_COMMMOV LCD,#00000110BACALL WR_COMMRET;============TH光标闪==============================TH_SHAN:MOV LCD,#00001111BACALL WR_COMMMOV LCD,#0C5HACALL WR_COMMRET;=============TL光标闪=============================TL_SHAN:MOV LCD,#00001111BACALL WR_COMMMOV LCD,#0CDHACALL WR_COMMRET;============液晶写命令============================ WR_COMM:CLR RSCLR RWCLR EACALL CHECK_BFSETB ERET;==============液晶写数据============================== WR_DATA:SETB RSCLR RWCLR EACALL CHECK_BFSETB ERET ;============液晶是否忙碌============================ CHECK_BF:MOV LCD, #0FFHCLR RSSETB RWCLR ENOPSETB EJB LCD.7,CHECK_BFRET;====================================================== DELAY20:MOV R5,#50DLY: MOV R6,#100DJNZ R6,$DJNZ R5,DLYRETEND;==========================================。

相关主题