名称: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
562