1、空调温度控制器设计2南京工程学院 课程设计任务书 课 程 名 称: 单片机原理及应用A 院(系、部、中心): 自动化学院 专 业: 自动化(数控技术应用) 班 级: 数控061 姓 名: 刘新财 24号 起 止 日 期: 2008.12.172008.12.21 指 导 教 师: 孙来业 课题 空调温度控制器设计一 设计任务(要求)1. 设计任务 运用课程等知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识点的理解,使学生综合应用知识能力、设计能力、调试能力及报告撰写能力等显著提高。了解闭环控制的基本原理,熟悉A/D变换原理和编程方法,掌握键盘扫描和LED显示原理和编程方法。2
2、. 设计要求 利用实验仪上显示电路,键盘电路,A/D变换电路,完成类似空调恒温控制设计(1)可以利用实验仪上的电位器模仿温度变化(2)加热和致冷电机可以用发光管代替,加热时红色发光管亮,制冷时驱动绿色发光管亮(3)要求可以用键盘预设恒温温度,当外界温度超过设定温度+/-2时,就要启动加热或致冷电机。二设计方案 1. 设定一恒温温度25度,通过键盘来控制它的大小,设定一键温度加一,一键温度减一,电位器所出的模拟温度来和恒温温度进行比较。 2.对各个子程序(LED显示,键盘扫描,A/D采样)在主程序实行调用,以此来达到实验的要求。三 原理框图 A/D采样子程序LED显示子程序 键盘扫描子程序温度控
3、制主程序 四 系统模块详细设计与调试系统模块的设计1. A/D转换子程序BEING: MOV DPTR , #8000H ; AD转换子程序 MOV DPTR , #8000H;启动A/D转换 MOVX DPTR , A MOV R6 , #14HDELAY2: NOP NOP NOP DJNZ R6,DELAY2 MOVX A,DPTR MOV 47H,A ; 温度AD转换结果暂存47H单元 ACALL CHANGE ; 十六进制转十进制子程序 LCALL DISPLAYLED RETCHANGE: MOV R1 , #00H MOV R2,#00H CLR CCHAN: SUBB A,#6
4、4H JC CHAN1 INC R1 AJMP CHANCHAN1: ADD A,#64HCHAN2: SUBB A,#0AH JC CHAN3 INC R2 AJMP CHAN2CHAN3: ADD A, #0BH MOV 64H,A ;转换结果个位暂存2AH单元 MOV 63H,R2 ;十位存2BH单元 MOV 62H,R1 ;百位存2CH单元 RET2. LED转换子程序 DISPLAYLED :MOV R0,#BUF ;r0指向显示缓冲首地址 MOV R1,#5 ;要循环2次,有2个LED MOV R2,#00100000B ;从第一位开始LOOP: MOV DPTR,#OUTBIT
5、MOV A,#0 MOVX DPTR,A ;关所有的位的显示 MOV A,R0 MOV DPTR,#LEDMAP ;查表 MOVC A,A+DPTR MOV DPTR,#OUTSET MOVX DPTR,A ;输出r0指向的单元的数 MOV DPTR,#OUTBIT MOV A,R2 MOVX DPTR,A ;开显示,将这个数显示出来(r2决定在哪一位显示) MOV R6,#01 ;延时 CALL DELAY ;延时 MOV A,R2 RR A MOV R2,A ;准备显示下一位数 INC R0 ;r0指向下个单元 DJNZ R1,LOOP ;循环六次 MOV DPTR,#OUTBIT MOV
6、 A,#0 MOVX DPTR,A ;关所有的位的显示 RET3按键子程序 ANJIAN: CALL TESTKEY ;检测键盘是否有按键按下 JZ ANJIAN MOV R6,#10 ;延时去抖动 CALL DELAY CALL TESTKEY ;再次检测键盘是否有按键按下 JZ ANJIAN MOVX DPTR,A MOV R1,#00100000B MOV R2,#6KLOOP: MOV DPTR,#OUTBIT ;扫描,得到按键的行和列 MOV A,R1 CPL A ;(取反)用零去扫描各列 MOVX DPTR,A CPL A RR A ;下一列 MOV R1,A ;R1暂存列值 MO
7、V DPTR,#IN MOVX A,DPTR ;读行状态 CPL A ANL A,#0FH JNZ GOON1 DJNZ R2,KLOOP ;下一列扫描(一轮6次) MOV R2,#06H SJMP KLOOP ;下一轮扫描GOON1: ;按照行列计算键值 MOV R1,A ;行号放在R1内 MOV A,R2 ;R2中放的是列号 DEC A ; RL A ; RL A ; MOV R2,A ;R2=(列号-1)*4 MOV A,R1 MOV R1,#4LOOPC: RRC A JC EXIT INC R2 DJNZ R1,LOOPC ;行值(0100)右移,并统计移的位数,移的位数就是行值EX
8、IT: ;查表得到键值 MOV A,R2 MOV DPTR,#KEYTABLE MOVC A,A+DPTR MOV R2,AWAITRELEASE: MOV DPTR,#OUTBIT ;等待按键释放,将键值存在A寄存器中 CLR A MOVX DPTR,A MOV R6,#10 ; CALL DELAY ;延时 CALL TESTKEY ;测试按键是否放开 JNZ WAITRELEASE ;是的 MOV A,R2 RET调试(1) 调试的过程A 在实验系统中输入程序,并对其进行编译修正,直到没有错误。B 打开试验箱,对照自己程序,对其进行接线。 C 与计算机连接并进行执行,观察试验箱上各个器件
9、显示的结果,发现错误并对其修改直到实验结果与实验要求一致(2) 调试中遇到的问题实验中遇到最大的问题还是键盘输入的问题,加一减一看似简单但在实验过程中总会出现乱码,最后我把加一减一写了2个子程序,对子程序进行调用,解决了上面出现的问题。=将缓冲区的数加1的子程序=JIAYI: MOV A,#10 MOV B,BUF MUL AB ADD A,BUF+1 MOV R7,A INC A MOV B,#10 DIV AB MOV BUF,A MOV BUF+1,B RET;=将缓冲区的数减1的子程序=JIANYI: MOV A,#10 MOV B,BUF MUL AB ADD A,BUF+1 MOV
10、 R7,A DEC A MOV B,#10 DIV AB MOV BUF,A MOV BUF+1,B RET 五 设计总结这次课程设计是一次综合性质的实验,对我以前学的A/D转换啊,键盘输出等等的一综合运用,所以这次实验不但是巩固了我们以前所学的知识,也给我们带来的新的感悟。程序虽然做出来了。但程序肯定不只一种,方法可以改变,我想我这次课程设计还没结束,我应该学学别人的程序,学会用8255完成,学会用点阵来代替二极管来显示冷和热。有人总是问,我们在大学学了什么,我想我们学的就是我们身边的。六 参考文献单片机原理及应用实验指导书,屈波等编,2008年单片机原理及应用,赵德安等编,机械工业出版社,
11、2004单片机基础,李广弟等,北京航空航天大学出版社,2004年七 附件材料1.硬件接线图接线连接孔1连接孔21AD-CSCS02IN0电位器输出3P1.0L04P1.1L15KEY/LED-CSCS13. 实物图4.程序清单 T20MS EQU 65536-10000C20MS EQU 30HIN EQU 09001H ;键盘读入口OUTBIT EQU 09002H ;位控制口OUTSET EQU 09004H ;段控制口BUF EQU 60H ;显示缓冲区 ORG 0000H LJMP START;=键码的定义=KEYTABLE: DB 17H,16H,15H,14H DB 13H,12H
12、,11H,10H DB 0DH,0CH,0BH,0AH DB 0EH,03H,06H,09H DB 0FH,02H,05H,08H DB 00H,01H,04H,07H;=八段管显示码=LEDMAP: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H;=A/D转换子程序=BEING: MOV DPTR , #8000H ; AD转换子程序 MOV DPTR , #8000H;启动A/D转换 MOVX DPTR , A MOV R6 , #14HDELAY2: NOP NOP NOP DJNZ
13、R6,DELAY2 MOVX A,DPTR MOV 47H,A ; 温度AD转换结果暂存47H单元 ACALL CHANGE ; 十六进制转十进制子程序 LCALL DISPLAYLED RET CHANGE: MOV R1 , #00H MOV R2,#00H CLR CCHAN: SUBB A,#64H JC CHAN1 INC R1 AJMP CHANCHAN1: ADD A,#64HCHAN2: SUBB A,#0AH JC CHAN3 INC R2 AJMP CHAN2CHAN3: ADD A, #0BH MOV 64H,A ;转换结果个位暂存2AH单元 MOV 63H,R2 ;十位
14、存2BH单元 MOV 62H,R1 ;百位存2CH单元 RET;=延时子程序=Delay1: ; 延时子程序 MOV R7, #0FFHAA: DJNZ R7,AA ret;=将缓冲区的数加1的子程序=JIAYI: MOV A,#10 MOV B,BUF MUL AB ADD A,BUF+1 MOV R7,A INC A MOV B,#10 DIV AB MOV BUF,A MOV BUF+1,B RET;=将缓冲区的数减1的子程序=JIANYI: MOV A,#10 MOV B,BUF MUL AB ADD A,BUF+1 MOV R7,A DEC A MOV B,#10 DIV AB MO
15、V BUF,A MOV BUF+1,B RET;=延时子程序=DELAY: MOV R7,#0DELAYLOOP: DJNZ R7,DelayLoop DJNZ R6,DelayLoop RET;=检测按键是否按下的子程序=TESTKEY: MOV DPTR,#OUTBIT MOV A,#0 MOVX DPTR,A MOV DPTR,#IN MOVX A,DPTR CPL A ANL A,#0FH RET;=按键子程序=ANJIAN: CALL TESTKEY ;检测键盘是否有按键按下 JZ ANJIAN MOV R6,#10 ;延时去抖动 CALL DELAY CALL TESTKEY ;再
16、次检测键盘是否有按键按下 JZ ANJIAN MOVX DPTR,A MOV R1,#00100000B MOV R2,#6KLOOP: MOV DPTR,#OUTBIT ;扫描,得到按键的行和列 MOV A,R1 CPL A ;(取反)用零去扫描各列 MOVX DPTR,A CPL A RR A ;下一列 MOV R1,A ;R1暂存列值 MOV DPTR,#in MOVX A,DPTR ;读行状态 CPL A ANL A,#0FH JNZ GOON1 DJNZ R2,KLOOP ;下一列扫描(一轮6次) MOV R2,#06H SJMP KLOOP ;下一轮扫描GOON1: ;按照行列计算
17、键值 MOV R1,A ;行号放在R1内 MOV A,R2 ;R2中放的是列号 DEC A ; RL A ; RL A ; MOV R2,A ;R2=(列号-1)*4 MOV A,R1 MOV R1,#4LOOPC: RRC A JC EXIT INC R2 DJNZ R1,LOOPC ;行值(0100)右移,并统计移的位数,移的位数就是行值EXIT: ;查表得到键值 MOV A,R2 MOV DPTR,#KEYTABLE MOVC A,A+DPTR MOV R2,AWAITRELEASE: MOV DPTR,#OUTBIT ;等待按键释放,将键值存在A寄存器中 CLR A MOVX DPTR
18、,A MOV R6,#10 ; CALL DELAY ;延时 CALL TESTKEY ;测试按键是否放开 JNZ WAITRELEASE ;是的 MOV A,R2 RET;=LED显示子程序=DISPLAYLED:MOV R0,#BUF ;r0指向显示缓冲首地址 MOV R1,#5 ;要循环2次,有2个LED MOV R2,#00100000B ;从第一位开始LOOP: MOV DPTR,#OUTBIT MOV A,#0 MOVX DPTR,A ;关所有的位的显示 MOV A,R0 MOV DPTR,#LEDMAP ;查表 MOVC A,A+DPTR MOV DPTR,#OUTSET MOV
19、X DPTR,A ;输出r0指向的单元的数 MOV DPTR,#OUTBIT MOV A,R2 MOVX DPTR,A ;开显示,将这个数显示出来(r2决定在哪一位显示) MOV R6,#01 ;延时 CALL DELAY ;延时 MOV A,R2 RR A MOV R2,A ;准备显示下一位数 INC R0 ;r0指向下个单元 DJNZ R1,LOOP ;循环六次 MOV DPTR,#OUTBIT MOV A,#0 MOVX DPTR,A ;关所有的位的显示 RET;=main=START: CALL TESTKEY ;测试按键 JZ START CALL ANJIAN ;取键值 CJNE
20、A,#0AH,START SETB P1.0 ;键值=A,开指示灯 MOV BUF,#0 ; MOV BUF+1,#0 ;显示缓冲区清零 MOV BUF+2,#0 MOV BUF+3,#0 MOV BUF+4,#0NEXT1: CALL DISPLAYLED ;显示 CALL TESTKEY ;测试按键 JZ NEXT1 CALL ANJIAN ;取键值 CJNE A,#0AH,NEXT11 LJMP START ;开关NEXT11: MOV BUF,A ;十位数存于60H单元NEXT2: CALL DISPLAYLED ;显示 CALL TESTKEY ;测试按键 JZ NEXT2 CALL
21、 ANJIAN ;取键值 CJNE A,#0AH,NEXT12 LJMP START ;开关NEXT12: MOV BUF+1,A ;十位数存于61H单元NEXT9: CALL DISPLAYLED CALL TESTKEY JZ NEXT9 CALL ANJIAN CALL JIAYI CALL JIANYI CJNE A,#0AH,NEXT10 LJMP START ;开关NEXT10: CJNE A,#0BH,NEXT3 CALL JIAYI NEXT3: CJNE A,#0CH,NEXT5 CALL JIANYI NEXT5: MOV P1 , #00H ACALL BEING ;调用转换显示子程序 MOV A , 47H SUBB A,R7 JZ NEXT6 LJMP SSNEXT6: NOPEXIT1: JMP NEXT5SS: JC HIGH1 SETB P1.0 ;降温子程序 CALL DELAY1 JMP EXIT1HIGH1: SETB P1.1 ; 升温子程序 CALL DELAY1 JMP NEXT9 NEXT4: LJMP NEXT9
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1