名称:DE1-SOC板电子密码锁4位数字密码锁数码管显示(代码在文末下载)
软件:Quartus II
语言:Verilog
代码功能:
设计密码锁:
基础要求:
1.输入密码:通过按钮来输入密码[3:0],至少4位;
2.上锁:解锁后,用户应该能够通过输入相同的两次按键序列来锁定系统如果第二个按钮顺序与第一个按钮序列不匹配,则系统应保持解锁状态;
3.锁定后,用户应该能够通过输入锁定设备的密码来解锁。如果尝试使用不正确的按键顺序来解锁系统,则系统应保持锁定状态并显示错误消息 显示:系统应将7段LED数码管用作显示器。当系统锁定时,数码管上显示“ LOCKED 或类似内容。当系统打开时,应该在数码管上显示“OPEN或类似的字样。
硬件电路板: Altera DE1-SOC
编写软件: Quartus
编写语言: Verilog
本代码已在DE1-SOC开发板验证,其他开发板可以通过修改管脚适配,开发板如下:
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
635