电子密码锁Verilog代码Quartus仿真

本文详细介绍了使用Verilog语言在Quartus平台上实现的一款电子密码锁的设计过程,包括密码输入验证、默认密码修改、错误报警以及重置功能的仿真。代码示例展示了密码输入模块的关键部分和整体功能的模拟流程。
摘要由CSDN通过智能技术生成

名称:电子密码锁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
源代码

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

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值