• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

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

07/01 16:03
710
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240113134I2419.doc

共1个文件

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

软件:Quartus

语言:VHDL

代码功能:

洗衣机控制电路

设计要求:

1、控制洗衣机实现正转,待机,反转三种状态并用三个LED显示

2、正转60秒,待机5秒,反转60秒,这个过程循环15次,直至循环次数为零时,蜂鸣器发声。

3、时间由数码管显示。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

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;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=558

  • 2-240113134I2419.doc
    下载

相关推荐