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

简单洗衣机控制器设计VHDL代码Quartus仿真

07/03 09:20
369
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240116091S44B.doc

共1个文件

名称:简单洗衣机控制器设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

洗衣机控制器设计

要求:

(1)设计一个电子定时器,控制洗衣机作如下运转;定时启动→正转20秒→暂停10秒→反转20秒→暂停10秒→定时未到回到“正转20秒→暂停10秒→.....定时到则停止。

(2)洗涤过程由“启动”信号开始,若定时到,需发出提示音响;

(3)用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,直到时间到停机,用三只LED灯表示“正转”,“反转”?“暂停”三个状态。

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

演示视频:

设计文档:

洗衣机仿真

1.要求

2.程序文件

3.程序运行

4.管脚设置

5.仿真

部分代码展示:

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;--启动按键
??????
??????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)?:=?"01";
???
???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)?:=?"00001111";--预置洗衣时间15分钟
???
???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;
???
???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;
???
???PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(state?=?"00")?THEN
????????????end_led_buf?<=?'1';--状态00,提示洗衣结束
?????????ELSE
????????????end_led_buf?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???end_led?<=?end_led_buf;
???
???PROCESS?(clk_in)--设输入clk为50Hz,分频到1Hz
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(second_div_cnt?>=?"0000110010")?THEN--50
????????????second_div_cnt?<=?"0000000000";
????????????second_en_1s?<=?'1';--1S脉冲信号
?????????ELSE
????????????second_div_cnt?<=?second_div_cnt?+?"0000000001";
????????????second_en_1s?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(second_cnt?=?"00111011")?THEN--秒计时到59,生产分计时脉冲
????????????min_en?<=?'1';
?????????ELSE
????????????min_en?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????min_en_buf?<=?min_en;
??????END?IF;
???END?PROCESS;
???
???min_en_rise?<=?min_en?AND?(NOT(min_en_buf));
???PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(start_key_rise?=?'1')?THEN
????????????washing_time?<=?"00001111";--?预置计时时间15分钟
?????????ELSIF?(min_en_rise?=?'1')?THEN--分钟脉冲到了,分钟时间减1
????????????IF?(washing_time?>?"00000000")?THEN
???????????????washing_time?<=?washing_time?-?"00000001";
????????????ELSE
???????????????washing_time?<=?"00000000";
????????????END?IF;
?????????ELSE
????????????washing_time?<=?washing_time;
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???second_en?<=?second_en_1s;
--???second_en?<=?second_en_1s;
PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(start_key_rise?=?'1')?THEN
????????????second_cnt?<=?"00000000";
?????????ELSIF?(second_en?=?'1')?THEN
????????????IF?(second_cnt?>=?"00111011")?THEN--秒计时到59返回0
???????????????second_cnt?<=?"00000000";
????????????ELSE
???????????????second_cnt?<=?second_cnt?+?"00000001";
????????????END?IF;
?????????ELSE
????????????second_cnt?<=?second_cnt;
?????????END?IF;
??????END?IF;
???END?PROCESS;

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

  • 2-240116091S44B.doc
    下载

相关推荐