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

基于VHDL语言的洗衣机控制器设计VHDL代码Quartus仿真

07/04 08:11
344
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240116093342437.doc

共1个文件

名称:基于VHDL语言的洗衣机控制器设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

基于VHDL语言的洗衣机控制器设计

设计要求:

设计一个洗衣机洗涤程序控制器,控制洗衣机的电动机按下图所示的规律运转。

QQ图片20240116093211.png

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

演示视频:

设计文档:

洗衣机仿真

1.要求

2.工程文件

3.程序文件

4.程序编译

5.VWF文件

6.仿真图

部分代码展示:

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?RTL?OF?washing_machine?IS
???--定义中间信号
???SIGNAL?state???????????????:?STD_LOGIC_VECTOR(1?DOWNTO?0)?:=?"01";
???SIGNAL?washing_time????????:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";--预置洗衣时间12分钟
???SIGNAL?end_led_buf?????????:?STD_LOGIC?:=?'1';
???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_1s????????:?STD_LOGIC?:=?'0';
???SIGNAL?second_en???????????:?STD_LOGIC;
???SIGNAL?second_div_cnt??????:?STD_LOGIC_VECTOR(9?DOWNTO?0)?:=?"0000000000";
???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?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
?????????CASE?state?IS
????????????WHEN?"00"?=>--状态00,等待状态,若有启动信号则到状态01
???????????????IF?(start_key?=?'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?=?'1')?THEN
????????????washing_time?<=?"00001100";--?预置计时时间12分钟
?????????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;
--75秒为一个周期
PROCESS?(clk_in)
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????IF?(start_key?=?'1')?THEN
????????????second_cnt?<=?"00000000";
?????????ELSIF?(second_en?=?'1')?THEN
????????????IF?(second_cnt?>=?"01001010")?THEN--秒计时到74返回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=573

  • 2-240116093342437.doc
    下载

相关推荐