• 方案介绍
  • 相关推荐
申请入驻 产业图谱

DE1-SOC板电子密码锁4位数字密码锁verilog数码管显示

05/11 13:18
635
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:DE1-SOC板电子密码锁4位数字密码锁数码管显示(代码在文末下载)

软件:Quartus II

语言:Verilog

代码功能:

设计密码锁:

基础要求:

1.输入密码:通过按钮来输入密码[3:0],至少4位;

2.上锁:解锁后,用户应该能够通过输入相同的两次按键序列来锁定系统如果第二个按钮顺序与第一个按钮序列不匹配,则系统应保持解锁状态;

3.锁定后,用户应该能够通过输入锁定设备的密码来解锁。如果尝试使用不正确的按键顺序来解锁系统,则系统应保持锁定状态并显示错误消息 显示:系统应将7段LED数码管用作显示器。当系统锁定时,数码管上显示“ LOCKED 或类似内容。当系统打开时,应该在数码管上显示“OPEN或类似的字样。

硬件电路板: Altera DE1-SOC

编写软件: Quartus

编写语言: Verilog

本代码已在DE1-SOC开发板验证,其他开发板可以通过修改管脚适配,开发板如下:

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,//数码管
output?[6:0]HEX1,//数码管
output?[6:0]HEX2,//数码管
output?[6:0]HEX3//数码管
);
wire?key0_neg;
wire?key1_neg;
wire?key2_neg;
wire?key3_neg;
wire?[2:0]?current_state;//当前状态
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)//当前状态
);
//显示模块
display?i_display
(
.?clk(clk),
.?current_state(current_state),//当前状态
.?key0_neg(key0_neg),
.?key1_neg(key1_neg),
.?key2_neg(key2_neg),
.?key3_neg(key3_neg),
.?HEX0(HEX0),//数码管段选
.?HEX1(HEX1),//数码管段选
.?HEX2(HEX2),//数码管段选
.?HEX3(HEX3)?//数码管段选
);
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//当前状态
);
		
//定义6个状态
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)//密码比对
	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)//密码比对
	password_buf<=32'd0;
else
	if(key0_neg==1)
		password_buf<={password_buf[27:0],4'd0};//数字按键0输入
	else?if(key1_neg==1)
		password_buf<={password_buf[27:0],4'd1};//数字按键1输入
	else?if(key2_neg==1)
		password_buf<={password_buf[27:0],4'd2};//数字按键2输入
	else?if(key3_neg==1)
		password_buf<={password_buf[27:0],4'd3};//数字按键3输入
	else
		password_buf<=password_buf;	

reg?[15:0]?right_password=16'h0123;//right_password
//状态机控制
always@(posedge?clk)
	case(state)
		s_lock://锁定状态
			if(key_cnt>=3'd4)//输入4个密码
				state<=s_compare;
			else
				state<=s_lock;
		s_compare://比对密码状态
			if(password_buf[15:0]==right_password)
				state<=s_pass;
			else
				state<=s_error;
		s_pass://密码正确

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=232

相关推荐