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

Quartus洗衣機(jī)控制器Verilog代碼遠(yuǎn)程云端平臺

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

名稱:Quartus洗衣機(jī)控制器Verilog代碼遠(yuǎn)程云端平臺

軟件:Quartus

語言:Verilog

代碼功能:

洗衣機(jī)控制器設(shè)計(jì)要求

設(shè)計(jì)一個電子定時器,控制洗衣機(jī)作如下運(yùn)轉(zhuǎn)定時啟動→正轉(zhuǎn)20秒→暫停10秒→反轉(zhuǎn)20秒→暫停10秒,每個循環(huán)1分鐘;

按正計(jì)時方式用兩個數(shù)碼管顯示正轉(zhuǎn)、暫停、反轉(zhuǎn)時間,同時用三只LED燈表示“正轉(zhuǎn)”“反轉(zhuǎn)”、“暫?!比齻€狀態(tài);

用兩個數(shù)碼管顯示洗滌的預(yù)置時間(分鐘數(shù)),按倒計(jì)時方式對洗滌過程作計(jì)時顯示,時間到停機(jī),停機(jī)指示燈亮;

洗滌過程由“開始”開關(guān)開始,設(shè)置“暫停”開關(guān)。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

本代碼已在遠(yuǎn)程云端平臺驗(yàn)證,遠(yuǎn)程云端平臺如下,其他遠(yuǎn)程云端平臺可以修改管腳適配:遠(yuǎn)程平臺照片.png

演示視頻:

部分代碼展示:

