基于.-单片机的温度控制系统设计报告.doc
.wd目录一、系统设计-第 1 页(1) 系统总体设计方案-第 1 页(2) 温度信号采集电路选择和数据处理-第 3 页(3) 软件设计-第 3 页二、单元电路设计-第 5 页(1) 温度信号采集电路-第 5 页(2) 步进电机电路- 第 5 页(3) 液晶显示模块- 第 6 页(4) 晶振复位电路-第 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编程平台.主程序流程图:初始化液晶显示启动DS18B20并初始化读取温度数据数据转换显示温度显示温度上下限值KeyScan?kkk1k设置温度上下限值温度上下限值存入存放器温度比拟启动电机温度是否大于高温限值或小于低温限值YESNOYESkNO图3 主程序流程图二、单元电路设计(一) 温度信号采集电路图4 温度信号采集电路(二) 步进电机电路图5 步进电机电路(三) 液晶显示模块图6液晶显示模块(四) 晶振复位电路图7 晶振复位电路三、总结体会本次课程设计给我们提供了一个将自己所学的知识应用于实践的良机,通过了两个周的设计我学到了很多非常有价值的东西,懂得了如何将理论知识转化成实际程序的设计;掌握的单片机开发与设计的思路与方案确定;学会了更有效的查找自己所需的资料;同时也意识到了团队协作的重要性;掌握了硬件与程序设计的一般步骤和方法。这对我们以后的学习和工作的是非常有帮助的。设计是我们将来必需的技能,这次课程设计刚好给我们提供了一个应用自己所学知识的时机,从到图书馆和网上查找资料到对硬件与程序模块的设计对各模块的调试再到最后整体设计调试,都对我所学的知识进展了检验,增强了自信心。通过本次课程设计,我进一步温习和稳固了课本的理论知识,对单片机各接口与外部电路之间的连接关系有了更加深刻的理解。同时掌握了Proteus和keil软件的 根本应用。同时,在课程设计过程中,将理论知识应用于实际应用,增强了理论联系实际的能力。虽然设计时有时一个问题需要我们花费很长的时间,很烦很累但当我们通过查找资料解决了之后心里很开心很有成就感。同时也使我明白了要将理论运用于实践还是一种非常重要的能力,要想结实的掌握所学的知识我们必须将理论与实践结合起来,用理论来指导实践,用实践来验证理论,增强对理论的理解。不断地充实自己的理论,提高自己的动手能力。最终完成了整个设计之后,使我更加坚信只要我们努力和采用正确的方法,没有什么事是我们解决不了的。 最后,我在这里衷心地感谢所有教给我知识和在课程设计中给予我帮助的教师们和同学们,是他们给我们的知识才使我们得以顺利完成此次课程设计。四、参考文献 ?单片微型计算机原理与应用? , 张毅坤、陈善久、裘雪红 西安电子科技大学出版社 ?51单片机应用从零开场? 杨欣、王玉凤、李湘黔 清华大学出版社 ?51单片机应用开发范例大全? 宋戈、黄鹤松、员玉良 人民邮电出版社 郭天祥 电子工业出版社附录:程序清单;-; 简单功能说明:一个显示实时温度的小系统,可以自行设; 定高温报警和低温报警值,实现温度控制电机带动外围器; 件功能。; ;-DQEQUP1.7;DS18B20控制口RS EQU P2.4 RW EQU 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 ;从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,#0BEHACALLWR_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:ACALLRESETMOVA,#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,#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,TEMPLMOVC,16 ;22H的位寻址RRCAMOVC,17RRCAMOVC,18RRCAMOVC,19RRCAMOVTEMP,A MOVA,XIAOSHUANLA,#00001111BMOVXIAOSHU,ARET;=键盘扫描=KEYSCAN:JBK1,RETUN;按下K1,进入键盘扫描ACALLDELAY20JNBK1,$ACALLCLR_LCD;清屏ACALLDISP_THL;显示高温限值和低温限值ACALLSET_HL;设定限值ACALLWR_THL;把高温限值和低温限值写入RAM/./ACALLLEDACALL WR_PROM;限值复制到EEPROM中RETUN:RET;-设定上下限值-SET_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,值减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,值减1ACALLDELAY20JNBK3,$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_TLACALLDIANJIRET;=/*MORE:MOVDPTR,#MORE0MOVLCD,#0CEHACALLWR_COMMACALLDISP0RETMORE0:DB'>H',0H*/;=启动电机=;电机接口是P1低4位,因为P1.7是温度传感器的控制口;防止冲突,电机接口按位控制DIANJI:JCDIAN0RETDIAN0:MOVR0,#4/ACALLMOREDIAN1:SETBP1.0CLRP1.1CLRP1.2CLRP1.3 ACALLDELAYCLRP1.0SETBP1.1ACALLDELAYCLRP1.1SETBP1.2ACALLDELAYCLRP1.2SETBP1.3ACALLDELAY/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,#80HACALLWR_COMMMOVDPTR,#ERORTABACALLDISP0RETERORTAB:DB'INIT 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 LCD,#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,#0C8HACALLWR_COMMACALLSHUMAMOVA,GEWEIACALLSHUMA/MOVLCD,#0D0H ;把光标移到别处 /ACALLWR_COMM RETCURRENT:DB'Tempreture 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 ;=显示高温限值和低温限值=DISP_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 /SHIMOVGEWEI,B/GEMOVA,SHIMOVLCD,#0CCHACALLWR_COMMACALLSHUMAMOVA,GEWEIACALLSHUMAMOVA,#0CEHACALLDISP_CRETSETTHL:DB'Set TH/TL:',0HTHL:DB'TH: 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_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 ;=