基于VHDL的空调控制器设计..doc

上传人:聆听****声音 文档编号:352250 上传时间:2023-04-29 格式:DOC 页数:31 大小:808KB
下载 相关 举报
基于VHDL的空调控制器设计..doc_第1页
第1页 / 共31页
基于VHDL的空调控制器设计..doc_第2页
第2页 / 共31页
基于VHDL的空调控制器设计..doc_第3页
第3页 / 共31页
基于VHDL的空调控制器设计..doc_第4页
第4页 / 共31页
基于VHDL的空调控制器设计..doc_第5页
第5页 / 共31页
基于VHDL的空调控制器设计..doc_第6页
第6页 / 共31页
基于VHDL的空调控制器设计..doc_第7页
第7页 / 共31页
基于VHDL的空调控制器设计..doc_第8页
第8页 / 共31页
基于VHDL的空调控制器设计..doc_第9页
第9页 / 共31页
基于VHDL的空调控制器设计..doc_第10页
第10页 / 共31页
基于VHDL的空调控制器设计..doc_第11页
第11页 / 共31页
基于VHDL的空调控制器设计..doc_第12页
第12页 / 共31页
基于VHDL的空调控制器设计..doc_第13页
第13页 / 共31页
基于VHDL的空调控制器设计..doc_第14页
第14页 / 共31页
基于VHDL的空调控制器设计..doc_第15页
第15页 / 共31页
基于VHDL的空调控制器设计..doc_第16页
第16页 / 共31页
基于VHDL的空调控制器设计..doc_第17页
第17页 / 共31页
基于VHDL的空调控制器设计..doc_第18页
第18页 / 共31页
基于VHDL的空调控制器设计..doc_第19页
第19页 / 共31页
基于VHDL的空调控制器设计..doc_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于VHDL的空调控制器设计..doc

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

基于VHDL的空调控制器设计..doc

数字系统设计与硬件描述语言

期末考试作业

题目:

空调控制器的设计

学院:

电子信息工程学院

专业:

物联网工程

学号:

3014204328

姓名:

刘涵凯

2016-12-14

一、选题设计描述

1.功能介绍

设计内容为空调控制器,可实现空调的开关、模式切换、温度控制、风速控制、定时设置。

模式默认为制冷,可切换为制热、除湿。

温度默认为26度,可按“温度+”、“温度-”调节,每次调节1度,最高30度,最低16度。

风速默认为中挡,可按“风速+”、“风速-”切换为低挡、高挡、睡眠模式。

睡眠模式中,在低挡与停止间循环。

定时设置默认关闭,开启时默认30分钟,可按“定时+”、“定时-”调节,每次调节30分钟,最高24小时,最低30分钟。

定时倒计时结束时,关闭空调。

定时开启时,可按“取消定时”关闭定时。

空调控制器模拟界面如下:

2.算法简介

1)空调控制器

其输入与输出在主程序kt中已标明,在此不做介绍。

2)单脉冲模块

这是非常重要以及核心的模块。

当a产生一个上升沿时,输出一个单脉冲,脉冲将持续到经过一个clk上升沿后的clk下降沿。

3)开关模块

a连接空调的开关,b连接开关控制模块的输出,c为空调各工作模块的开关信号,d连接数码管显示开关状况。

当定时时间结束,b输入一个单脉冲,空调关闭。

4)开关控制模块

此模块的作用是保证开关模块能够正常工作。

开关打开时,a输入一个单脉冲,重置c。

b连接定时模块,当定时结束,b输入一个单脉冲,使c输出1,使开关模块输出0

5)温度模块

a连接开关模块,b为温度+1,c为温度-1,输出为温度的十位和个位。

6)风速模块

a连接开关模块,b为风速+1,c为风速-1。

di,zhong,gao为抵挡、中挡、高挡的状态(无睡眠模式,因为睡眠模式是抵挡-停止模式)。

其他连接数码管,显示睡眠模式、抵挡、中挡、高挡的状态。

7)模式模块

b连接开关模块,c为切换模式,输出类似于模式模块。

8)定时模块

a连接开关模块,b为定时模块开启,c为取消定时,up、down为定时时间+、-。

clk1为空调时钟,clk2为模拟的倒计时时钟(周期1分钟)。

clk2周期远大于clk1。

当时间倒计时结束时,sw1输出1,使开关控制模块控制开关关闭。

