功能
1.输入密码:十个拨码开关输入0-9密码(改进可以用矩阵键盘),4位密码,每输入一位,密码滚动进入显示。
2.开锁:按下开锁键开始成功灯亮。
3.关锁:按下关锁键,关锁灯灭。
4.修改密码:开锁状态下才可以修改密码,长按开锁键,灯闪一次后密码修改成功。
展示:B站
模块
基本需要下面几个模块来进行
compare_num |
密码对比 |
num_in |
输入的密码 |
num_reg |
已经设置的密码 |
-close |
关锁 |
ant_ok |
确认键 |
open |
0:锁上了、1:锁开了 |
dig8_6 |
数码管显示模块 |
[15:0] set_data |
显示数据 |
[3:0] dig |
位显示 |
[7:0] dict |
段显示 |
contorl_sw |
4位密码移位寄存器 |
close |
关锁 |
value |
用户输入的一位密码 |
num |
数码管要显示的数据 |
|
btn_deb |
消抖 |
N |
需要消抖按键个数 |
inputs |
输入的按键信号 |
btn_deb |
输入的按键信号消抖后 |
distinguish |
解码按键输入信号为密码 |
inputs |
按键输入信号 |
temp |
按键输入对应一位密码 |
num_change |
进入修改 --密码修改 |
please_change_numb |
请求修改信号 |
num |
输入要修改的密码 |
open |
锁状态 |
ok_change_numb |
修改成功 |
num_reg |
输出修改后密码 |
代码
下面给主要模块部分的代码
1.顶层文件
module cal_top(
input clk,
input rst,
input [9:0] inputs,
input [1:0] keys,
output ant_change_numb,
output ok_change_numb,
output open,
output [3:0] dig,
output [7:0] dict
);
wire [1:0] keys_deb;
wire [9:0] btn_deb;
btn_deb#( .N (10) )
btn_deb1
(
. clk(clk),
. btn_in(inputs),
. btn_deb(btn_deb)
);
btn_deb#( .N (2) )
btn_deb2
(
. clk(clk),
.