• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

簡單洗衣機控制器設計VHDL代碼Quartus仿真

7小時前
97
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

2-240116091S44B.doc

共1個文件

名稱:簡單洗衣機控制器設計VHDL代碼Quartus仿真

軟件:Quartus

語言:VHDL

代碼功能:

洗衣機控制器設計

要求:

(1)設計一個電子定時器,控制洗衣機作如下運轉;定時啟動→正轉20秒→暫停10秒→反轉20秒→暫停10秒→定時未到回到“正轉20秒→暫停10秒→.....定時到則停止。

(2)洗滌過程由“啟動”信號開始,若定時到,需發(fā)出提示音響;

(3)用兩個數(shù)碼管顯示洗滌的預置時間(分鐘數(shù)),按倒計時方式對洗滌過程作計時顯示,直到時間到停機,用三只LED燈表示“正轉”,“反轉”?“暫?!比齻€狀態(tài)。

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);--數(shù)碼管1
??????dig_led2???:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管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)--狀態(tài)機
???BEGIN
??????IF?(clk_in'EVENT?AND?clk_in?=?'1')?THEN
?????????CASE?state?IS
????????????WHEN?"00"?=>--狀態(tài)00,等待狀態(tài),若有啟動信號則到狀態(tài)01
???????????????IF?(start_key_rise?=?'1')?THEN
??????????????????state?<=?"01";
???????????????ELSE
??????????????????state?<=?"00";
???????????????END?IF;
????????????WHEN?"01"?=>--狀態(tài)01,倒計時狀態(tài),直到計時到0,到狀態(tài)01
???????????????IF?(washing_time?>?"00000000")?THEN
??????????????????state?<=?"01";
???????????????ELSE
??????????????????state?<=?"10";
???????????????END?IF;
????????????WHEN?"10"?=>--結束狀態(tài),返回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';--狀態(tài)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,生產(chǎn)分計時脈沖
????????????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
    下載

相關推薦