当前位置:文档之家› 空调温度控制器设计

空调温度控制器设计

计算机控制课程设计学生姓名:学生学号:所在班级:所在专业:指导教师:课题空调温度控制器设计一.设计任务(要求)1.设计任务运用<<微型计算机原理与接口技术>>、《单片机原理及应用》等课程知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识点的理解,使学生综合应用知识能力、设计能力、调试能力及报告撰写能力等显著提高。

了解闭环控制的基本原理,熟悉A/D变换原理和编程方法,掌握键盘扫描和LED 显示原理和编程方法。

2.设计要求利用8255扩展LED显示电路,键盘电路,A/D变换电路,完成类似空调恒温控制设计。

(1)可以利用实验仪上的电位器模仿温度变化,利用ADC0809采样可变电位器的输出电压,可将初始ADC0809的输出值作为设定温度;(2)加热和致冷电机可以用发光管代替,加热时红色发光管亮,制冷时驱动绿色发光管亮;(3)当单片机采样到可变电位器的输出电压值超过设定温度+2℃时,启动致冷电机;采样到可变电位器的输出电压值低于设定温度-2℃时,启动加热电机。

二.设计方案1. 设定一恒温温度25度,通过键盘来控制它的大小,设定一键温度加一,一键温度减一,电位器所出的模拟温度来和恒温温度进行比较。

2.对各个子程序(LED显示,键盘扫描,A/D采样)在主程序实行调用,以此来达到实验的要求。

三.原理框图A/D采样子程序温度控制主程序四.系统模块详细设计与调试系统模块的设计1.A/D转换子程序BEING: MOV DPTR , #8000H ; AD转换子程序MOV DPTR , #8000H;启动A/D转换MOVX @DPTR , AMOV R6 , #14HDELAY2: NOPNOPNOPDJNZ R6,DELAY2MOVX A,@DPTRMOV 47H,A ; 温度AD转换结果暂存47H单元ACALL CHANGE ; 十六进制转十进制子程序LCALL DISPLAYLEDRETCHANGE: MOV R1 , #00HMOV R2,#00HCLR CCHAN: SUBB A,#64HJC CHAN1INC R1AJMP CHANCHAN1: ADD A,#64HCHAN2: SUBB A,#0AHJC CHAN3INC R2AJMP CHAN2CHAN3: ADD A, #0BHMOV 64H,A ;转换结果个位暂存2AH单元MOV 63H,R2 ;十位存2BH单元MOV 62H,R1 ;百位存2CH单元RET2.LED转换子程序DISPLAYLED :MOV R0,#BUF ;r0指向显示缓冲首地址MOV R1,#5 ;要循环2次,有2个LEDMOV R2,#00100000B ;从第一位开始LOOP: MOV DPTR,#OUTBITMOV A,#0MOVX @DPTR,A ;关所有的位的显示MOV A,@R0MOV DPTR,#LEDMAP ;查表MOVC A,@A+DPTRMOV DPTR,#OUTSETMOVX @DPTR,A ;输出r0指向的单元的数MOV DPTR,#OUTBITMOV A,R2MOVX @DPTR,A ;开显示,将这个数显示出来(r2决定在哪一位显示)MOV R6,#01 ;延时CALL DELAY ;延时MOV A,R2RR AMOV R2,A ;准备显示下一位数INC R0 ;r0指向下个单元DJNZ R1,LOOP ;循环六次MOV DPTR,#OUTBITMOV A,#0MOVX @DPTR,A ;关所有的位的显示RET3.按键子程序ANJIAN:CALL TESTKEY ;检测键盘是否有按键按下JZ ANJIANMOV R6,#10 ;延时去抖动CALL DELAYCALL TESTKEY ;再次检测键盘是否有按键按下JZ ANJIANMOVX @DPTR,AMOV R1,#00100000BMOV R2,#6KLOOP: MOV DPTR,#OUTBIT ;扫描,得到按键的行和列MOV A,R1CPL A ;(取反)用零去扫描各列MOVX @DPTR,ACPL ARR A ;下一列MOV R1,A ;R1暂存列值MOV DPTR,#INMOVX A,@DPTR ;读行状态CPL AANL A,#0FHJNZ GOON1DJNZ R2,KLOOP ;下一列扫描(一轮6次)MOV R2,#06HSJMP KLOOP ;下一轮扫描GOON1: ;按照行列计算键值MOV R1,A ;行号放在R1内MOV A,R2 ;R2中放的是列号DEC A ;RL A ;RL A ;MOV R2,A ;R2=(列号-1)*4MOV A,R1MOV R1,#4LOOPC: RRC AJC EXITINC R2DJNZ R1,LOOPC ;行值(0100)右移,并统计移的位数,移的位数就是行值EXIT: ;查表得到键值MOV A,R2MOV DPTR,#KEYTABLEMOVC A,@A+DPTRMOV R2,AWAITRELEASE:MOV DPTR,#OUTBIT ;等待按键释放,将键值存在A寄存器中CLR AMOVX @DPTR,AMOV R6,#10 ;CALL DELAY ;延时CALL TESTKEY ;测试按键是否放开JNZ WAITRELEASE ;是的MOV A,R2RET调试(1)调试的过程A.在实验系统中输入程序,并对其进行编译修正,直到没有错误。

