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

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

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

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
    下载

相关推荐