其他输出连接倒计时模块。

9)倒计时模块

a连接开关模块,clk连接定时模块的clk2,输入时间发生变化时,重新倒计时。

倒计时结束时,finish输出1,使定时模块的sw1输出1。

10)数码管模块

a连接开关模块,此为7段译码器。

11)计数器模块

此为六位计数器。

a连接睡眠模式开关,rst为睡眠模式打开时的重置信号,每6次输出一次1。

二、程序源代码及说明

1)空调控制器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYktIS

PORT(switchin,modeset,fanup,fandown,tempup,tempdown,timerop,timercancel,timerup,timerdown,clk1,clk2:

INSTD_LOGIC;

--电源开关、模式切换、风速+、风速-、温度+、温度-、定时、取消定时、定时+、定时-、时钟信号、倒计时时钟信号

cools,heats,drys,dis,zhongs,gaos:

OUTSTD_LOGIC;--通向空调内部的制冷、制热、除湿、抵挡、中挡、高挡状态输出

switchstate,tempd,temps,coolstate,heatstate,drystate,distate,zhongstate,gaostate,sleepstate,hdstate,hsstate,tdstate,tsstate:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

--由数码管显示的开关、温度、制冷、制热、除湿、抵挡、中挡、高挡、睡眠状态和倒计时剩余时间

ENDENTITYkt;

ARCHITECTUREbehaveOFktIS

COMPONENTswitch--开关模块

PORT(a,b,clk:

INSTD_LOGIC;--b受定时模块的控制,时间减为0时,关闭开关

c:

OUTSTD_LOGIC;

d:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)); --输送给数码管

ENDCOMPONENTswitch;

COMPONENTcontrol--开关控制模块

PORT(a,b,clk:

INSTD_LOGIC;

c:

OUTSTD_LOGIC);

ENDCOMPONENTcontrol;

COMPONENTfan--风速模块

PORT(a,b,c,clk:

INSTD_LOGIC;

di,zhong,gao:

OUTSTD_LOGIC;--由于high和low是敏感词汇,所以此处用拼音,可以看到此处没有睡眠模式,是因为睡眠模式其实是抵挡-停止模式

ssleep,sdi,szhong,sgao:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));--不同于发给空调内部的信号,睡眠模式的状态应显示在外

ENDCOMPONENTfan;

COMPONENTBCD7--数码管模块

PORT(a:

INSTD_LOGIC;

b:

INSTD_LOGIC_VECTOR(3DOWNTO0);

q:

OUTSTD_LOGIC_VECTOR(0TO6));

ENDCOMPONENTBCD7;

COMPONENTpulse--单脉冲模块

PORT(a,clk:

INSTD_LOGIC;

b:

OUTSTD_LOGIC);

ENDCOMPONENTpulse;

COMPONENTtemp--温度模块

PORT(a,b,c,clk:

INSTD_LOGIC;--a控制开关,b提高1度,c降低1度

temp1,temp2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENTtemp;

COMPONENTtimer--定时模块

PORT(a,b,c,up,down,clk1,clk2:

INSTD_LOGIC;

sw1:

OUTSTD_LOGIC;--总开关关闭信号

oh1,oh2,ot1,ot2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));--输送给数码管显示剩余时间

ENDCOMPONENTtimer;

COMPONENTmode

