基于VHDL的空调控制器设计 联系客服

发布时间 : 星期六 文章基于VHDL的空调控制器设计更新完毕开始阅读435405e44793daef5ef7ba0d4a7302768f996f47

U1: switch PORT MAP(a=>switchin,b=>swb,c=>swa,clk=>clk1,d=>sigBCD7_1); U2: control PORT MAP(a=>switchin,b=>swc,clk=>clk1,c=>swb); U3: fan PORT MAP(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: temp PORT MAP(a=>swa,b=>tempup,c=>tempdown,clk=>clk1,temp1=>sigBCD7_6,temp2=>sigBCD7_7); U5: timer PORT MAP(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: mode PORT MAP(b=>swa,c=>modeset,clk=>clk1,cool=>cools,heat=>heats,dry=>drys,cool1=>sigBCD7_12,heat1=>sigBCD7_13,dry1=>sigBCD7_14);

U7: BCD7 PORT MAP(a=>swa,b=>sigBCD7_1,q=>switchstate); U8: BCD7 PORT MAP(a=>swa,b=>sigBCD7_2,q=>sleepstate); U9: BCD7 PORT MAP(a=>swa,b=>sigBCD7_3,q=>distate);

U10: BCD7 PORT MAP(a=>swa,b=>sigBCD7_4,q=>zhongstate); U11: BCD7 PORT MAP(a=>swa,b=>sigBCD7_5,q=>gaostate); U12: BCD7 PORT MAP(a=>swa,b=>sigBCD7_6,q=>tempd); U13: BCD7 PORT MAP(a=>swa,b=>sigBCD7_7,q=>temps); U14: BCD7 PORT MAP(a=>swa,b=>sigBCD7_8,q=>hdstate); U15: BCD7 PORT MAP(a=>swa,b=>sigBCD7_9,q=>hsstate); U16: BCD7 PORT MAP(a=>swa,b=>sigBCD7_10,q=>tdstate); U17: BCD7 PORT MAP(a=>swa,b=>sigBCD7_11,q=>tsstate); U18: BCD7 PORT MAP(a=>swa,b=>sigBCD7_12,q=>coolstate); U19: BCD7 PORT MAP(a=>swa,b=>sigBCD7_13,q=>heatstate); U20: BCD7 PORT MAP(a=>swa,b=>sigBCD7_14,q=>drystate); PROCESS(clk1) BEGIN

END PROCESS;

END ARCHITECTURE behave;

2)单脉冲模块

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY pulse IS --单脉冲模块 PORT(a,clk: IN STD_LOGIC; b: OUT STD_LOGIC); END ENTITY pulse;

8

ARCHITECTURE behave OF pulse IS SIGNAL d:STD_LOGIC:='0'; SIGNAL f:STD_LOGIC:='0';

SIGNAL g:STD_LOGIC:='0'; --确保经过第一个clk上升沿时输出1 SIGNAL h:STD_LOGIC:='0'; --同上 BEGIN

PROCESS(a,clk) BEGIN

IF(clk'EVENT AND clk='1')THEN IF(f='1')THEN g<='1';

ELSE g<='0'; END IF; END IF;

END PROCESS; PROCESS(a,clk) BEGIN

IF(clk'EVENT AND clk='0')THEN IF(a='1')THEN IF(f='1')THEN IF(g='1')THEN d<='1'; ELSE d<='0'; END IF; ELSE d<='1'; END IF;

ELSE d<='0'; --a为0时,重置此单脉冲发生器 END IF; END IF;

END PROCESS; PROCESS(d) BEGIN IF(a='1')THEN IF(d='1')THEN f<='0';

ELSE f<='1'; END IF; ELSE f<='0'; END IF; b<=f;

END PROCESS;

END ARCHITECTURE behave;

9

3)开关模块

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY switch IS --开关模块

PORT(a,b,clk: IN STD_LOGIC; --b受定时模块的控制,时间减为0时,关闭开关

c: OUT STD_LOGIC;

d: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --输送给数码管 END ENTITY switch;

ARCHITECTURE behave OF switch IS

COMPONENT pulse --调用单脉冲模块 PORT(a,clk: IN STD_LOGIC; b: OUT STD_LOGIC); END COMPONENT pulse; SIGNAL p1 : STD_LOGIC:='0'; SIGNAL p2 : STD_LOGIC:='0'; BEGIN

U1: pulse PORT MAP(a=>a,b=>p1,clk=>clk); U2: pulse PORT MAP(a=>b,b=>p2,clk=>clk); PROCESS(a,b,clk) BEGIN

IF(clk'EVENT AND clk='1')THEN IF(p1='1')THEN --空调开关打开 c<='1';d<=\ END IF;

IF(p2='1')THEN --时间减为0时,定时模块返回1,关闭开关 c<='0';d<=\ END IF; END IF; END PROCESS;

END ARCHITECTURE behave;

4)开关控制模块

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY control IS --开关控制模块 PORT(a,b,clk: IN STD_LOGIC; c: OUT STD_LOGIC); END ENTITY control;

ARCHITECTURE behave OF control IS

COMPONENT pulse --调用单脉冲模块

10

PORT(a,clk: IN STD_LOGIC; b: OUT STD_LOGIC); END COMPONENT pulse; SIGNAL p1 : STD_LOGIC:='0'; SIGNAL p2 : STD_LOGIC:='0'; BEGIN

U1: pulse PORT MAP(a=>a,b=>p1,clk=>clk); U2: pulse PORT MAP(a=>b,b=>p2,clk=>clk); PROCESS(a,b,clk) BEGIN

IF(clk'EVENT AND clk='1')THEN IF(p1='1')THEN --空调开关打开 c<='0'; END IF;

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

END ARCHITECTURE behave;

5)温度模块

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL ;

ENTITY temp IS --温度模块,最高30度,最低16度,默认26度 PORT(a,b,c,clk: IN STD_LOGIC; --a控制开关,b提高1度,c降低1度 temp1,temp2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ENTITY temp;

ARCHITECTURE behave OF temp IS

COMPONENT pulse --调用单脉冲模块 PORT(a,clk: IN STD_LOGIC; b: OUT STD_LOGIC); END COMPONENT pulse;

SIGNAL t1 : STD_LOGIC_VECTOR(3 DOWNTO 0):=\SIGNAL t2 : STD_LOGIC_VECTOR(3 DOWNTO 0):=\SIGNAL p1 : STD_LOGIC:='0'; SIGNAL p2 : STD_LOGIC:='0'; SIGNAL p3 : STD_LOGIC:='0'; BEGIN

U1: pulse PORT MAP(a=>b,b=>p1,clk=>clk); U2: pulse PORT MAP(a=>c,b=>p2,clk=>clk);

11