这是一个51单片机的温度控制系统,包括proteu仿真程序、代码和文档。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
目录
一、系统设计第 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软件的基本应用。同时,在设计过程中,将理论知识应用于实际应用,增强了理论联系实际的能力。虽然设计时有时一个问题需要我们花费很长的时间,很烦很累但当我们通过查找资料解决了之后心里很开心很有成就感。同时也使我明白了要将理论运用于实践还是一种非常重要的能力,要想牢固的掌握所学的知识我们必须将理论与实践结合起来,用理论来指导实践,用实践来验证理论,增强对理论的理解。不断地充实自己的理论,提高自己的动手能力。最终完成了整个设计之后,使我更加坚信只要我们努力和采用正确的方法,没有什么事是我们解决不了的。 最后,我在这里衷心地感谢所有教给我知识和在设计中给予我帮助的老师们和同学们,是他们给我们的知识才使我们得以顺利完成此次设计。
单片机汇编语言源程序如下:
- ;-------------------------------------------------
- ; 简单功能说明:一个显示实时温度的小系统,可以自行设
- ; 定高温报警和低温报警值,实现温度控制电机带动外围器
- ; 件功能。
- ;
- ;-------------------------------------------------
- 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
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
仿真程序和文档下载:
基于51单片机的温度控制系统.7z
(252.45 KB, 下载次数: 144)
|