名称:洗衣机控制电路VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
洗衣机控制电路
设计要求:
1、控制洗衣机实现正转,待机,反转三种状态并用三个LED显示。
2、正转60秒,待机5秒,反转60秒,这个过程循环15次,直至循环次数为零时,蜂鸣器发声。
3、时间由数码管显示。
1.工程文件
2.程序文件
3.程序编译
4.仿真图
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --洗衣机控制电路 ENTITY wash IS PORT ( clk : IN STD_LOGIC;--时钟1Hz rst_p : IN STD_LOGIC;--复位 start_p : IN STD_LOGIC;--开始 led_Z : OUT STD_LOGIC;--正转 led_D : OUT STD_LOGIC;--待机 led_F : OUT STD_LOGIC;--反转 beep : OUT STD_LOGIC;--蜂鸣器 HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管-分钟十位 HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --数码管-分钟个位 ); END wash; ARCHITECTURE RTL OF wash IS --定义状态 TYPE state_type IS ( s_idle , s_start , s_ledZ , s_ledD , s_ledF , s_end ); SIGNAL state : state_type; SIGNAL cnt_Z : STD_LOGIC_VECTOR(5 DOWNTO 0) := "000000"; SIGNAL cnt_D : STD_LOGIC_VECTOR(5 DOWNTO 0) := "000000"; SIGNAL cnt_F : STD_LOGIC_VECTOR(5 DOWNTO 0) := "000000"; SIGNAL time_cnt : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00000" ; SIGNAL time_ten : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00000" ; SIGNAL time_one : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00000" ; BEGIN --正转时间计数 PROCESS (clk, rst_p) BEGIN IF (rst_p = '1') THEN cnt_Z <= "000000";--复位 ELSIF (clk'EVENT AND clk = '1') THEN IF (state = s_ledZ) THEN--正转状态 cnt_Z <= cnt_Z + "000001";--计数 ELSE cnt_Z <= "000000";--清零 END IF; END IF; END PROCESS; --待机时间计数 PROCESS (clk, rst_p) BEGIN IF (rst_p = '1') THEN cnt_D <= "000000";--复位 ELSIF (clk'EVENT AND clk = '1') THEN IF (state = s_ledD) THEN--待机状态 cnt_D <= cnt_D + "000001";--计数 ELSE cnt_D <= "000000";--清零 END IF; END IF; END PROCESS; --反转时间计数 PROCESS (clk, rst_p) BEGIN IF (rst_p = '1') THEN cnt_F <= "000000";--复位 ELSIF (clk'EVENT AND clk = '1') THEN IF (state = s_ledF) THEN--反转状态 cnt_F <= cnt_F + "000001";--计数 ELSE cnt_F <= "000000";--清零 END IF; END IF; END PROCESS; --状态机控制模块 PROCESS (clk, rst_p) BEGIN IF (rst_p = '1') THEN state <= s_idle;--复位 ELSIF (clk'EVENT AND clk = '1') THEN CASE state IS WHEN s_idle =>--空闲状态 IF (start_p = '1') THEN--开始按键 state <= s_start; END IF; WHEN s_start =>--开始状态 state <= s_ledZ; WHEN s_ledZ =>--正转状态 IF (time_cnt = "00000") THEN--时间倒计时结束 state <= s_end; ELSIF (cnt_Z = "111100") THEN--计数到60s state <= s_ledD; END IF; WHEN s_ledD =>--待机状态 IF (cnt_D = "000101") THEN--计数到5s state <= s_ledF; END IF; WHEN s_ledF =>--反转状态 IF (time_cnt = "00000") THEN--时间倒计时结束 state <= s_end; ELSIF (cnt_F = "111100") THEN--计数到60s state <= s_ledZ; END IF; WHEN s_end =>--结束状态 IF (start_p = '1') THEN--开始按键 state <= s_start; END IF; WHEN OTHERS => END CASE; END IF; END PROCESS;
源代码
扫描文章末尾的公众号二维码