当前位置:   article > 正文

电子密码锁Verilog代码Quartus仿真_电子密码锁仿真图及程序

电子密码锁仿真图及程序

名称:电子密码锁Verilog代码Quartus仿真(文末获取)

软件:Quartus

语言:Verilog

代码功能:

电子密码锁

1、密码为4位

2、内置默认密码,可以修改密码

3、密码输入错误3次报警

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL

5. Testbench

6. 仿真图

整体仿真图

下降沿检测模块

密码输入模块

控制模块

显示模块

蜂鸣器模块

重置密码模块

整体设计功能及整体仿真图分析如下:

默认密码1234,下图输入1234后按下确认键后开锁,led_open高电平表示开锁,此时按下modify按键进行密码修改,输入新密码后,按下确认键,将密码修改为2537。

修改完密码按下lock_up键,锁定,此时led_open变为低电平

输入原密码1234无法打开,连续输入三次密码错误后报警,alarm信号拉高

按下reset信号关闭报警,才能再次密码,关闭报警后输入新密码2537,将锁打开。

注:按键按下均为低电平。

部分代码展示:

//密码输入模块
module mima_input(
input clk,
input key_0,
input key_1,
input key_2,
input key_3,
input key_4,
input key_5,
input key_6,
input key_7,
input key_8,
input key_9,
input [2:0] current_state,//密码锁当前状态
output [15:0] password//输入密码
);
reg key_0_buf1=0;
reg key_1_buf1=0;
reg key_2_buf1=0;
reg key_3_buf1=0;
reg key_4_buf1=0;
reg key_5_buf1=0;
reg key_6_buf1=0;
reg key_7_buf1=0;
reg key_8_buf1=0;
reg key_9_buf1=0;
reg key_0_buf2=0;
reg key_1_buf2=0;
reg key_2_buf2=0;
reg key_3_buf2=0;
reg key_4_buf2=0;
reg key_5_buf2=0;
reg key_6_buf2=0;
reg key_7_buf2=0;
reg key_8_buf2=0;
reg key_9_buf2=0;
wire key_0_rise;
wire key_1_rise;
wire key_2_rise;
wire key_3_rise;
wire key_4_rise;
wire key_5_rise;
wire key_6_rise;
wire key_7_rise;
wire key_8_rise;
wire key_9_rise;
always@(posedge clk)
begin
key_0_buf1<=key_0;
key_1_buf1<=key_1;
key_2_buf1<=key_2;
key_3_buf1<=key_3;
key_4_buf1<=key_4;
key_5_buf1<=key_5;
key_6_buf1<=key_6;
key_7_buf1<=key_7;
key_8_buf1<=key_8;
key_9_buf1<=key_9;
key_0_buf2<=key_0_buf1;
key_1_buf2<=key_1_buf1;
key_2_buf2<=key_2_buf1;
key_3_buf2<=key_3_buf1;
key_4_buf2<=key_4_buf1;
key_5_buf2<=key_5_buf1;
key_6_buf2<=key_6_buf1;
key_7_buf2<=key_7_buf1;
key_8_buf2<=key_8_buf1;
key_9_buf2<=key_9_buf1;
end
//assign key_0_rise=key_0_buf1 & ~key_0_buf2;//数字按键输入上升沿
//assign key_1_rise=key_1_buf1 & ~key_1_buf2;//数字按键输入上升沿
//assign key_2_rise=key_2_buf1 & ~key_2_buf2;//数字按键输入上升沿
//assign key_3_rise=key_3_buf1 & ~key_3_buf2;//数字按键输入上升沿
//assign key_4_rise=key_4_buf1 & ~key_4_buf2;//数字按键输入上升沿
//assign key_5_rise=key_5_buf1 & ~key_5_buf2;//数字按键输入上升沿
//assign key_6_rise=key_6_buf1 & ~key_6_buf2;//数字按键输入上升沿
//assign key_7_rise=key_7_buf1 & ~key_7_buf2;//数字按键输入上升沿
//assign key_8_rise=key_8_buf1 & ~key_8_buf2;//数字按键输入上升沿
//assign key_9_rise=key_9_buf1 & ~key_9_buf2;//数字按键输入上升沿
key_jitter key_jitter_k0(
     . clkin(clk),
     . key_in(key_0_buf2),//输入
  . key_posedge(key_0_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k1(
     . clkin(clk),
     . key_in(key_1_buf2),//输入
  . key_posedge(key_1_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k2(
     . clkin(clk),
     . key_in(key_2_buf2),//输入
  . key_posedge(key_2_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k3(
     . clkin(clk),
     . key_in(key_3_buf2),//输入
  . key_posedge(key_3_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k4(
     . clkin(clk),
     . key_in(key_4_buf2),//输入
  . key_posedge(key_4_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k5(
     . clkin(clk),
     . key_in(key_5_buf2),//输入
  . key_posedge(key_5_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k6(
     . clkin(clk),
     . key_in(key_6_buf2),//输入
  . key_posedge(key_6_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k7(
     . clkin(clk),
     . key_in(key_7_buf2),//输入
  . key_posedge(key_7_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k8(
     . clkin(clk),
     . key_in(key_8_buf2),//输入
  . key_posedge(key_8_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
key_jitter key_jitter_k9(
     . clkin(clk),
     . key_in(key_9_buf2),//输入
  . key_posedge(key_9_rise),//消抖后按键上升沿
  . key_negedge(),//消抖后按键下降沿
     . key_value()//消抖后按键
);
reg [15:0] password_buf=16'd0;//pass,alarm--clear
always@(posedge clk)
if(current_state==3'd2 || current_state==3'd5)
password_buf<=16'h0;
else
if(key_0_rise==1)
password_buf<={password_buf[11:0],4'd0};//数字按键0输入
else if(key_1_rise==1)
password_buf<={password_buf[11:0],4'd1};//数字按键1输入
else if(key_2_rise==1)
password_buf<={password_buf[11:0],4'd2};//数字按键2输入
else if(key_3_rise==1)
password_buf<={password_buf[11:0],4'd3};//数字按键3输入
else if(key_4_rise==1)
password_buf<={password_buf[11:0],4'd4};//数字按键4输入
else if(key_5_rise==1)
password_buf<={password_buf[11:0],4'd5};//数字按键5输入
else if(key_6_rise==1)
password_buf<={password_buf[11:0],4'd6};//数字按键6输入
else if(key_7_rise==1)
password_buf<={password_buf[11:0],4'd7};//数字按键7输入
else if(key_8_rise==1)
password_buf<={password_buf[11:0],4'd8};//数字按键8输入
else if(key_9_rise==1)
password_buf<={password_buf[11:0],4'd9};//数字按键9输入
else
password_buf<=password_buf;
assign password=password_buf;
endmodule
源代码

 扫描文章末尾的公众号二维码

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

闽ICP备14008679号