PORT(b,c,clk:

INSTD_LOGIC;

cool,heat,dry:

OUTSTD_LOGIC;

cool1,heat1,dry1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENTmode;

SIGNALswa,swb,swc:

STD_LOGIC;

SIGNALsigBCD7_1,sigBCD7_2,sigBCD7_3,sigBCD7_4,sigBCD7_5,

sigBCD7_6,sigBCD7_7,sigBCD7_8,sigBCD7_9,sigBCD7_10,

sigBCD7_11,sigBCD7_12,sigBCD7_13,sigBCD7_14:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

U1:

switchPORTMAP(a=>switchin,b=>swb,c=>swa,clk=>clk1,d=>sigBCD7_1);

U2:

controlPORTMAP(a=>switchin,b=>swc,clk=>clk1,c=>swb);

U3:

fanPORTMAP(a=>swa,b=>fanup,c=>fandown,clk=>clk1,di=>dis,zhong=>zhongs,gao=>gaos,ssleep=>sigBCD7_2,sdi=>sigBCD7_3,szhong=>sigBCD7_4,sgao=>sigBCD7_5);

U4:

tempPORTMAP(a=>swa,b=>tempup,c=>tempdown,clk=>clk1,temp1=>sigBCD7_6,temp2=>sigBCD7_7);

U5:

timerPORTMAP(a=>swa,clk1=>clk1,clk2=>clk2,b=>timerop,c=>timercancel,up=>timerup,down=>timerdown,sw1=>swc,oh1=>sigBCD7_8,oh2=>sigBCD7_9,ot1=>sigBCD7_10,ot2=>sigBCD7_11);

U6:

modePORTMAP(b=>swa,c=>modeset,clk=>clk1,cool=>cools,heat=>heats,dry=>drys,cool1=>sigBCD7_12,heat1=>sigBCD7_13,dry1=>sigBCD7_14);

U7:

BCD7PORTMAP(a=>swa,b=>sigBCD7_1,q=>switchstate);

U8:

BCD7PORTMAP(a=>swa,b=>sigBCD7_2,q=>sleepstate);

U9:

BCD7PORTMAP(a=>swa,b=>sigBCD7_3,q=>distate);

U10:

BCD7PORTMAP(a=>swa,b=>sigBCD7_4,q=>zhongstate);

U11:

BCD7PORTMAP(a=>swa,b=>sigBCD7_5,q=>gaostate);

U12:

BCD7PORTMAP(a=>swa,b=>sigBCD7_6,q=>tempd);

U13:

BCD7PORTMAP(a=>swa,b=>sigBCD7_7,q=>temps);

U14:

BCD7PORTMAP(a=>swa,b=>sigBCD7_8,q=>hdstate);

U15:

BCD7PORTMAP(a=>swa,b=>sigBCD7_9,q=>hsstate);

U16:

BCD7PORTMAP(a=>swa,b=>sigBCD7_10,q=>tdstate);

U17:

BCD7PORTMAP(a=>swa,b=>sigBCD7_11,q=>tsstate);

U18:

BCD7PORTMAP(a=>swa,b=>sigBCD7_12,q=>coolstate);

U19:

BCD7PORTMAP(a=>swa,b=>sigBCD7_13,q=>heatstate);

U20:

BCD7PORTMAP(a=>swa,b=>sigBCD7_14,q=>drystate);

PROCESS(clk1)

BEGIN

ENDPROCESS;

ENDARCHITECTUREbehave;

2)单脉冲模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYpulseIS--单脉冲模块

PORT(a,clk:

INSTD_LOGIC;

b:

OUTSTD_LOGIC);

ENDENTITYpulse;

ARCHITECTUREbehaveOFpulseIS

SIGNALd:

STD_LOGIC:

='0';

SIGNALf:

STD_LOGIC:

='0';

SIGNALg:

STD_LOGIC:

='0';--确保经过第一个clk上升沿时输出1

SIGNALh:

STD_LOGIC:

='0';--同上

BEGIN

PROCESS(a,clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

IF(f='1')THEN

g<='1';

ELSEg<='0';

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(a,clk)

BEGIN

IF(clk'EVENTANDclk='0')THEN

IF(a='1')THEN

IF(f='1')THEN

IF(g='1')THEN

d<='1';

ELSEd<='0';

ENDIF;

ELSEd<='1';

ENDIF;

ELSEd<='0';--a为0时,重置此单脉冲发生器

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(d)

BEGIN

IF(a='1')THEN

IF(d='1')THEN

f<='0';

ELSEf<='1';

ENDIF;

ELSEf<='0';

ENDIF;

b<=f;

ENDPROCESS;

ENDARCHITECTUREbehave;

3)开关模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYswitchIS--开关模块

PORT(a,b,clk:

INSTD_LOGIC;--b受定时模块的控制,时间减为0时,关闭开关

c:

OUTSTD_LOGIC;

d:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)); --输送给数码管

ENDENTITYswitch;

ARCHITECTUREbehaveOFswitchIS

COMPONENTpulse--调用单脉冲模块

PORT(a,clk:

INSTD_LOGIC;

b:

OUTSTD_LOGIC);

ENDCOMPONENTpulse;

SIGNALp1:

STD_LOGIC:

='0';

SIGNALp2:

STD_LOGIC:

='0';

BEGIN

U1:

pulsePORTMAP(a=>a,b=>p1,clk=>clk);

U2:

