1、 智能仪器仪表综合实训题 目 基于单片机温度控制系统设计 学 院 专 业 电子信息工程 班 级 (仪器仪表) 学生姓名 学 号 指引教师 完毕时间:目录一、系统设计-第 1 页(一) 系统总体设计方案-第 1 页 (二) 温度信号采集电路选取和数据解决-第 3 页(三) 软件设计-第 3 页 二、单元电路设计-第 5 页(一) 温度信号采集电路-第 5 页 (二) 步进电机电路- 第 5 页(三) 液晶显示模块- 第 6 页(四) 晶振复位电路-第 7 页 三、总结体会-第 7 页 四、参照文献-第 8 页附录:程序清单-第 8 页 一、系统设计 (一) 系统总体设计方案设计框图如下所示:液晶
2、显示及按键设立温度信号采集温度控制接口步进电机控制图1 系统总体设计框图总电路图如下:图2 系统总电路图简朴功能阐明:一种显示实时温度小系统,可以自行设定高温报警和低温报警值,实现温度控制电机带动外围器件功能。本系统通过温度传感器DS18B20实现对温度数据采集,数据解决后显示到液晶屏上,通过数据解决,温度值精准度为0.1。简朴操作办法:系统上电后液晶显示实时温度,通过按键可以设定高低温限定值:A.按下K1,显示系统高低温限定值;B.再按K1,进入设定状态,液晶屏光标闪动提示设定,此时设定高温限值还是低温限值可以在 K1键转换;C.进入设定状态后,K2键用于值加1,K3键用于值减1;D设定完后
3、,按键K4确认后退出,返回显示实时温度! (二) 温度信号采集电路选取和数据解决方案:采用温度传感器DS18B20美国DALLAS公司产品可编程单总线数字式温度传感器DS18B20可实现室内温度信号采集,有诸多长处:如直接输出数字信号,故省去了后继信号放大及模数转换某些,外围电路简朴,成本低;单总线接口,只有一根信号线作为单总线与MCU连接,且每一只均有自己唯一64位系列号存储在其内部ROM存储器中,故在一根信号线上可以挂接各种DS18820,便于多点测量且易于扩展.DS18B20测温范畴较大,集成度较高,故选用此方案。DS18B20内部1,2位寄存器存储实时温度值,本系统对以上两寄存器数据解
4、决后精度为0.1;DS18B20第3,4位寄存器分别存储高温限值和低温限值,并且DS18B20内部尚有EEPROM,因而通过第3,4寄存器与EEPROM数据互换就能实现对设定后值进行贮存。 (三) 软件设计本实验中我选用Keil编程平台.主程序流程图:初始化液晶显示启动DS18B20并初始化读取温度数据数据转换显示温度显示温度上下限值KeyScan?kkk1k设立温度上下限值温度上下限值存入寄存器温度比较启动电机温度与否不不大于高温限值或不大于低温限值YESNOYESkNO图3 主程序流程图二、单元电路设计 (一) 温度信号采集电路图4 温度信号采集电路(二) 步进电机电路图5 步进电机电路
5、(三) 液晶显示模块图6液晶显示模块(四) 晶振复位电路图7 晶振复位电路三、总结体会本次课程设计给咱们提供了一种将自己所学知识应用于实践良机,通过了两个周设计我学到了诸多非常有价值东西,懂得了如何将理论知识转化成实际程序设计;掌握单片机开发与设计思路与方案拟定;学会了更有效查找自己所需资料;同步也意识到了团队协作重要性;掌握了硬件与程序设计普通环节和办法。这对咱们后来学习和工作是非常有协助。设计是咱们将来必须技能,这次课程设计刚好给咱们提供了一种应用自己所学知识机会,从到图书馆和网上查找资料到对硬件与程序模块设计对各模块调试再到最后整体设计调试,都对我所学知识进行了检查,增强了自信心。 通过
6、本次课程设计,我进一步温习和巩固了课本理论知识,对单片机各接口与外部电路之间连接关系有了更加深刻理解。同步掌握了Proteus和keil软件基本应用。同步,在课程设计过程中,将理论知识应用于实际应用,增强了理论联系实际能力。虽然设计时有时一种问题需要咱们耗费很长时间,很烦很累但当咱们通过查找资料解决了之后心里很开心很有成就感。同步也使我明白了要将理论运用于实践还是一种非常重要能力,要想牢固掌握所学知识咱们必要将理论与实践结合起来,用理论来指引实践,用实践来验证理论,增强对理论理解。不断地充实自己理论,提高自己动手能力。最后完毕了整个设计之后,使我更加坚信只要咱们努力和采用对的办法,没有什么事是
7、咱们解决不了。 最后,我在这里衷心地感谢所有教给我知识和在课程设计中予以我协助教师们和同窗们,是她们给咱们知识才使咱们得以顺利完毕本次课程设计。四、参照文献 单片微型计算机原理与应用 , 张毅坤、陈善久、裘雪红 西安电子科技大学出版社 51单片机应用从零开始 杨欣、王玉凤、李湘黔 清华大学出版社 51单片机应用开发范例大全 宋戈、黄鹤松、员玉良 人民邮电出版社 郭天祥 电子工业出版社附录:程序清单;-;简朴功能阐明:一种显示实时温度小系统,可以自行设;定高温报警和低温报警值,实现温度控制电机带动外围器;件功能。;;-DQEQUP1.7;DS18B20控制口RS EQU P2.4 RW EQU
8、P2.5 E EQU P2.6 LCD EQU P0 FLAGEQU30H GEWEIEQU29HSHIEQU28HXIAOSHUEQU27HTEMP_TLEQU20H ;低温限值TEMP_THEQU21H ;高温限值TEMPHEQU22H ;温度高字节TEMPLEQU23H ;温度低字节TEMPEQU24HK1EQUP3.0 K2EQUP3.1K3EQUP3.2K4EQUP3.3;=MAIN:MOVTEMP_TH,#25MOVTEMP_TL,#01ACALL INIT_LCD;初始化液晶ACALLWR_THL;写入高温限值和低温限值寄存器ACALLWR_PROMACALLRE_PROM ;从
9、EEPROM中返回高温限值和低温限值ACALLRESET ;初始化1820JBFLAG,LOOPACALLERROR;报错LOOP:ACALLREAD_T;1820读取温度ACALLDISP_TEMP;液晶显示实时温度ACALLKEYSCAN;键盘设定高温限值和低温限值ACALLTEMP_COMPJMPLOOP;=启动1820读取温度=READ_T:SETBDQACALLRESETJBFLAG,READ_T1RETREAD_T1:MOVA,#0CCHACALLWR_1820MOVA,#44HACALLWR_1820ACALLRESETMOVA,#0CCHACALLWR_1820MOVA,#0B
10、EHACALLWR_1820ACALLREAD_1820RET;=把高温和低温限值写入寄存器=WR_THL:JBFLAG,WR_HLRETWR_HL:ACALLRESETMOVA,#0CCHACALLWR_1820MOVA,#4EHACALLWR_1820MOVA,TEMP_THACALLWR_1820MOVA,TEMP_TLACALLWR_1820RET;=把高温和低温限值写入EEPROM=WR_PROM:ACALLRESETMOVA,#0CCHACALLWR_1820MOVA,#48HACALLWR_1820RET;=把EEPROM值返回到高温和低温限值寄存器=RE_PROM:ACALLR
11、ESETMOVA,#0CCHACALLWR_1820MOVA,#0B8HACALLWR_1820RET;=初始化1820=RESET:SETB DQNOPCLRDQMOVR5,#250 DJNZR5,$SETBDQ NOPMOVR5,#25HRESET1:JNBDQ,FLAG1DJNZR5,RESET1JMPNDQFLAG1:SETBFLAGMOVR5,#100DJNZR5,$SETBDQMOVR5,#100DJNZR5,$JMPRETUNDQ:CLRFLAGACALLERRORRETU:SETBDQRET;=1820写字节=WR_1820:MOVR6,#8CLRCWR1:CLRDQMOVR5
12、,#7DJNZR5,$RRCAMOVDQ,CMOVR5,#25DJNZR5,$SETBDQNOPNOPDJNZR6,WR1SETBDQRET;=读取1820数据=READ_1820:MOVR2,#4MOVR1,#TEMPLRE1:MOVR6,#8RE2:SETBDQNOPCLRDQCLRCNOPNOPSETBDQMOVR5,#9DJNZR5,$MOVC,DQMOVR5,#24DJNZR5,$RRCADJNZR6,RE2MOVR1,ADECR1DJNZR2,RE1RET;=转换数据=TURN:MOVXIAOSHU,TEMPL ;保存TEMPL值,背面用于取低4位转换小数某些MOVA,TEMPLM
13、OVC,16 ;22H位寻址RRCAMOVC,17RRCAMOVC,18RRCAMOVC,19RRCAMOVTEMP,A MOVA,XIAOSHUANLA,#00001111BMOVXIAOSHU,A RET;=键盘扫描=KEYSCAN:JBK1,RETUN;按下K1,进入键盘扫描ACALLDELAY20JNBK1,$ACALLCLR_LCD;清屏ACALLDISP_THL;显示高温限值和低温限值ACALLSET_HL;设定限值ACALLWR_THL;把高温限值和低温限值写入RAM/./ACALLLEDACALL WR_PROM;限值复制到EEPROM中RETUN:RET;-设定高低限值-SE
14、T_HL:/JNBK4,EXITJBK1,KEY4 ACALLDELAY20JNBK1,$CPL20H.1;标志位,标志设定高温限值或低温限值JB20H.1,SET_HJMPSET_L;-调高温限值-SET_H:ACALLTH_SHAN;光标闪,进入设定KEY2H:JNBK1,SET_L ;高温限值与低温限值间设定转换JNBK4,EXITJBK2,KEY3H;按下K2,值加1ACALLDELAY20JNBK2,$ INCTEMP_THMOVA,TEMP_THCJNEA,#99,A0MOVTEMP_TH,#00A0:ACALLDISP_THL KEY3H: JBK3,KEY2H ;按下K3,值减
15、1ACALLDELAY20JNBK3,$DEC TEMP_THMOV A,TEMP_THCJNEA,#0,A1MOVTEMP_TH,#99A1:ACALLDISP_THLJMPSET_H ;-调低温限值-SET_L:ACALLTL_SHANKEY2L:JNBK1,SET_H;高温限值与低温限值间设定转换JNBK4,EXITJBK2,KEY3L;按下K2,值加1ACALLDELAY20JNBK2,$INCTEMP_TLMOVA,TEMP_TLCJNEA,#99,A2MOVTEMP_TL,#00A2:ACALLDISP_THL KEY3L:JBK3,KEY2L ;按下K3,值减1ACALLDELA
16、Y20JNBK3,$DECTEMP_TLMOVA,TEMP_TLCJNEA,#0,A3MOVTEMP_TL,#99A3:ACALLDISP_THLJMPSET_L ;-KEY4:JNBK4,EXIT ;K4用于退出设定JMPSET_HL/JMPSET_HLEXIT:ACALLDELAY20JNBK4,$ MOV LCD,#00001100B ;设立液晶光标不显示、不闪烁 ACALL WR_COMM ACALLCLR_LCDACALLDISP_TEMPRET;=温度比较=TEMP_COMP:MOVA,TEMP_THSUBBA,TEMPACALLDIANJIMOVA,TEMPSUBBA,TEMP_
17、TLACALLDIANJIRET;=/*MORE:MOVDPTR,#MORE0MOVLCD,#0CEHACALLWR_COMMACALLDISP0RETMORE0:DBH,0H*/;=启动电机=;电机接口是P1低4位,由于P1.7是温度传感器控制口;避免冲突,电机接口按位控制DIANJI:JCDIAN0RETDIAN0:MOVR0,#4/ACALLMOREDIAN1:SETBP1.0CLRP1.1CLRP1.2CLRP1.3 ACALLDELAYCLRP1.0SETBP1.1ACALLDELAYCLRP1.1SETBP1.2ACALLDELAYCLRP1.2SETBP1.3ACALLDELAY
18、/RLADJNZR0,DIAN1CLRP1.0CLRP1.1CLRP1.2CLRP1.3RETDELAY:MOVR5,#5DLY1:MOVR6,#10DLY2:MOVR7,#50DJNZR7,$DJNZR6,DLY2DJNZR5,DLY1RET;=清屏=CLR_LCD:MOVLCD,#80HACALLWR_COMMMOVR0,#16CLR1:MOVLCD,# ACALLWR_DATADJNZR0,CLR1MOVLCD,#0C0HACALLWR_COMMMOVR0,#16CLR2:MOVLCD,# ACALLWR_DATADJNZR0,CLR2RET;=报错=ERROR:MOVLCD,#80HA
19、CALLWR_COMMMOVDPTR,#ERORTABACALLDISP0RETERORTAB:DBINIT ERROR!,0H;=温度标志=DISP_C:MOVLCD,A ACALL WR_COMM MOVLCD,#0DFH ACALLWR_DATA MOVLCD,#C ACALLWR_DATA RET;=数码显示=SHUMA:MOVDPTR,#SHUTABMOVCA,A+DPTRMOVLCD,AACALLWR_DATARETSHUTAB:DB30H,31H,32H,33H,34HDB35H,36H,37H,38H,39H ;=显示实时温度= DISP_TEMP:ACALLTURNMOV L
20、CD,#80H ACALL WR_COMM MOV DPTR,#CURRENT ACALL DISP0 MOVLCD,#0CAH ACALL WR_COMM MOVLCD,#2EH;小数点 ACALL WR_DATA MOVA,#0CCHACALLDISP_C;温度标志 ;- MOVA,XIAOSHU MOVDPTR,#XIAOMOVC A,A+DPTRMOVXIAOSHU,AMOVA,TEMPMOVB,#10DIVABMOVSHI,AMOVGEWEI,BMOVA,XIAOSHUMOVLCD,#0CBHACALLWR_COMMACALLSHUMAMOVA,SHIMOVLCD,#0C8HACAL
21、LWR_COMMACALLSHUMAMOVA,GEWEIACALLSHUMA/MOVLCD,#0D0H ;把光标移到别处 /ACALLWR_COMM RETCURRENT:DBTempreture Now:,0HXIAO:DB00H,00H,01H,01H,02H,03H,03H,04HDB05H,05H,06H,06H,07H,08H,08H,09H ;=字符显示=DISP0: MOV R1,#0 NEXT:MOV A,R1 MOVC A,A+DPTR JZRETTMOV LCD,A INC R1 ACALL WR_DATA JMPNEXT RETT: RET ;=显示高温限值和低温限值=D
22、ISP_THL:MOVDPTR,#SETTHLMOVLCD,#80HACALLWR_COMMACALLDISP0MOVDPTR,#THLMOVLCD,#0C1HACALLWR_COMMACALLDISP0 ;-F5_THL:/ACALLRE_PROMMOVA,TEMP_THMOVB,#10DIVABMOVSHI,A /SHIMOVGEWEI,B/GEMOVA,SHIMOVLCD,#0C4HACALLWR_COMMACALLSHUMAMOVA,GEWEIACALLSHUMAMOVA,#0C6HACALLDISP_C;-MOVA,TEMP_TLMOVB,#10DIVABMOVSHI,A /SHIM
23、OVGEWEI,B/GEMOVA,SHIMOVLCD,#0CCHACALLWR_COMMACALLSHUMAMOVA,GEWEIACALLSHUMAMOVA,#0CEHACALLDISP_CRETSETTHL:DBSet TH/TL:,0HTHL:DBTH: 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_
24、SHAN:MOV LCD,#00001111B ACALL WR_COMM MOVLCD,#0C5HACALLWR_COMMRET;=TL光标闪=TL_SHAN:MOV LCD,#00001111B ACALL WR_COMM MOVLCD,#0CDHACALLWR_COMMRET ;=液晶写命令=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: MOVR5,#50 DLY:MOVR6,#100 DJNZR6,$DJNZR5,DLYRET END ;=