当前位置:   article > 正文

DE1-SOC板电子密码锁4位数字密码锁verilog数码管显示代码_使用de1-soc完成七段显示器

使用de1-soc完成七段显示器

名称: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

代码下载:

DE1-SOC板电子密码锁4位密码锁数码管显示(代码在文末下载)软件:Quartus II语言:Verilog代码功能:设计密码锁: 基础要求 1.输入密码:通过按钮来输入密码[3:0],至少4位; 2.修改密码:解锁后,用户应该能够通过输入相同的两次按键序列来修改密码并锁定系统如果第二个按钮顺序与第一个按钮序列不匹配,则系统应保持解锁状态并显示错误消息 3.锁定后,用户应该能够通过输入锁定名称:DE1-SOC板电子密码锁4位密码锁数码管显示(代码在文末下载)软件:Quartus II语言:Verilog代码功能:设计密码锁: 基础要求 1.输入密码:通过按钮来输入密码[3:0],至少4位; 2.修改密码:解锁后,用户应该能够通过输入相同的两次按键序列来修改密码并锁定系统如果第二个按钮顺序与第一个按钮序列不匹配,则系统应保持解锁状态并显示错误消息 3.锁定后,用户应该能够通过输入锁定icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=232

部分代码展示:

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://密码正确

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/765548
推荐阅读
  

闽ICP备14008679号