基于VHDL的空调控制器设计Word文档格式.docx
- 文档编号:21197838
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:37
- 大小:561.02KB
基于VHDL的空调控制器设计Word文档格式.docx
《基于VHDL的空调控制器设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于VHDL的空调控制器设计Word文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
开关翻开时,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。
二、程序源代码及说明
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
PONENTswitch--开关模块
PORT(a,b,clk:
--b受定时模块的控制,时间减为0时,关闭开关
c:
d:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
--输送给数码管
ENDPONENTswitch;
PONENTcontrol--开关控制模块
OUTSTD_LOGIC);
ENDPONENTcontrol;
PONENTfan--风速模块
PORT(a,b,c,clk:
di,zhong,gao:
--由于high和low是敏感词汇,所以此处用拼音,可以看到此处没有睡眠模式,是因为睡眠模式其实是抵挡-停顿模式
ssleep,sdi,szhong,sgao:
--不同于发给空调内部的信号,睡眠模式的状态应显示在外
ENDPONENTfan;
PONENTBCD7--数码管模块
PORT(a:
b:
INSTD_LOGIC_VECTOR(3DOWNTO0);
q:
OUTSTD_LOGIC_VECTOR(0TO6));
ENDPONENTBCD7;
PONENTpulse--单脉冲模块
PORT(a,clk:
b:
ENDPONENTpulse;
PONENTtemp--温度模块
--a控制开关,b提高1度,c降低1度
temp1,temp2:
ENDPONENTtemp;
PONENTtimer--定时模块
PORT(a,b,c,up,down,clk1,clk2:
sw1:
--总开关关闭信号
oh1,oh2,ot1,ot2:
--输送给数码管显示剩余时间
ENDPONENTtimer;
PONENTmode
PORT(b,c,clk:
cool,heat,dry:
cool1,heat1,dry1:
ENDPONENTmode;
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=>
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=>
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=>
sigBCD7_1,q=>
switchstate);
U8:
sigBCD7_2,q=>
sleepstate);
U9:
sigBCD7_3,q=>
distate);
U10:
sigBCD7_4,q=>
zhongstate);
U11:
sigBCD7_5,q=>
gaostate);
U12:
sigBCD7_6,q=>
tempd);
U13:
sigBCD7_7,q=>
temps);
U14:
sigBCD7_8,q=>
hdstate);
U15:
sigBCD7_9,q=>
hsstate);
U16:
sigBCD7_10,q=>
tdstate);
U17:
sigBCD7_11,q=>
tsstate);
U18:
sigBCD7_12,q=>
coolstate);
U19:
sigBCD7_13,q=>
heatstate);
U20:
sigBCD7_14,q=>
drystate);
PROCESS(clk1)
ENDPROCESS;
ENDARCHITECTUREbehave;
ENTITYpulseIS--单脉冲模块
ENDENTITYpulse;
ARCHITECTUREbehaveOFpulseIS
SIGNALd:
STD_LOGIC:
='
0'
;
SIGNALf:
SIGNALg:
--确保经过第一个clk上升沿时输出1
SIGNALh:
--同上
PROCESS(a,clk)
BEGIN
IF(clk'
EVENTANDclk='
1'
)THEN
IF(f='
g<
ELSEg<
ENDIF;
IF(a='
)THEN
IF(g='
d<
ELSEd<
--a为0时,重置此单脉冲发生器
PROCESS(d)
IF(d='
f<
ELSEf<
b<
=f;
ENTITYswitchIS--开关模块
ENDENTITYswitch;
ARCHITECTUREbehaveOFswitchIS
PONENTpulse--调用单脉冲模块
ENDPONENTpulse;
SIGNALp1:
STD_LOGIC:
SIGNALp2:
pulsePORTMAP(a=>
a,b=>
p1,clk=>
clk);
b,b=>
p2,clk=>
PROCESS(a,b,clk)
IF(clk'
IF(p1='
)THEN--空调开关翻开
c<
d<
="
0001"
ENDIF;
IF(p2='
)THEN--时间减为0时,定时模块返回1,关闭开关
0000"
ENDPROCESS;
ENTITYcontrolIS--开关控制模块
ENDENTITYcontrol;
ARCHITECTUREbehaveOFcontrolIS
ENDIF;
ENTITYtempIS--温度模块,最高30度,最低16度,默认26度
ENDENTITYtemp;
ARCHITECTUREbehaveOFtempIS
SIGNALt1:
STD_LOGIC_VECTOR(3DOWNTO0):
SIGNALt2:
SIGNALp3:
c,b=>
p3,clk=>
PROCESS(a,clk)
IF(p3='
)THEN--开关翻开时,默认26度
t1<
0010"
t2<
0110"
ELSIF(a='
IF(p1='
)THEN--判断"
温度+"
按键按下
IF(t1="
0011"
ELSIF(t2="
1001"
=t1+'
t2<
ELSEt2<
=t2+'
IF(p2='
温度-"
按键按下
IF(t2="
=t2-'
=t1-'
ELSEt1<
temp1<
=t1;
temp2<
=t2;
ENTITYfanIS--风速模块:
睡眠、低、中、高;
默认中挡;
睡眠模式在低挡和停顿之间循环
ENDENTITYfan;
ARCHITECTUREbehaveOFfanIS
PONENTcount6--调用计数器
PORT(a,clk,rst:
o:
ENDPONENTcount6;
SIGNALe:
STD_LOGIC_VECTOR(2DOWNTO0):
000"
--停顿000、睡眠001、抵挡010、中挡011、高挡100
SIGNALop:
SIGNALop1:
--其上升沿用于开启睡眠模式
SIGNALop2:
SIGNALrst1:
SIGNALrst2:
SIGNALchange:
SIGNALm:
--睡眠模式中使用,由于睡眠模式是循环模式,所以不设置置0
BEGIN--模式在按键操作下可循环滚动
rst1,b=>
rst2,clk=>
count6PORTMAP(a=>
op,rst=>
clk,o=>
change);
BEGIN
op1<
=op2;
)THEN--开关翻开时,默认中挡
e<
011"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 空调 控制器 设计