B.打开试验箱,对照自己程序,对其进行接线。

C.与计算机连接并进行执行,观察试验箱上各个器件显示的结果,发现错误并对其修改直到实验结果与实验要求一致(2)调试中遇到的问题实验中遇到最大的问题还是键盘输入的问题,加一减一看似简单但在实验过程中总会出现乱码,最后我把加一减一写了2个子程序,对子程序进行调用,解决了上面出现的问题。

==============将缓冲区的数加1的子程序===================JIAYI:MOV A,#10MOV B,BUFMUL ABADD A,BUF+1MOV R7,AINC AMOV B,#10DIV ABMOV BUF,AMOV BUF+1,BRET;==============将缓冲区的数减1的子程序===================JIANYI:MOV A,#10MOV B,BUFMUL ABADD A,BUF+1MOV R7,ADEC AMOV B,#10DIV ABMOV BUF,AMOV BUF+1,BRET五.设计总结这次课程设计是一次综合性质的实验,对我以前学的A/D转换、键盘输出等等的一综合运用,所以这次实验不但是巩固了我们以前所学的知识,也给我们带来的新的感悟。

程序虽然做出来了。

但程序肯定不只一种,方法可以改变,我想我这次课程设计还没结束,我应该学学别人的程序,学会用8255完成,学会用点阵来代替二极管来显示冷和热。

有人总是问,我们在大学学了什么,我想我们学的就是我们身边的点点滴滴。

