软件:Quartus
语言:Verilog
代码功能:
微波炉控制器
用芯片Altera Cyclone IV FPGA作为控制芯片,实现时间设置、温度设定、火力选择、声音提示,在硬件组成上,涉及到电源供电、按键输入、数码管显示、指示灯提示等。
由按键控制实现功能的转换,7个LED提示指示灯,4位LED数码管显示加热倒计时,3位LED数码管显示当前温度值,1位LED数码管显示当前火力档位。
各个按键的功能效果:
(1)暂停:在食物烹饪过程中,若按下该键,则停止食物烹饪,进入待机状态。
(2)时间设定:设置系统工作时间,按下该键,可以设置时间,每按一下增加30秒
(3)温度设定:设置加热的最高温度,按下该键,可以设置时间,每按一下增加10°C
(4)火力设定:设置系统工作的火力挡位,按下该键,可以在低火、中火、高火三个档位之中切换。
(5)烹调:快速设定当前烹饪时间和火力到适合烹调的值。
(6)烘烤:快速设定当前烹饪时间和火力到适合烘烤的值。
(7)解冻:快速设定当前烹饪时间和火力到适合解冻的值。
(8)开始/确认:在选择烹调、烘烤、解冻或者设置时间、设定温度、选择火力等烹饪参数后,按下此键,开始进行烹饪.
指示灯功能如下:
(1)完成提示:提示微波炉工作完成.该灯亮时,表示烹饪完成;
(2)意外报警:提示意外情况发生.该灯亮时,表示出现意外,微波炉暂停工作;
(3)解冻:该灯亮时,表示工作在解冻模式下;
(4)烘烤:该灯亮时,表示工作在烘烤模式下;
(5)烹调:该灯亮时,表示工作在烹调模式下;
(6)工作状态:指示微波炉处于工作状态,工作时灯亮,不工作时灯灭;
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 仿真文件(testbench)
6. 仿真图
整体仿真图
分频模块
控制模块
温度设置模块
时间设置模块
显示模块
部分代码展示:
//微波炉顶层模块 module?microwave_top( ???input????????clk,//时钟 ???input????????reset_key,//复位按键 ???input????????time_key,//设置时间 input????????temp_key,//设置温度 ???input????????fire_key,//设置火力 ???input????????start_key,//启动 ???input????????stop_key,//暂停 ???input????????key_1,//烹调 ???input????????key_2,//烘烤 ???input????????key_3,//解冻 ??? ???output???????bell,//结束提示(声音) output???????end_led???,//led完成 ???output???????alarm_led?,//led报警 output???????led_1?????,//led烹调 output???????led_2?????,//led烘烤 output???????led_3?????,//led解冻 output???????work_led??,//led工作状态 ???output?[7:0]?min_ten_HEX,//数码管显示分钟十位 ???output?[7:0]?min_one_HEX,//数码管显示分钟个位 ???output?[7:0]?sec_ten_HEX,//数码管显示分钟十位 ???output?[7:0]?sec_one_HEX,//数码管显示分钟个位 ???output?[7:0]?fire_HEX,//数码管显示火力指示 ???output?[7:0]?temp_h_HEX,//数码管显示温度百位 ???output?[7:0]?temp_t_HEX,//数码管显示温度十位 ???output?[7:0]?temp_o_HEX//数码管显示温度个位 ); ??? ???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) ); ????//状态控制模块 ???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),//烹调 ???.key_2(key_2),//烘烤 ???.key_3(key_3),//解冻 .end_led???(end_led),//led完成 ???.alarm_led?(alarm_led),//led报警 .led_1?????(led_1),//led烹调 .led_2?????(led_2),//led烘烤 .led_3?????(led_3),//led解冻 .work_led??(work_led)//led工作状态 ???); //时间控制模块 ???time_set?i_time_set( ???.clk(clk_div),? ???.reset_key(reset_key),? ???.key_1(key_1),//烹调 ???.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),//温度设置键 ???.?temp_h(temp_h),//温度百位 ???.?temp_t(temp_t),//温度十位 ???.?temp_o(temp_o)?//温度个位 );? ????//数码管显示模块 ???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),//数码管显示温度百位 ???.?temp_t_HEX(temp_t_HEX),//数码管显示温度十位 ???.?temp_o_HEX(temp_o_HEX)//数码管显示温度个位 ???); ??? endmodule
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=490