基于单片机的空调温度控制器设计.docx

上传人:b****6 文档编号:8717286 上传时间:2023-05-14 格式:DOCX 页数:21 大小:204.06KB
下载 相关 举报
基于单片机的空调温度控制器设计.docx_第1页
第1页 / 共21页
基于单片机的空调温度控制器设计.docx_第2页
第2页 / 共21页
基于单片机的空调温度控制器设计.docx_第3页
第3页 / 共21页
基于单片机的空调温度控制器设计.docx_第4页
第4页 / 共21页
基于单片机的空调温度控制器设计.docx_第5页
第5页 / 共21页
基于单片机的空调温度控制器设计.docx_第6页
第6页 / 共21页
基于单片机的空调温度控制器设计.docx_第7页
第7页 / 共21页
基于单片机的空调温度控制器设计.docx_第8页
第8页 / 共21页
基于单片机的空调温度控制器设计.docx_第9页
第9页 / 共21页
基于单片机的空调温度控制器设计.docx_第10页
第10页 / 共21页
基于单片机的空调温度控制器设计.docx_第11页
第11页 / 共21页
基于单片机的空调温度控制器设计.docx_第12页
第12页 / 共21页
基于单片机的空调温度控制器设计.docx_第13页
第13页 / 共21页
基于单片机的空调温度控制器设计.docx_第14页
第14页 / 共21页
基于单片机的空调温度控制器设计.docx_第15页
第15页 / 共21页
基于单片机的空调温度控制器设计.docx_第16页
第16页 / 共21页
基于单片机的空调温度控制器设计.docx_第17页
第17页 / 共21页
基于单片机的空调温度控制器设计.docx_第18页
第18页 / 共21页
基于单片机的空调温度控制器设计.docx_第19页
第19页 / 共21页
基于单片机的空调温度控制器设计.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的空调温度控制器设计.docx

《基于单片机的空调温度控制器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的空调温度控制器设计.docx(21页珍藏版)》请在冰点文库上搜索。

基于单片机的空调温度控制器设计.docx

基于单片机的空调温度控制器设计

课题空调温度控制器设计

一.设计任务(要求)

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

忽略此处..

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2