六.参考文献《微型计算机原理与接口技术》(第三版)冯博琴吴宁主编清华大学出版社,2011年《单片机原理及应用实验指导书》,屈波等编,2008年《单片机原理及应用》,赵德安等编,机械工业出版社,2004年《单片机基础》,李广弟等,北京航空航天大学出版社,2004年七.附件材料3.实物图4.程序清单T20MS EQU 65536-10000C20MS EQU 30HIN EQU 09001H ;键盘读入口OUTBIT EQU 09002H ;位控制口OUTSET EQU 09004H ;段控制口BUF EQU 60H ;显示缓冲区ORG 0000HLJMP START;=====================键码的定义========================= KEYTABLE:DB 17H,16H,15H,14HDB 13H,12H,11H,10HDB 0DH,0CH,0BH,0AHDB 0EH,03H,06H,09HDB 0FH,02H,05H,08HDB 00H,01H,04H,07H;=======================八段管显示码===================== LEDMAP: DB 3FH,06H,5BH,4FHDB 66H,6DH,7DH,07HDB 7FH,6FH,77H,7CHDB 39H,5EH,79H,71H;======================A/D转换子程序===================== BEING: MOV DPTR , #8000H ; AD转换子程序MOV DPTR , #8000H;启动A/D转换MOVX @DPTR , AMOV R6 , #14HDELAY2: NOPNOPNOPDJNZ R6,DELAY2MOVX A,@DPTRMOV 47H,A ; 温度AD转换结果暂存47H单元ACALL CHANGE ; 十六进制转十进制子程序LCALL DISPLAYLEDRETCHANGE: MOV R1 , #00HMOV R2,#00HCLR CCHAN: SUBB A,#64HJC CHAN1INC R1AJMP CHANCHAN1: ADD A,#64HCHAN2: SUBB A,#0AHJC CHAN3INC R2AJMP CHAN2CHAN3: ADD A, #0BHMOV 64H,A ;转换结果个位暂存2AH单元MOV 63H,R2 ;十位存2BH单元MOV 62H,R1 ;百位存2CH单元RET;==================延时子程序=====================Delay1: ; 延时子程序MOV R7, #0FFHAA: DJNZ R7,AAret;==============将缓冲区的数加1的子程序=================== JIAYI:MOV A,#10MOV B,BUFMUL ABADD A,BUF+1MOV R7,AINC AMOV B,#10DIV ABMOV BUF,AMOV BUF+1,BRET;==============将缓冲区的数减1的子程序=================== JIANYI:MOV A,#10MOV B,BUFMUL ABADD A,BUF+1MOV R7,ADEC AMOV B,#10DIV ABMOV BUF,AMOV BUF+1,BRET;===================延时子程序============================ DELAY:MOV R7,#0DELAYLOOP:DJNZ R7,DelayLoopDJNZ R6,DelayLoopRET;=================检测按键是否按下的子程序================ TESTKEY:MOV DPTR,#OUTBITMOV A,#0MOVX @DPTR,AMOV DPTR,#INMOVX A,@DPTRCPL AANL A,#0FHRET;====================按键子程序============================ ANJIAN:CALL TESTKEY ;检测键盘是否有按键按下JZ ANJIANMOV R6,#10 ;延时去抖动CALL DELAYCALL TESTKEY ;再次检测键盘是否有按键按下JZ ANJIANMOVX @DPTR,AMOV R1,#00100000BMOV R2,#6KLOOP: MOV DPTR,#OUTBIT ;扫描,得到按键的行和列MOV A,R1CPL A ;(取反)用零去扫描各列MOVX @DPTR,ACPL ARR A ;下一列MOV R1,A ;R1暂存列值MOV DPTR,#inMOVX A,@DPTR ;读行状态CPL AANL A,#0FHJNZ GOON1DJNZ R2,KLOOP ;下一列扫描(一轮6次)MOV R2,#06HSJMP KLOOP ;下一轮扫描GOON1: ;按照行列计算键值MOV R1,A ;行号放在R1内MOV A,R2 ;R2中放的是列号DEC A ;RL A ;RL A ;MOV R2,A ;R2=(列号-1)*4MOV A,R1MOV R1,#4LOOPC: RRC AJC EXITINC R2DJNZ R1,LOOPC ;行值(0100)右移,并统计移的位数,移的位数就是行值EXIT: ;查表得到键值MOV A,R2MOV DPTR,#KEYTABLEMOVC A,@A+DPTRMOV R2,AWAITRELEASE:MOV DPTR,#OUTBIT ;等待按键释放,将键值存在A寄存器中CLR AMOVX @DPTR,AMOV R6,#10 ;CALL DELAY ;延时CALL TESTKEY ;测试按键是否放开JNZ W AITRELEASE ;是的MOV A,R2RET;===================LED显示子程序========================== DISPLAYLED:MOV R0,#BUF ;r0指向显示缓冲首地址MOV R1,#5 ;要循环2次,有2个LEDMOV R2,#00100000B ;从第一位开始LOOP: MOV DPTR,#OUTBITMOV A,#0MOVX @DPTR,A ;关所有的位的显示MOV A,@R0MOV DPTR,#LEDMAP ;查表MOVC A,@A+DPTRMOV DPTR,#OUTSETMOVX @DPTR,A ;输出r0指向的单元的数MOV DPTR,#OUTBITMOV A,R2MOVX @DPTR,A ;开显示,将这个数显示出来(r2决定在哪一位显示)MOV R6,#01 ;延时CALL DELAY ;延时MOV A,R2RR AMOV R2,A ;准备显示下一位数INC R0 ;r0指向下个单元DJNZ R1,LOOP ;循环六次MOV DPTR,#OUTBITMOV A,#0MOVX @DPTR,A ;关所有的位的显示RET;========================main==============================START: CALL TESTKEY ;测试按键JZ STARTCALL ANJIAN ;取键值CJNE A,#0AH,STARTSETB P1.0 ;键值=A,开指示灯MOV BUF,#0 ;MOV BUF+1,#0 ;显示缓冲区清零MOV BUF+2,#0MOV BUF+3,#0MOV BUF+4,#0NEXT1: CALL DISPLAYLED ;显示CALL TESTKEY ;测试按键JZ NEXT1CALL ANJIAN ;取键值CJNE A,#0AH,NEXT11LJMP START ;开关NEXT11: MOV BUF,A ;十位数存于60H单元NEXT2: CALL DISPLAYLED ;显示CALL TESTKEY ;测试按键JZ NEXT2CALL ANJIAN ;取键值CJNE A,#0AH,NEXT12LJMP START ;开关NEXT12: MOV BUF+1,A ;十位数存于61H单元NEXT9: CALL DISPLAYLEDCALL TESTKEYJZ NEXT9CALL ANJIANCALL JIAYICALL JIANYICJNE A,#0AH,NEXT10LJMP START ;开关NEXT10: CJNE A,#0BH,NEXT3CALL JIAYINEXT3: CJNE A,#0CH,NEXT5CALL JIANYINEXT5: MOV P1 , #00HACALL BEING ;调用转换显示子程序MOV A , 47HSUBB A,R7JZ NEXT6LJMP SSNEXT6: NOPEXIT1: JMP NEXT5SS: JC HIGH1SETB P1.0 ;降温子程序CALL DELAY1JMP EXIT1HIGH1: SETB P1.1 ; 升温子程序CALL DELAY1JMP NEXT9 NEXT4: LJMP NEXT9。

相关主题