空调温度控制器设计文档格式.docx
《空调温度控制器设计文档格式.docx》由会员分享,可在线阅读,更多相关《空调温度控制器设计文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
输出时钟脉冲
关闭所有显示位
取出数据一位输出
位选通信号位移
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
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单元
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
输出r0指向的单元的数
MOVDPTR,#OUTBIT
MOVA,R2
开显示,将这个数显示出来(r2决定在哪一位显示)
MOVR6,#01;
CALLDELAY;
RRA
MOVR2,A;
准备显示下一位数
INCR0;
r0指向下个单元
DJNZR1,LOOP;
循环六次
MOVA,#0
RET
3.按键子程序
ANJIAN:
CALLTESTKEY;
检测键盘是否有按键按下
JZANJIAN
MOVR6,#10;
延时去抖动
CALLDELAY
再次检测键盘是否有按键按下
MOVX@DPTR,A
MOVR1,#00100000B
MOVR2,#6
KLOOP:
MOVDPTR,#OUTBIT;
扫描,得到按键的行和列
MOVA,R1
CPLA;
(取反)用零去扫描各列
CPLA
RRA;
下一列
MOVR1,A;
R1暂存列值
MOVDPTR,#IN
MOVXA,@DPTR;
读行状态
ANLA,#0FH
JNZGOON1
DJNZR2,KLOOP;
下一列扫描(一轮6次)
MOVR2,#06H
SJMPKLOOP;
下一轮扫描
GOON1:
;
按照行列计算键值
行号放在R1内
MOVA,R2;
R2中放的是列号
DECA;
RLA;
R2=(列号-1)*4
MOVR1,#4
LOOPC:
RRCA
JCEXIT
INCR2
DJNZR1,LOOPC;
行值(0100)右移,并统计移的位数,移的位数就是行值
EXIT:
查表得到键值
MOVDPTR,#KEYTABLE
MOVCA,@A+DPTR
MOVR2,A
WAITRELEASE:
等待按键释放,将键值存在A寄存器中
CLRA
测试按键是否放开
JNZWAITRELEASE;
是的
调试
(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
;
==============将缓冲区的数减1的子程序===================
JIANYI:
DECA
五.设计总结
这次课程设计是一次综合性质的实验,对我以前学的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转换子程序=====================
DJNZR6,DELAY2
MOVR2,#00H
CLRC
JCCHAN1
INCR1
SUBBA,#0AH
JCCHAN3
INCR2
==================延时子程序=====================
Delay1:
延时子程序
MOVR7,#0FFH
AA:
DJNZR7,AA
ret
INCA
DIVAB
DECA
===================延时子程序============================
DELAY:
MOVR7,#0
DELAYLOOP:
DJNZR7,DelayLoop
DJNZR6,DelayLoop
=================检测按键是否按下的子程序================
TESTKEY:
MOVXA,@DPTR
====================按键子程序============================
ANJIAN:
MOVDPTR,#in
===================LED显示子程序==========================
DISPLAYLED:
MOVA,@R0
MOVDPTR,#OUTSET
========================main==============================
START:
测试按键
JZSTART
CALLANJIAN;
取键值
CJNEA,#0AH,START
SETBP1.0;
键值=A,开指示灯
MOVBUF,#0;
MOVBUF+1,#0;
显示缓冲区清零
MOVBUF+2,#0
MOVBUF+3,#0
MOVBUF+4,#0
NEXT1:
CALLDISPLAYLED;
显示
JZNEXT1
CJNEA,#0AH,NEXT11
LJMPSTART;
开关
NEXT11:
MOVBUF,A;
十位数存于60H单元
NEXT2:
JZNEXT2
CJNEA,#0AH,NEXT12
NEXT12:
MOVBUF+1,A;
十位数存于61H单元
NEXT9:
CALLDISPLAYLED
CALLTESTKEY
JZNEXT9
CALLANJIAN
CALLJIAYI
CALLJIANYI
CJNEA,#0AH,NEXT10
NEXT10:
CJNEA,#0BH,NEXT3
CALLJIAYI
NEXT3:
CJNEA,#0CH,NEXT5
NEXT5:
MOVP1,#00H
ACALLBEING;
调用转换显示子程序
MOVA,47H
SUBBA,R7
JZNEXT6
LJMPSS
NEXT6:
EXIT1:
JMPNEXT5
SS:
JCHIGH1
降温子程序
CALLDELAY1
JMPEXIT1
HIGH1:
SETBP1.1;
升温子程序
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.