軟件:Quartus
語言:Verilog
代碼功能:
微波爐控制器
用芯片Altera Cyclone IV FPGA作為控制芯片,實現(xiàn)時間設(shè)置、溫度設(shè)定、火力選擇、聲音提示,在硬件組成上,涉及到電源供電、按鍵輸入、數(shù)碼管顯示、指示燈提示等。
由按鍵控制實現(xiàn)功能的轉(zhuǎn)換,7個LED提示指示燈,4位LED數(shù)碼管顯示加熱倒計時,3位LED數(shù)碼管顯示當(dāng)前溫度值,1位LED數(shù)碼管顯示當(dāng)前火力檔位。
各個按鍵的功能效果:
(1)暫停:在食物烹飪過程中,若按下該鍵,則停止食物烹飪,進入待機狀態(tài)。
(2)時間設(shè)定:設(shè)置系統(tǒng)工作時間,按下該鍵,可以設(shè)置時間,每按一下增加30秒
(3)溫度設(shè)定:設(shè)置加熱的最高溫度,按下該鍵,可以設(shè)置時間,每按一下增加10°C
(4)火力設(shè)定:設(shè)置系統(tǒng)工作的火力擋位,按下該鍵,可以在低火、中火、高火三個檔位之中切換。
(5)烹調(diào):快速設(shè)定當(dāng)前烹飪時間和火力到適合烹調(diào)的值。
(6)烘烤:快速設(shè)定當(dāng)前烹飪時間和火力到適合烘烤的值。
(7)解凍:快速設(shè)定當(dāng)前烹飪時間和火力到適合解凍的值。
(8)開始/確認:在選擇烹調(diào)、烘烤、解凍或者設(shè)置時間、設(shè)定溫度、選擇火力等烹飪參數(shù)后,按下此鍵,開始進行烹飪.
指示燈功能如下:
(1)完成提示:提示微波爐工作完成.該燈亮?xí)r,表示烹飪完成;
(2)意外報警:提示意外情況發(fā)生.該燈亮?xí)r,表示出現(xiàn)意外,微波爐暫停工作;
(3)解凍:該燈亮?xí)r,表示工作在解凍模式下;
(4)烘烤:該燈亮?xí)r,表示工作在烘烤模式下;
(5)烹調(diào):該燈亮?xí)r,表示工作在烹調(diào)模式下;
(6)工作狀態(tài):指示微波爐處于工作狀態(tài),工作時燈亮,不工作時燈滅;
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. 仿真文件(testbench)
6. 仿真圖
整體仿真圖
分頻模塊
控制模塊
溫度設(shè)置模塊
時間設(shè)置模塊
顯示模塊
部分代碼展示:
//微波爐頂層模塊 module?microwave_top( ???input????????clk,//時鐘 ???input????????reset_key,//復(fù)位按鍵 ???input????????time_key,//設(shè)置時間 input????????temp_key,//設(shè)置溫度 ???input????????fire_key,//設(shè)置火力 ???input????????start_key,//啟動 ???input????????stop_key,//暫停 ???input????????key_1,//烹調(diào) ???input????????key_2,//烘烤 ???input????????key_3,//解凍 ??? ???output???????bell,//結(jié)束提示(聲音) output???????end_led???,//led完成 ???output???????alarm_led?,//led報警 output???????led_1?????,//led烹調(diào) output???????led_2?????,//led烘烤 output???????led_3?????,//led解凍 output???????work_led??,//led工作狀態(tài) ???output?[7:0]?min_ten_HEX,//數(shù)碼管顯示分鐘十位 ???output?[7:0]?min_one_HEX,//數(shù)碼管顯示分鐘個位 ???output?[7:0]?sec_ten_HEX,//數(shù)碼管顯示分鐘十位 ???output?[7:0]?sec_one_HEX,//數(shù)碼管顯示分鐘個位 ???output?[7:0]?fire_HEX,//數(shù)碼管顯示火力指示 ???output?[7:0]?temp_h_HEX,//數(shù)碼管顯示溫度百位 ???output?[7:0]?temp_t_HEX,//數(shù)碼管顯示溫度十位 ???output?[7:0]?temp_o_HEX//數(shù)碼管顯示溫度個位 ); ??? ???wire?[2:0]???fire_led;//火力指示燈? ???wire?[2:0]???state_out; ???wire?[3:0]???minute_ten_display; ???wire?[3:0]???minute_one_display; ???wire?[3:0]???second_ten_display; ???wire?[3:0]???second_one_display; ???wire?????????clk_div;//1Hz ???wire?[3:0]?temp_h;//溫度百位 ???wire?[3:0]?temp_t;//溫度十位 ???wire?[3:0]?temp_o;?//溫度個位 //分頻模塊 div_clk?i_div_clk( .clk????(clk),? .clk_1Hz(clk_div) ); ????//狀態(tài)控制模塊 ???state_ctrl?i_state_ctrl( ???.clk(clk_div),? ???.reset_key(reset_key),? ???.start_key(start_key),? ???.stop_key(stop_key),? ???.minute_ten(minute_ten_display),? ???.minute_one(minute_one_display),? ???.second_ten(second_ten_display),? ???.second_one(second_one_display),? ???.bell(bell),? ???.state_out(state_out), ???.fire_key(fire_key),? ???.fire_led(fire_led), ???.key_1(key_1),//烹調(diào) ???.key_2(key_2),//烘烤 ???.key_3(key_3),//解凍 .end_led???(end_led),//led完成 ???.alarm_led?(alarm_led),//led報警 .led_1?????(led_1),//led烹調(diào) .led_2?????(led_2),//led烘烤 .led_3?????(led_3),//led解凍 .work_led??(work_led)//led工作狀態(tài) ???); //時間控制模塊 ???time_set?i_time_set( ???.clk(clk_div),? ???.reset_key(reset_key),? ???.key_1(key_1),//烹調(diào) ???.key_2(key_2),//烘烤 ???.key_3(key_3),//解凍 ???.time_key(time_key),? ???.state_out(state_out),? ???.minute_ten_display(minute_ten_display),? ???.minute_one_display(minute_one_display),? ???.second_ten_display(second_ten_display),? ???.second_one_display(second_one_display) ???); //溫度控制模塊 temp_set?i_temp_set( ???.?clk??????(clk_div), ???.?reset_key(reset_key), ???.?temp_key?(temp_key),//溫度設(shè)置鍵 ???.?temp_h(temp_h),//溫度百位 ???.?temp_t(temp_t),//溫度十位 ???.?temp_o(temp_o)?//溫度個位 );? ????//數(shù)碼管顯示模塊 ???display?i_display( ???.?temp_h(temp_h),//溫度百位 ???.?temp_t(temp_t),//溫度十位 ???.?temp_o(temp_o),?//溫度個位 .?fire_led(fire_led), ???.minute_ten_display(minute_ten_display),? ???.minute_one_display(minute_one_display),? ???.second_ten_display(second_ten_display),? ???.second_one_display(second_one_display),? ???.min_ten_HEX(min_ten_HEX),? ???.min_one_HEX(min_one_HEX),? ???.sec_ten_HEX(sec_ten_HEX),? ???.sec_one_HEX(sec_one_HEX), .?fire_HEX(fire_HEX), ???.?temp_h_HEX(temp_h_HEX),//數(shù)碼管顯示溫度百位 ???.?temp_t_HEX(temp_t_HEX),//數(shù)碼管顯示溫度十位 ???.?temp_o_HEX(temp_o_HEX)//數(shù)碼管顯示溫度個位 ???); ??? endmodule
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=490