1、设置两个信号用于向洗衣机传送着两个消息,识别从暂停状态返回后洗衣机应该进入的状态和模式。 程序分成倒计时模块、按键控制模块、数码管显示模块、发光二极管显示模块、分频模块、防抖动模块以及状态机模块组成。最后由一个总程序调用。三设计方案1、状态框图2、状态转移图3、源程序及说明l电路主模块wash.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity wash is -端口定义port( clk : in std_logic; switch : pause : lights : out st
2、d_logic_vector(3 downto 0); sell : out std_logic_vector(1 downto 0); seg : out std_logic_vector(6 downto 0);end wash;architecture behave of wash is -子程序调用component count50 isport( clkin : clkout : out std_logic);end component;component count25 iscomponent statement is t_xidi : t_piaoxi : t_tuoshui :
3、 command : out std_logic_vector(2 downto 0); present_state : out std_logic_vector(2 downto 0);component time isport( clk_1Hz : in std_logic_vector(2 downto 0); out std_logic; sec_l,sec_h : out std_logic_vector(3 downto 0);component key is keyin : keyout :component display isport( clk_100Hz : in std_
4、logic_vector(3 downto 0);component lightwink is lightsin : selin : in std_logic_vector(1 downto 0); segin : in std_logic_vector(6 downto 0);signal clk_10000Hz,clk_100Hz, clk_2Hz,clk_1Hz : std_logic;signal time_xidi,time_piaoxi,time_tuoshui :signal switch_n,pause_n :signal present_state : std_logic_v
5、ector(2 downto 0);signal command :signal sec_low,sec_high : std_logic_vector(3 downto 0);signal lights4,lightsout :signal sell2,selout : std_logic_vector(1 downto 0);signal seg7,segout : std_logic_vector(6 downto 0);begin -端口相应信号替代link1 : count50 port map (clkin = clk, clkout = clk_10000Hz);link2 :
6、clk_10000Hz, clkout = clk_100Hz);link3 : clk_100Hz, clkout = clk_1Hz);link4 : count25 port map (clkin = clk_2Hz);link5 : key port map (clk = clk_100Hz, keyin = switch, keyout = switch_n);link6 : pause, keyout = pause_n);link7 : statement port map (clk = clk_2Hz, switch = switch_n, pause = pause_n, t
7、_xidi = time_xidi, t_piaoxi = time_piaoxi, t_tuoshui = time_tuoshui, command = command, present_state = present_state);link8 : time port map (clk_1Hz = clk_1Hz, present_state = present_state, command = command, t_xidi = time_tuoshui, sec_l = sec_low, sec_h = sec_high);link9 : display port map (clk_1
8、00Hz = clk_100Hz, sec_l = sec_high, command = present_state, lights = lights4, sell = sell2, seg = seg7);link10 : lightwink port map (clk_1Hz = present_state, lightsin = lights4, selin = sell2, segin = seg7, lights = lightsout, sell = selout, seg = segout);processbegin lights = lightsout; sell = sel
9、out; seg = segout;end process;end;分频模块count25.vhd和count50.vhdcount50entity count50 isend count50;architecture a of count50 is -端口的定义signal clk1 : process(clkin) variable t : integer range 0 to 49; begin if(clkinevent and clkin=1)then if(t=49)then t := 0; clk1 = not clk1; -当t等于49时输出信号翻转一次实现100分频 else
10、 t := t+1; -如果t不等于49则外部时钟变化一次t加1 end if; clkout = clk1; end process;仿真波形(count 50)count 25entity count25 is library ieee;end count25;architecture a of count25 is integer range 0 to 24; if(t=24)then -按照时钟,循环计数 -每记25个数,输出信号取反仿真波形 (count 25)防抖电路 key.vhdentity key is -输入的按键信号 -输出的按键信号end key;architectur
11、e a of key issignal cp : process(clk,keyin) integer range 0 to 1; if(clkevent and clk= if(keyin= if(t=1)then cp = ; -连续两次时钟,输入信号都为1,则输出为1 else -计数0 keyout input1 :input2 := 2; -洗涤时间20s010= 5;= 1; -漂洗时间15s011 -脱水时间10s100 -漂洗和脱水时间25s101= 4; -洗涤、漂洗和脱水总时间45s when others = end case; case present_state is -当前状态输入000 state = stop;= switch_mode;= xidi;= piaoxi;= tuoshui; if (clk_1Hzevent and clk_1Hz= if (state=xidi or state=piaoxi or state=tuoshui)then -处于洗衣状态 if (input1num1)then -num1、num2
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1