空调温度控制器设计.doc_第1页
空调温度控制器设计.doc_第2页
空调温度控制器设计.doc_第3页
空调温度控制器设计.doc_第4页
空调温度控制器设计.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机控制课程设计 学生姓名:学生学号:所在班级: 所在专业:指导教师: 课题 空调温度控制器设计一 设计任务(要求)1. 设计任务 运用、单片机原理及应用等课程知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识点的理解,使学生综合应用知识能力、设计能力、调试能力及报告撰写能力等显著提高。了解闭环控制的基本原理,熟悉A/D变换原理和编程方法,掌握键盘扫描和LED显示原理和编程方法。2. 设计要求利用8255扩展LED显示电路,键盘电路,A/D变换电路,完成类似空调恒温控制设计。(1)可以利用实验仪上的电位器模仿温度变化,利用ADC0809采样可变电位器的输出电压,可将初始ADC0809的输出值作为设定温度;(2)加热和致冷电机可以用发光管代替,加热时红色发光管亮,制冷时驱动绿色发光管亮;(3)当单片机采样到可变电位器的输出电压值超过设定温度2时,启动致冷电机;采样到可变电位器的输出电压值低于设定温度2时,启动加热电机。二设计方案 1. 设定一恒温温度25度,通过键盘来控制它的大小,设定一键温度加一,一键温度减一,电位器所出的模拟温度来和恒温温度进行比较。 2.对各个子程序(LED显示,键盘扫描,A/D采样)在主程序实行调用,以此来达到实验的要求。启动AD转换延时读AD变换值结束开始三 原理框图 A/D采样子程序开始输出列扫描信号读入行数列信号移位计算键值有键输入6列扫描完?等待键松开查表得到键码返回是否否LED显示子程序 键盘扫描子程序开始取出显示数据输出位选通信号显示数据移位输出时钟脉冲 关闭所有显示位取出数据一位输出延时位选通信号位移8位数据输出6位全显示完?返回否否是开始初始化温度参数当前温度和设定温度送 显示缓冲显示温度采样当前温度当前温度与设定温度比较制冷不变加热读键盘键盘值是?向下键向上键设定温度减1设定温度加1低2度+/-2度内高2度温度控制主程序 四 系统模块详细设计与调试系统模块的设计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,#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 ;十位存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 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 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暂存列值 MOV 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)右移,并统计移的位数,移的位数就是行值EXIT: ;查表得到键值 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 与计算机连接并进行执行,观察试验箱上各个器件显示的结果,发现错误并对其修改直到实验结果与实验要求一致(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 R7,A DEC A MOV B,#10 DIV AB MOV BUF,A MOV BUF+1,B RET 五 设计总结这次课程设计是一次综合性质的实验,对我以前学的A/D转换、键盘输出等等的一综合运用,所以这次实验不但是巩固了我们以前所学的知识,也给我们带来的新的感悟。程序虽然做出来了。但程序肯定不只一种,方法可以改变,我想我这次课程设计还没结束,我应该学学别人的程序,学会用8255完成,学会用点阵来代替二极管来显示冷和热。有人总是问,我们在大学学了什么,我想我们学的就是我们身边的点点滴滴。六 参考文献微型计算机原理与接口技术(第三版)冯博琴 吴宁主编 清华大学出版社,2011年单片机原理及应用实验指导书,屈波等编,2008年单片机原理及应用,赵德安等编,机械工业出版社,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,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 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 ;十位存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 MOV 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 ;再次检测键盘是否有按键按下 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: ;按照行列计算键值 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,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 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 A,#0 MOVX DPTR,A ;关所有的位的显示 RET;=main=START: CALL TESTKEY ;测试按键 JZ START CALL ANJIAN ;取键值 CJNE 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: C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论