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

全自动洗衣机控制器设计VHDL代码Quartus仿真

04/15 16:56
105
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24112619235O52.doc

共1个文件

名称:全自动洗衣机控制器设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

全自动洗衣机控制器

1.洗衣机控制器可以驱动洗衣机进行洗涤、漂洗和供干;并能点亮相应功能指示灯,洗涤30分钟 ,漂洗10分钟,烘干15分钟,全部流程完成后报警提示

2.洗衣机可实现自清洗功能,自清洗模式与正常模式分开,并有自洗指示灯

3.计时显示用两位数码管显示数字即可,不需要显示“分钟”字样

 

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

 

演示视频:

设计文档:

1. 工程文件

 

2. 程序文件

 

3. 程序编译

 

4. 仿真文件

 

 

5. 仿真图

整体仿真图

 

按下start_key启动洗衣机流程,一共55分钟,洗涤30分钟,漂洗10分钟,烘干15分钟

 

洗涤30分钟结束切换到漂洗,mode_led是模式指示灯,由[0]切换到[1]亮

 

 

 

 

 

 

漂洗10分钟结束切换到烘干,mode_led是模式指示灯,由[1]切换到[2]亮

 

流程结束,bell信号变为高电平,报警提示

 

按下self_wash_key自清洗,同时self_wash_led灯亮

 

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
-- 1.洗衣机控制器可以驱动洗衣机进行洗涤、漂洗和供干;并能点亮相应功能指示灯,洗涤30分钟 ,漂洗10分钟,烘干15分钟,全部流程完成后报警提示
-- 2.洗衣机可实现自清洗功能,自清洗模式与正常模式分开,并有自洗指示灯
-- 3.计时显示用两位数码管显示数字即可,不需要显示“分钟”字样
ENTITY washmachine IS
   PORT (
      clk            : IN STD_LOGIC;
      start_key      : IN STD_LOGIC;--启动按键
      self_wash_key  : IN STD_LOGIC;--自清洗按键
      self_wash_led  : OUT STD_LOGIC;--自清洗led
      bell           : OUT STD_LOGIC;--报警提示
      mode_led       : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--模式功能指示灯
      min_ten_HEX    : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管十位
      min_one_HEX    : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管个位
   );
END washmachine;
ARCHITECTURE behave OF washmachine IS
     
   TYPE State_type IS (s_idle,s_self_wash,s_start,s_washing,s_rinsing,s_drying,s_end);  -- 定义状态
   SIGNAL State : State_Type:=s_idle;    -- 创建信号
   SIGNAL min_ten_display : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL min_one_display : STD_LOGIC_VECTOR(7 DOWNTO 0);
   
   SIGNAL self_wash_cnt   : STD_LOGIC_VECTOR(11 DOWNTO 0) := "000000000000";
   SIGNAL end_cnt         : STD_LOGIC_VECTOR(11 DOWNTO 0) := "000000000000";
   
   SIGNAL minute_ten      : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0101";
   SIGNAL minute_one      : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0101";
   SIGNAL second_cnt      : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
   
   SIGNAL selfwash_led    : STD_LOGIC := \'0\';
   
   SIGNAL bell_buf        : STD_LOGIC := \'0\';
   
   SIGNAL mode_led_buf    : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000";
BEGIN
   min_ten_HEX <= min_ten_display;
   min_one_HEX <= min_one_display;
   
   --状态机控制
   PROCESS (clk)
   BEGIN
      IF (clk\'EVENT AND clk = \'1\') THEN
         CASE state IS
            WHEN s_idle =>--空闲状态
               IF (self_wash_key = \'1\') THEN--按下自清洗按键
                  state <= s_self_wash;
               ELSIF (start_key = \'1\') THEN--按下启动按键
                  state --自清洗
               IF (self_wash_cnt >= "001001011000") THEN--自清洗时间10分钟
                  state <= s_idle;
               ELSE
                  state --启动
               state --洗涤
               IF (minute_ten = "0010" AND minute_one = "0101" AND second_cnt = "00000000") THEN--流程一共55分钟,洗涤30分钟
                  state <= s_rinsing;
               ELSE
                  state --漂洗
               IF (minute_ten = "0001" AND minute_one = "0101" AND second_cnt = "00000000") THEN--漂洗10分钟
                  state <= s_drying;
               ELSE
                  state --烘干
               IF (minute_ten = "0000" AND minute_one = "0000" AND second_cnt = "00000000") THEN--烘干15分钟
                  state <= s_end;
               ELSE
                  state --结束
               IF (end_cnt >= "000000011110") THEN--报警时间30s
                  state <= s_idle;
               ELSE
                  state 
         END CASE;
      END IF;
   END PROCESS;

 

 

  • 2-24112619235O52.doc
    下载

相关推荐