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

DE1-SOC板電子密碼鎖4位數(shù)字密碼鎖verilog數(shù)碼管顯示

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

名稱:DE1-SOC板電子密碼鎖4位數(shù)字密碼鎖數(shù)碼管顯示(代碼在文末下載)

軟件:Quartus II

語言:Verilog

代碼功能:

設(shè)計(jì)密碼鎖:

基礎(chǔ)要求:

1.輸入密碼:通過按鈕來輸入密碼[3:0],至少4位;

2.上鎖:解鎖后,用戶應(yīng)該能夠通過輸入相同的兩次按鍵序列來鎖定系統(tǒng)如果第二個(gè)按鈕順序與第一個(gè)按鈕序列不匹配,則系統(tǒng)應(yīng)保持解鎖狀態(tài);

3.鎖定后,用戶應(yīng)該能夠通過輸入鎖定設(shè)備的密碼來解鎖。如果嘗試使用不正確的按鍵順序來解鎖系統(tǒng),則系統(tǒng)應(yīng)保持鎖定狀態(tài)并顯示錯(cuò)誤消息 顯示:系統(tǒng)應(yīng)將7段LED數(shù)碼管用作顯示器。當(dāng)系統(tǒng)鎖定時(shí),數(shù)碼管上顯示“ LOCKED 或類似內(nèi)容。當(dāng)系統(tǒng)打開時(shí),應(yīng)該在數(shù)碼管上顯示“OPEN或類似的字樣。

硬件電路板: Altera DE1-SOC

編寫軟件: Quartus

編寫語言: Verilog

本代碼已在DE1-SOC開發(fā)板驗(yàn)證,其他開發(fā)板可以通過修改管腳適配,開發(fā)板如下:

DE1-SOC.png

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

部分代碼展示:

module?digital_lock(
input?clk,//50MHz
input?key_0,//按鍵0
input?key_1,//按鍵1
input?key_2,//按鍵2
input?key_3,//按鍵3
output?led_open,//開鎖指示燈
output?[6:0]HEX0,//數(shù)碼管
output?[6:0]HEX1,//數(shù)碼管
output?[6:0]HEX2,//數(shù)碼管
output?[6:0]HEX3//數(shù)碼管
);
wire?key0_neg;
wire?key1_neg;
wire?key2_neg;
wire?key3_neg;
wire?[2:0]?current_state;//當(dāng)前狀態(tài)
negedge_check?i0_negedge_check(
.?clk(clk),
.?key(key_0),//輸入按鍵
.?key_neg(key0_neg)//輸出下降沿
);
negedge_check?i1_negedge_check(
.?clk(clk),
.?key(key_1),//輸入按鍵
.?key_neg(key1_neg)//輸出下降沿
);
negedge_check?i2_negedge_check(
.?clk(clk),
.?key(key_2),//輸入按鍵
.?key_neg(key2_neg)//輸出下降沿
);
negedge_check?i3_negedge_check(
.?clk(clk),
.?key(key_3),//輸入按鍵
.?key_neg(key3_neg)//輸出下降沿
);
//密碼鎖控制模塊
mimasuo_ctrl?i_mimasuo_ctrl(
.?clk(clk),
.?key0_neg(key0_neg),
.?key1_neg(key1_neg),
.?key2_neg(key2_neg),
.?key3_neg(key3_neg),
.?led_open(led_open),
.?current_state(current_state)//當(dāng)前狀態(tài)
);
//顯示模塊
display?i_display
(
.?clk(clk),
.?current_state(current_state),//當(dāng)前狀態(tài)
.?key0_neg(key0_neg),
.?key1_neg(key1_neg),
.?key2_neg(key2_neg),
.?key3_neg(key3_neg),
.?HEX0(HEX0),//數(shù)碼管段選
.?HEX1(HEX1),//數(shù)碼管段選
.?HEX2(HEX2),//數(shù)碼管段選
.?HEX3(HEX3)?//數(shù)碼管段選
);
endmodule

//密碼鎖控制模塊
module?mimasuo_ctrl(
input?clk,

input?key0_neg,
input?key1_neg,
input?key2_neg,
input?key3_neg,

output?led_open,
output?[2:0]?current_state//當(dāng)前狀態(tài)
);
		
//定義6個(gè)狀態(tài)
parameter?s_lock=3'd0;
parameter?s_compare=3'd1;
parameter?s_pass=3'd2;
parameter?s_error=3'd3;
parameter?s_pass_error=3'd4;
parameter?s_pass_right=3'd5;

reg?[2:0]?state=3'd0;

assign?current_state=state;

reg?[3:0]?key_cnt=4'd0;
always@(posedge?clk)
if(state==s_compare?||?state==s_pass_right?||?state==s_pass_error)//密碼比對(duì)
	key_cnt<=4'd0;
else
	if(key0_neg?|?key1_neg?|?key2_neg?|?key3_neg)
		key_cnt<=key_cnt+4'd1;

reg?[31:0]?password_buf=32'd0;//
always@(posedge?clk)
if(state==s_compare)//密碼比對(duì)
	password_buf<=32'd0;
else
	if(key0_neg==1)
		password_buf<={password_buf[27:0],4'd0};//數(shù)字按鍵0輸入
	else?if(key1_neg==1)
		password_buf<={password_buf[27:0],4'd1};//數(shù)字按鍵1輸入
	else?if(key2_neg==1)
		password_buf<={password_buf[27:0],4'd2};//數(shù)字按鍵2輸入
	else?if(key3_neg==1)
		password_buf<={password_buf[27:0],4'd3};//數(shù)字按鍵3輸入
	else
		password_buf<=password_buf;	

reg?[15:0]?right_password=16'h0123;//right_password
//狀態(tài)機(jī)控制
always@(posedge?clk)
	case(state)
		s_lock://鎖定狀態(tài)
			if(key_cnt>=3'd4)//輸入4個(gè)密碼
				state<=s_compare;
			else
				state<=s_lock;
		s_compare://比對(duì)密碼狀態(tài)
			if(password_buf[15:0]==right_password)
				state<=s_pass;
			else
				state<=s_error;
		s_pass://密碼正確

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

相關(guān)推薦