pulsePORTMAP(a=>b,b=>p2,clk=>clk);

PROCESS(a,b,clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

IF(p1='1')THEN--空调开关打开

c<='1';d<="0001";

ENDIF;

IF(p2='1')THEN--时间减为0时,定时模块返回1,关闭开关

c<='0';d<="0000";

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREbehave;

4)开关控制模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcontrolIS--开关控制模块

PORT(a,b,clk:

INSTD_LOGIC;

c:

OUTSTD_LOGIC);

ENDENTITYcontrol;

ARCHITECTUREbehaveOFcontrolIS

COMPONENTpulse--调用单脉冲模块

PORT(a,clk:

INSTD_LOGIC;

b:

OUTSTD_LOGIC);

ENDCOMPONENTpulse;

SIGNALp1:

STD_LOGIC:

='0';

SIGNALp2:

STD_LOGIC:

='0';

BEGIN

U1:

pulsePORTMAP(a=>a,b=>p1,clk=>clk);

U2:

pulsePORTMAP(a=>b,b=>p2,clk=>clk);

PROCESS(a,b,clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

IF(p1='1')THEN--空调开关打开

c<='0';

ENDIF;

IF(p2='1')THEN--时间减为0时,定时模块返回1,关闭开关

c<='1';

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREbehave;

5)温度模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYtempIS--温度模块,最高30度,最低16度,默认26度

PORT(a,b,c,clk:

INSTD_LOGIC;--a控制开关,b提高1度,c降低1度

temp1,temp2:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDENTITYtemp;

ARCHITECTUREbehaveOFtempIS

COMPONENTpulse--调用单脉冲模块

PORT(a,clk:

INSTD_LOGIC;

b:

OUTSTD_LOGIC);

ENDCOMPONENTpulse;

SIGNALt1:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

SIGNALt2:

STD_LOGIC_VECTOR(3DOWNTO0):

="0000";

SIGNALp1:

STD_LOGIC:

='0';

SIGNALp2:

STD_LOGIC:

='0';

SIGNALp3:

STD_LOGIC:

='0';

BEGIN

U1:

pulsePORTMAP(a=>b,b=>p1,clk=>clk);

U2:

pulsePORTMAP(a=>c,b=>p2,clk=>clk);

U3:

pulsePORTMAP(a=>a,b=>p3,clk=>clk);

PROCESS(a,clk)

BEGIN

IF(clk'EVENTANDclk='1')THEN

IF(p3='1')THEN--开关打开时,默认26度

t1<="0010";t2<="0110";

ELSIF(a='0')THEN

t1<="0000";t2<="0000";

ENDIF;

IF(a='1')THEN

IF(p1='1')THEN--判断"温度+"按键按下

IF(t1="0011")THEN

t1<="0011";t2<="0000";

ELSIF(t2="1001")THEN

t1<=t1+'1';

t2<="0000";

ELSEt2<=t2+'1';

ENDIF;

ENDIF;

IF(p2='1')THEN--判断"温度-"按键按下

IF(t1="0001")THEN

IF(t2="0110")THEN

t1<="0001";t2<="0110";

ELSEt2<=t2-'1';

ENDIF;

ELSIF(t2="0000")THEN

t1<=t1-'1';

t2<="1001";

ELSEt2<=t2-'1';

ENDIF;

ENDIF;

ELSEt1<="0000";t2<="0000";

ENDIF;

ENDIF;

temp1<=t1;temp2<=t2;

ENDPROCESS;

ENDARCHITECTUREbehave;

6)风速模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfanIS--风速模块:

睡眠、低、中、高;默认中挡;睡眠模式在低挡和停止之间循环

PORT(a,b,c,clk:

INSTD_LOGIC;

di,zhong,gao:

OUTSTD_LOGIC;--由于high和low是敏感词汇,所以此处用拼音,可以看到此处没有睡眠模式,是因为睡眠模式其实是抵挡-停止模式

ssleep,sdi,szhong,sgao:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));--不同于发给空调内部的信号,睡眠模式的状态应显示在外

ENDENTITYfan;

ARCHITECTUREbehaveOFfanIS

COMPONENTpulse--调用单脉冲模块

PORT(a,clk:

INSTD_LOGIC;

b:

OUTSTD_LOGIC);

ENDCOMPONENTp

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

当前位置:首页 > 自然科学 > 物理

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

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