空调温度控制器设计.docx
- 文档编号:6443465
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:21
- 大小:20.89KB
空调温度控制器设计.docx
《空调温度控制器设计.docx》由会员分享,可在线阅读,更多相关《空调温度控制器设计.docx(21页珍藏版)》请在冰豆网上搜索。
空调温度控制器设计
计算机控制课程设计
学生姓名:
学生学号:
所在班级:
所在专业:
指导教师:
课题空调温度控制器设计
一.设计任务(要求)
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:
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完成,学会用点阵来代替二极管来显示冷和热。
有人总是问,我们在大学学了什么,我想我们学的就是我们身边的点点滴滴。
六.参考文献
《微型计算机原理与接口技术》(第三版)冯博琴吴宁主编清华大学出版社,2011年
《单片机原理及应用实验指导书》,屈波等编,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
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 空调 温度 控制器 设计