赞
踩
名称: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://密码正确
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。