洗衣机控制电路VHDL代码Quartus仿真

这篇文章详细介绍了使用VHDL语言在Quartus软件中设计的洗衣机控制电路,包括正转、待机、反转状态控制,以及60秒计时和数码管显示功能的实现。通过状态机设计,电路周期性地切换操作模式并显示时间信息。
摘要由CSDN通过智能技术生成

名称:洗衣机控制电路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;
源代码

 扫描文章末尾的公众号二维码

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值