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

2种模式洗衣机控制器设计VHDL代码Quartus仿真

08/19 09:15
562
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240Z41A6003B.doc

共1个文件

名称:2种模式洗衣机控制器设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

2种模式洗衣机控制器

1、具有2种模式,正常洗涤和轻柔洗涤模式,通过led灯指示

2、可以通过按键设置时间,具有启动按键

3、开始后倒计时显示时间,led指示正转、反转、暂停

4、洗衣结束报警提示

5、正常洗涤模式下,正转20秒,暂停10秒,反转20秒,再暂停10秒,如此循环

6、轻柔洗涤模式下,正转25秒,暂停5秒,反转25秒,再暂停5秒,如此循环

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. 仿真文件

5. 仿真图

整体仿真图

模式设置为,10代表轻柔洗涤,时间设置为5分钟,启动

轻柔洗涤,电机led[2:0]表示,正转25s,暂停5s,反转25s,暂停5s。倒计时结束后end_led拉高提示。

设置模式为01,代表正常洗涤,时间设置为5分钟,启动

正常洗涤电机led[2:0]表示,正转20s,暂停10s,反转20s,暂停10s。

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
ENTITY washing_machine IS
   PORT (
      clk_in     : IN STD_LOGIC;--50Hz
      start_key  : IN STD_LOGIC;--启动按键
set_time_key    : IN STD_LOGIC;--设置时间按键
set_mode_key    : IN STD_LOGIC;--设置模式按键--2种模式,正常洗涤和轻柔洗涤
      mode_led   : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);--模式指示灯
      led        : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--正转,反转,暂停
      end_led    : OUT STD_LOGIC;--洗衣结束报警信号
      
      dig_led1    : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管1
      dig_led2   : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管2
   );
END washing_machine;
ARCHITECTURE trans OF washing_machine IS
   
   SIGNAL state               : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
   SIGNAL mode_flag         : STD_LOGIC_VECTOR(1 DOWNTO 0) := "01";--01和10代表正常洗涤和轻柔洗涤
   SIGNAL start_key_rise      : STD_LOGIC;
   SIGNAL start_key_1         : STD_LOGIC := '0';
   SIGNAL start_key_2         : STD_LOGIC := '0';
   
   SIGNAL washing_time        : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";--预置洗衣时间
SIGNAL washing_time_set        : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";--按键设置时间
   
   SIGNAL end_led_buf         : STD_LOGIC := '1';
   
   SIGNAL end_led_buf2        : STD_LOGIC := '1';
   
   SIGNAL end_led_rise        : STD_LOGIC;
   
   SIGNAL bell_cnt            : STD_LOGIC_VECTOR(27 DOWNTO 0) := "0101111101011110000100000000";
   
   SIGNAL bell_flag           : STD_LOGIC;
   
   SIGNAL bell_clk            : STD_LOGIC := '0';
   SIGNAL bell_clk_cnt        : STD_LOGIC_VECTOR(16 DOWNTO 0) := "00000000000000000";
   
   SIGNAL second_cnt          : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
   SIGNAL min_en              : STD_LOGIC := '0';
   
   SIGNAL min_en_buf          : STD_LOGIC := '0';
   
   SIGNAL min_en_rise         : STD_LOGIC;
   
   SIGNAL second_en_fast      : STD_LOGIC := '0';
   SIGNAL second_en_1s        : STD_LOGIC := '0';
   SIGNAL second_en           : STD_LOGIC;
   
   SIGNAL second_div_cnt_fast : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
   
   SIGNAL second_div_cnt      : STD_LOGIC_VECTOR(9 DOWNTO 0) := "0000000000";
   
   SIGNAL jishu               : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000";
   
   SIGNAL shang               : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL yushu               : STD_LOGIC_VECTOR(3 DOWNTO 0);
   
   SIGNAL state_div           : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00";
   SIGNAL data_buf            : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
   SIGNAL shang_buf           : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
   SIGNAL yushu_buf           : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000";
   
   SIGNAL display_data        : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000";
   
   SIGNAL duanxuan2             : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
   SIGNAL duanxuan1            : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
BEGIN
   PROCESS (clk_in)
   BEGIN
      IF (clk_in'EVENT AND clk_in = '1') THEN
         start_key_1 <= start_key;
         start_key_2 <= start_key_1;-- 启动按钮寄存器缓存
      END IF;
   END PROCESS;
--设置模式
   PROCESS (set_mode_key)
   BEGIN
      IF (set_mode_key'EVENT AND set_mode_key = '1') THEN
         IF(mode_flag="01")THEN----01和10代表正常洗涤和轻柔洗涤
mode_flag<="10";
ELSIF(mode_flag="10")THEN----01和10代表正常洗涤和轻柔洗涤
mode_flag<="01";
END IF;
      END IF;
   END PROCESS;
mode_led<=mode_flag;
   
   start_key_rise <= start_key_1 AND (NOT(start_key_2));--chenck the rise EVENT of start_key--start_key上升沿
   
   PROCESS (clk_in)--状态机
   BEGIN
      IF (clk_in'EVENT AND clk_in = '1') THEN
         CASE state IS
            WHEN "00" =>--状态00,等待状态,若有启动信号则到状态01
               IF (start_key_rise = '1') THEN
                  state <= "01";
               ELSE
                  state <= "00";
               END IF;
            WHEN "01" =>--状态01,倒计时状态,直到计时到0,到状态01
               IF (washing_time > "00000000") THEN
                  state <= "01";
               ELSE
                  state <= "10";
               END IF;
            WHEN "10" =>--结束状态,返回00
               state <= "00";
            WHEN OTHERS =>
               state <= "00";
         END CASE;
      END IF;
   END PROCESS;

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

  • 2-240Z41A6003B.doc
    下载

相关推荐