module?washing_machine(clk_in,?dataout,en,reset_n,?start_key,?stop_key,led,?end_beep);
???input????????clk_in;//1000Hz
???input????????reset_n;//復(fù)位按下低電平
???input????????start_key;//啟動按下低電平
input????????stop_key;//暫停按下低電平
???
???output?[2:0]?led;//正反轉(zhuǎn)燈???
???output???????end_beep;//結(jié)束報(bào)警
???
output[7:0]?dataout;//數(shù)碼管段選
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;//空閑狀態(tài)
else
?????????case?(state)
????????????2'b00?://空閑狀態(tài)
???????????????if?(start_key?==?1'b0)
??????????????????state?<=?2'b01;
???????????????else
??????????????????state?<=?2'b00;
????????????2'b01?://倒計(jì)時狀態(tài)
???????????????if(stop_key==0)
??????????????????state?<=?2'b11;
???????????????else?if?(washing_time?>?8'b00000000)
??????????????????state?<=?2'b01;
else?
state?<=?2'b10;
????????????2'b10?://結(jié)束
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)//結(jié)束計(jì)數(shù)
????????????beep_cnt?<=beep_cnt+?1'b1;
??????end???
???
???always?@(posedge?clk_in)??????
??????begin
?????????if?(state?==?2'b10)//結(jié)束
????????????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)//非倒計(jì)時狀態(tài)清零
begin
????????????second_div_cnt?<=?32'd0;
????????????second_en_1s?<=?1'b0;
end
else//倒計(jì)時狀態(tài)計(jì)時
??????begin
?????????if?(second_div_cnt?>=?32'd1000)//計(jì)數(shù)1000為1s,仿真將計(jì)數(shù)器改小為50
?????????begin
????????????second_div_cnt?<=?32'd0;
????????????second_en_1s?<=?1'b1;//50MHz分頻為1Hz
?????????end
?????????else
?????????begin
????????????second_div_cnt?<=?second_div_cnt?+?32'd1;
????????????second_en_1s?<=?1'b0;
?????????end
??????end
???
???always?@(posedge?clk_in)?????
??????begin
?????????if?(state!=2'b01)//非倒計(jì)時狀態(tài)清零
????????????second_cnt?<=?8'b00000000;
?????????else?if?(second_en_1s?==?1'b1)//倒計(jì)時狀態(tài)計(jì)時
?????????begin
????????????if?(second_cnt?>=?8'd59)//59s
???????????????second_cnt?<=?8'd0;
????????????else
???????????????second_cnt?<=?second_cnt?+?8'd1;
?????????end
?????????else
????????????second_cnt?<=?second_cnt;
??????end
??
???always?@(posedge?clk_in)
??????
??????begin
?????????if?(second_en_1s?==?1'b1?&&?second_cnt?==?8'd59)
????????????min_en?<=?1'b1;//分鐘信號
?????????else
????????????min_en?<=?1'b0;
??????end
???
???
???always?@(posedge?clk_in)?????
??????begin
?????????if?(state?==?2'b00)
????????????washing_time?<=?8'd5;//默認(rèn)5分鐘
?????????else?if?(min_en?==?1'b1)//分鐘信號
?????????begin
????????????if?(washing_time?>?8'd0)
???????????????washing_time?<=?washing_time?-?8'd1;//倒計(jì)時
????????????else
???????????????washing_time?<=?8'd0;
?????????end
?????????else
????????????washing_time?<=?washing_time;
??????end
reg?[7:0]?second_time;
???always?@(posedge?clk_in)
???if(state==2'b01)??
??????begin
?????????if?(washing_time?>?8'b00000000)
?????????begin
????????????if?(second_cnt?<?8'd20)//秒計(jì)時小于20,正轉(zhuǎn)燈亮
???????????????led?<=?3'b100;
????????????else?if?(second_cnt?>=?8'd20?&?second_cnt?<?8'd30)//秒計(jì)時20~30,暫停燈亮
???????????????led?<=?3'b010;
????????????else?if?(second_cnt?>=?8'd30?&?second_cnt?<?8'd50)//秒計(jì)時30~50,反轉(zhuǎn)燈亮
???????????????led?<=?3'b001;
????????????else
???????????????led?<=?3'b010;//秒計(jì)時50~59,暫停燈亮
?????????end
?????????else
????????????led?<=?3'b000;
??????end
else
led?<=?3'b000;
???always?@(posedge?clk_in)
???if(state==2'b01)??
??????begin
?????????if?(washing_time?>?8'b00000000)
?????????begin
????????????if?(second_cnt?<?8'd20)//秒計(jì)時小于20,正轉(zhuǎn)燈亮
???????????????second_time?<=?second_cnt;
????????????else?if?(second_cnt?>=?8'd20?&?second_cnt?<?8'd30)//秒計(jì)時20~30,暫停燈亮
???????????????second_time?<=?second_cnt-20;
????????????else?if?(second_cnt?>=?8'd30?&?second_cnt?<?8'd50)//秒計(jì)時30~50,反轉(zhuǎn)燈亮
???????????????second_time?<=?second_cnt-30;
????????????else
???????????????second_time?<=?second_cnt-50;//秒計(jì)時50~59,暫停燈亮
?????????end
?????????else
????????????second_time?<=?8'b0;
??????end
else
second_time?<=?8'b0;
???
???
//實(shí)現(xiàn)的動態(tài)數(shù)碼管顯示
reg[7:0]?dataout;//各段數(shù)據(jù)輸出
reg[3:0]?en;
reg?[7:0]?data_num;
//數(shù)碼管位選
reg?[1:0]sel_cnt?=2'd0;
always?@(posedge?clk_in?)??//4個數(shù)碼管
begin
sel_cnt<=sel_cnt+2'd1;
end
always?@(*)??//位選切換
begin
case?(sel_cnt)
2'd0:
begin
en<=~4'b0111;
data_num<=?second_time%10;
end
2'd1:
begin?
en<=~4'b1011;
data_num?<=?second_time/10;???
end
2'd2:
begin?
en<=~4'b1101;
data_num?<=?washing_time%10;
end????
2'd3:
begin
en<=~4'b1110;
data_num?<=?washing_time/10;?
end
default:;
endcase
end
always?@(*)
begin
case?(data_num)??//數(shù)字顯示碼
8'd0:?dataout<=?8'b1100_0000;
8'd1:?dataout<=?8'b1111_1001;
8'd2:?dataout<=?8'b1010_0100;
8'd3:?dataout<=?8'b1011_0000;
8'd4:?dataout<=?8'b1001_1001;
8'd5:?dataout<=?8'b1001_0010;
8'd6:?dataout<=?8'b1000_0010;
8'd7:?dataout<=?8'b1111_1000;
8'd8:?dataout<=?8'b1000_0000;
8'd9:?dataout<=?8'b1001_0000;
default:;
endcase
end
???
endmodule

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=367

相關(guān)推薦