基于单片机的空调温度控制器设计.docx
- 文档编号:23182241
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:21
- 大小:204.06KB
基于单片机的空调温度控制器设计.docx
《基于单片机的空调温度控制器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的空调温度控制器设计.docx(21页珍藏版)》请在冰豆网上搜索。
基于单片机的空调温度控制器设计
课题空调温度控制器设计
一.设计任务(要求)
1.设计任务
运用<<单片机原理及应用A>>课程等知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识点的理解,使学生综合应用知识能力、设计能力、调试能力及报告撰写能力等显著提高。
了解闭环控制的基本原理,熟悉A/D变换原理和编程方法,掌握键盘扫描和LED显示原理和编程方法。
2.设计要求
利用实验仪上显示电路,键盘电路,A/D变换电路,完成类似空调恒温控制设计
(1)可以利用实验仪上的电位器模仿温度变化
(2)加热和致冷电机可以用发光管代替,加热时红色发光管亮,制冷时驱动绿色发光管亮
(3)要求可以用键盘预设恒温温度,当外界温度超过设定温度+/-2℃时,就要启动加热或致冷电机。
二.设计方案
1.设定一恒温温度25度,通过键盘来控制它的大小,设定一键温度加一,一键温度减一,电位器所出的模拟温度来和恒温温度进行比较。
2.对各个子程序(LED显示,键盘扫描,A/D采样)在主程序实行调用,以此来达到实验的要求。
三.
原理框图
A/D采样子程序
LED显示子程序键盘扫描子程序
温度控制主程序
四.系统模块详细设计与调试
系统模块的设计
1.A/D转换子程序
BEING:
MOVDPTR,#8000H;AD转换子程序
MOVDPTR,#8000H;启动A/D转换
MOVX@DPTR,A
MOVR6,#14H
DELAY2:
NOP
NOP
NOP
DJNZR6,DELAY2
MOVXA,@DPTR
MOV47H,A;温度AD转换结果暂存47H单元
ACALLCHANGE;十六进制转十进制子程序
LCALLDISPLAYLED
RET
CHANGE:
MOVR1,#00H
MOVR2,#00H
CLRC
CHAN:
SUBBA,#64H
JCCHAN1
INCR1
AJMPCHAN
CHAN1:
ADDA,#64H
CHAN2:
SUBBA,#0AH
JCCHAN3
INCR2
AJMPCHAN2
CHAN3:
ADDA,#0BH
MOV64H,A;转换结果个位暂存2AH单元
MOV63H,R2;十位存2BH单元
MOV62H,R1;百位存2CH单元
RET
2.LED转换子程序
DISPLAYLED:
MOVR0,#BUF;r0指向显示缓冲首地址
MOVR1,#5;要循环2次,有2个LED
MOVR2,#00100000B;从第一位开始
LOOP:
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A;关所有的位的显示
MOVA,@R0
MOVDPTR,#LEDMAP;查表
MOVCA,@A+DPTR
MOVDPTR,#OUTSET
MOVX@DPTR,A;输出r0指向的单元的数
MOVDPTR,#OUTBIT
MOVA,R2
MOVX@DPTR,A;开显示,将这个数显示出来(r2决定在哪一位显示)
MOVR6,#01;延时
CALLDELAY;延时
MOVA,R2
RRA
MOVR2,A;准备显示下一位数
INCR0;r0指向下个单元
DJNZR1,LOOP;循环六次
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A;关所有的位的显示
RET
3.按键子程序
ANJIAN:
CALLTESTKEY;检测键盘是否有按键按下
JZANJIAN
MOVR6,#10;延时去抖动
CALLDELAY
CALLTESTKEY;再次检测键盘是否有按键按下
JZANJIAN
MOVX@DPTR,A
MOVR1,#00100000B
MOVR2,#6
KLOOP:
MOVDPTR,#OUTBIT;扫描,得到按键的行和列
MOVA,R1
CPLA;(取反)用零去扫描各列
MOVX@DPTR,A
CPLA
RRA;下一列
MOVR1,A;R1暂存列值
MOVDPTR,#IN
MOVXA,@DPTR;读行状态
CPLA
ANLA,#0FH
JNZGOON1
DJNZR2,KLOOP;下一列扫描(一轮6次)
MOVR2,#06H
SJMPKLOOP;下一轮扫描
GOON1:
;按照行列计算键值
MOVR1,A;行号放在R1内
MOVA,R2;R2中放的是列号
DECA;
RLA;
RLA;
MOVR2,A;R2=(列号-1)*4
MOVA,R1
MOVR1,#4
LOOPC:
RRCA
JCEXIT
INCR2
DJNZR1,LOOPC;行值(0100)右移,并统计移的位数,移的位数就是行值
EXIT:
;查表得到键值
MOVA,R2
MOVDPTR,#KEYTABLE
MOVCA,@A+DPTR
MOVR2,A
WAITRELEASE:
MOVDPTR,#OUTBIT;等待按键释放,将键值存在A寄存器中
CLRA
MOVX@DPTR,A
MOVR6,#10;
CALLDELAY;延时
CALLTESTKEY;测试按键是否放开
JNZWAITRELEASE;是的
MOVA,R2
RET
调试
(1)调试的过程
A.在实验系统中输入程序,并对其进行编译修正,直到没有错误。
B.打开试验箱,对照自己程序,对其进行接线。
C.与计算机连接并进行执行,观察试验箱上各个器件显示的结果,发现错误并对其修改直到实验结果与实验要求一致
(2)调试中遇到的问题
实验中遇到最大的问题还是键盘输入的问题,加一减一看似简单但在实验过程中总会出现乱码,最后我把加一减一写了2个子程序,对子程序进行调用,解决了上面出现的问题。
==============将缓冲区的数加1的子程序===================
JIAYI:
MOVA,#10
MOVB,BUF
MULAB
ADDA,BUF+1
MOVR7,A
INCA
MOVB,#10
DIVAB
MOVBUF,A
MOVBUF+1,B
RET
;==============将缓冲区的数减1的子程序===================
JIANYI:
MOVA,#10
MOVB,BUF
MULAB
ADDA,BUF+1
MOVR7,A
DECA
MOVB,#10
DIVAB
MOVBUF,A
MOVBUF+1,B
RET
五.设计总结
这次课程设计是一次综合性质的实验,对我以前学的A/D转换啊,键盘输出等等的一综合运用,所以这次实验不但是巩固了我们以前所学的知识,也给我们带来的新的感悟。
程序虽然做出来了。
但程序肯定不只一种,方法可以改变,我想我这次课程设计还没结束,我应该学学别人的程序,学会用8255完成,学会用点阵来代替二极管来显示冷和热。
有人总是问,我们在大学学了什么,我想我们学的就是我们身边的。
六.参考文献
《单片机原理及应用实验指导书》,屈波等编,2008年
《单片机原理及应用》,赵德安等编,机械工业出版社,2004
《单片机基础》,李广弟等,北京航空航天大学出版社,2004年
七.附件材料
1.硬件接线图
接线
连接孔1
连接孔2
1
AD-CS
CS0
2
IN0
电位器输出
3
P1.0
L0
4
P1.1
L1
5
KEY/LED-CS
CS1
3.实物图
4.程序清单
T20MSEQU65536-10000
C20MSEQU30H
INEQU09001H;键盘读入口
OUTBITEQU09002H;位控制口
OUTSETEQU09004H;段控制口
BUFEQU60H;显示缓冲区
ORG0000H
LJMPSTART
;=====================键码的定义=========================
KEYTABLE:
DB17H,16H,15H,14H
DB13H,12H,11H,10H
DB0DH,0CH,0BH,0AH
DB0EH,03H,06H,09H
DB0FH,02H,05H,08H
DB00H,01H,04H,07H
;=======================八段管显示码=====================
LEDMAP:
DB3FH,06H,5BH,4FH
DB66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH
DB39H,5EH,79H,71H
;======================A/D转换子程序=====================
BEING:
MOVDPTR,#8000H;AD转换子程序
MOVDPTR,#8000H;启动A/D转换
MOVX@DPTR,A
MOVR6,#14H
DELAY2:
NOP
NOP
NOP
DJNZR6,DELAY2
MOVXA,@DPTR
MOV47H,A;温度AD转换结果暂存47H单元
ACALLCHANGE;十六进制转十进制子程序
LCALLDISPLAYLED
RET
CHANGE:
MOVR1,#00H
MOVR2,#00H
CLRC
CHAN:
SUBBA,#64H
JCCHAN1
INCR1
AJMPCHAN
CHAN1:
ADDA,#64H
CHAN2:
SUBBA,#0AH
JCCHAN3
INCR2
AJMPCHAN2
CHAN3:
ADDA,#0BH
MOV64H,A;转换结果个位暂存2AH单元
MOV63H,R2;十位存2BH单元
MOV62H,R1;百位存2CH单元
RET
;==================延时子程序=====================
Delay1:
;延时子程序
MOVR7,#0FFH
AA:
DJNZR7,AA
ret
;==============将缓冲区的数加1的子程序===================
JIAYI:
MOVA,#10
MOVB,BUF
MULAB
ADDA,BUF+1
MOVR7,A
INCA
MOVB,#10
DIVAB
MOVBUF,A
MOVBUF+1,B
RET
;==============将缓冲区的数减1的子程序===================
JIANYI:
MOVA,#10
MOVB,BUF
MULAB
ADDA,BUF+1
MOVR7,A
DECA
MOVB,#10
DIVAB
MOVBUF,A
MOVBUF+1,B
RET
;===================延时子程序============================
DELAY:
MOVR7,#0
DELAYLOOP:
DJNZR7,DelayLoop
DJNZR6,DelayLoop
RET
;=================检测按键是否按下的子程序================
TESTKEY:
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A
MOVDPTR,#IN
MOVXA,@DPTR
CPLA
ANLA,#0FH
RET
;====================按键子程序============================
ANJIAN:
CALLTESTKEY;检测键盘是否有按键按下
JZANJIAN
MOVR6,#10;延时去抖动
CALLDELAY
CALLTESTKEY;再次检测键盘是否有按键按下
JZANJIAN
MOVX@DPTR,A
MOVR1,#00100000B
MOVR2,#6
KLOOP:
MOVDPTR,#OUTBIT;扫描,得到按键的行和列
MOVA,R1
CPLA;(取反)用零去扫描各列
MOVX@DPTR,A
CPLA
RRA;下一列
MOVR1,A;R1暂存列值
MOVDPTR,#in
MOVXA,@DPTR;读行状态
CPLA
ANLA,#0FH
JNZGOON1
DJNZR2,KLOOP;下一列扫描(一轮6次)
MOVR2,#06H
SJMPKLOOP;下一轮扫描
GOON1:
;按照行列计算键值
MOVR1,A;行号放在R1内
MOVA,R2;R2中放的是列号
DECA;
RLA;
RLA;
MOVR2,A;R2=(列号-1)*4
MOVA,R1
MOVR1,#4
LOOPC:
RRCA
JCEXIT
INCR2
DJNZR1,LOOPC;行值(0100)右移,并统计移的位数,移的位数就是行值
EXIT:
;查表得到键值
MOVA,R2
MOVDPTR,#KEYTABLE
MOVCA,@A+DPTR
MOVR2,A
WAITRELEASE:
MOVDPTR,#OUTBIT;等待按键释放,将键值存在A寄存器中
CLRA
MOVX@DPTR,A
MOVR6,#10;
CALLDELAY;延时
CALLTESTKEY;测试按键是否放开
JNZWAITRELEASE;是的
MOVA,R2
RET
;===================LED显示子程序==========================
DISPLAYLED:
MOVR0,#BUF;r0指向显示缓冲首地址
MOVR1,#5;要循环2次,有2个LED
MOVR2,#00100000B;从第一位开始
LOOP:
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A;关所有的位的显示
MOVA,@R0
MOVDPTR,#LEDMAP;查表
MOVCA,@A+DPTR
MOVDPTR,#OUTSET
MOVX@DPTR,A;输出r0指向的单元的数
MOVDPTR,#OUTBIT
MOVA,R2
MOVX@DPTR,A;开显示,将这个数显示出来(r2决定在哪一位显示)
MOVR6,#01;延时
CALLDELAY;延时
MOVA,R2
RRA
MOVR2,A;准备显示下一位数
INCR0;r0指向下个单元
DJNZR1,LOOP;循环六次
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A;关所有的位的显示
RET
;========================main==============================
START:
CALLTESTKEY;测试按键
JZSTART
CALLANJIAN;取键值
CJNEA,#0AH,START
SETBP1.0;键值=A,开指示灯
MOVBUF,#0;
MOVBUF+1,#0;显示缓冲区清零
MOVBUF+2,#0
MOVBUF+3,#0
MOVBUF+4,#0
NEXT1:
CALLDISPLAYLED;显示
CALLTESTKEY;测试按键
JZNEXT1
CALLANJIAN;取键值
CJNEA,#0AH,NEXT11
LJMPSTART;开关
NEXT11:
MOVBUF,A;十位数存于60H单元
NEXT2:
CALLDISPLAYLED;显示
CALLTESTKEY;测试按键
JZNEXT2
CALLANJIAN;取键值
CJNEA,#0AH,NEXT12
LJMPSTART;开关
NEXT12:
MOVBUF+1,A;十位数存于61H单元
NEXT9:
CALLDISPLAYLED
CALLTESTKEY
JZNEXT9
CALLANJIAN
CALLJIAYI
CALLJIANYI
CJNEA,#0AH,NEXT10
LJMPSTART;开关
NEXT10:
CJNEA,#0BH,NEXT3
CALLJIAYI
NEXT3:
CJNEA,#0CH,NEXT5
CALLJIANYI
NEXT5:
MOVP1,#00H
ACALLBEING;调用转换显示子程序
MOVA,47H
SUBBA,R7
JZNEXT6
LJMPSS
NEXT6:
NOP
EXIT1:
JMPNEXT5
SS:
JCHIGH1
SETBP1.0;降温子程序
CALLDELAY1
JMPEXIT1
HIGH1:
SETBP1.1;升温子程序
CALLDELAY1
JMPNEXT9
NEXT4:
LJMPNEXT9
忽略此处..
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 空调 温度 控制器 设计