软件: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;
阅读全文
105