名称:洗衣机控制器设计Verilog代码Quartus? 远程云端平台
软件:Quartus
语言:Verilog
代码功能:
洗衣机控制器设计要求
1.设计一个电子定时器,控制洗衣机作如下运转定时启动→正转20秒→暂停10秒→反转20秒→暂停10秒,每个循环1分钟;
2.按正计时方式用两个数码管显示正转、暂停、反转时间,同时用三只LED灯表示“正转”反转”、“暂停”三个状态;
3.用两个数码管显示洗涤的预置时间(分钟数),按倒计时方式对洗涤过程作计时显示,时间到停机,停机指示灯亮;
4.洗涤过程由“开始”开关开始,设置“暂停”开关。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在远程云端平台验证,远程云端平台如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
部分代码展示:
module?washing_machine(clk_in,?dataout,en,reset_n,?start_key,?stop_key,led,?end_beep); ???input????????clk_in;//1000Hz ???input????????reset_n;//复位按下低电平 ???input????????start_key;//启动按下低电平 input????????stop_key;//暂停按下低电平 ??? ???output?[2:0]?led;//正反转灯??? ???output???????end_beep;//结束报警 ??? output[7:0]?dataout;//数码管段选 output[3:0]?en;//COM使能输出 ??? ??? ???reg?[1:0]????state; ???reg?[2:0]????led;??? ???reg?[7:0]????washing_time;??? ???reg??????????end_beep_buf; ???reg?[7:0]????second_cnt; ???reg??????????min_en;??? ???reg??????????second_en_1s; ???reg?[31:0]????second_div_cnt; ??? reg?[31:0]?beep_cnt=32'd0;??? ???always?@(posedge?clk_in?or?negedge?reset_n) if(!reset_n) state<=2'b00;//空闲状态 else ?????????case?(state) ????????????2'b00?://空闲状态 ???????????????if?(start_key?==?1'b0) ??????????????????state?<=?2'b01; ???????????????else ??????????????????state?<=?2'b00; ????????????2'b01?://倒计时状态 ???????????????if(stop_key==0) ??????????????????state?<=?2'b11; ???????????????else?if?(washing_time?>?8'b00000000) ??????????????????state?<=?2'b01; else? state?<=?2'b10; ????????????2'b10?://结束 state?<=?2'b10; ????????????2'b11?://暂停 ???????????????if?(start_key?==?1'b0) ??????????????????state?<=?2'b01; ???????????????else ??????????????????state?<=?2'b11; ????????????default?: ???????????????state?<=?2'b00; ?????????endcase ? ???always?@(posedge?clk_in)?????? ??????begin ?????????if?(state?==?2'b10)//结束计数 ????????????beep_cnt?<=beep_cnt+?1'b1; ??????end??? ??? ???always?@(posedge?clk_in)?????? ??????begin ?????????if?(state?==?2'b10)//结束 ????????????end_beep_buf?<=?1'b1; ?????????else ????????????end_beep_buf?<=?1'b0; ??????end ?? ???assign?end_beep?=?end_beep_buf; ??? ??? ???always?@(posedge?clk_in) if(state!=2'b01)//非倒计时状态清零 begin ????????????second_div_cnt?<=?32'd0; ????????????second_en_1s?<=?1'b0; end else//倒计时状态计时 ??????begin ?????????if?(second_div_cnt?>=?32'd1000)//计数1000为1s,仿真将计数器改小为50 ?????????begin
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1297
阅读全文