按照要求,应该实现如下功能:
实验目的:
利用按键、拨码开关以及数码管实现一种简单的密码锁
实验要求:
拨码开关SW1- SW4 设置 2 位数密码,每两位设置一位密码,BM[0:1]设置第一位对应 BM1和 BM2,BM[2:3]设置第二位。所以密码是由0,1,2,3 组成的四位数。
KEY1-KEY2 作为密码输入,按键按一下数字加 1,数字由数码管显示,数字在 0,1,2,3 中循环。
K4 作为确认按键,按下 K4,输入的密码与设置的密码比对,如相同则显示 8888,若不同则显示 7777。 按下 K3 清零,按下后数码管显示 0000,可以重新输密码。
依然使用官方提供的Demo,再次基础上学习实现功能。
官方代码文件如下:
其中:
官方示例代码中:
上述设置与预期不符,我修改为如下:
示例代码中,确认和清空按钮的引脚和盘古1K开发板不匹配,需要更新,原理图如下:
需要更新lock_top.fdc文件,如下:
define_attribute {p:enter} {PAP_IO_DIRECTION} {INPUT}
define_attribute {p:enter} {PAP_IO_LOC} {59}
define_attribute {p:enter} {PAP_IO_VCCIO} {1.2}
define_attribute {p:enter} {PAP_IO_STANDARD} {LVCMOS12}
define_attribute {p:enter} {PAP_IO_PULLUP} {TRUE}
define_attribute {p:init} {PAP_IO_DIRECTION} {INPUT}
define_attribute {p:init} {PAP_IO_LOC} {60}
define_attribute {p:init} {PAP_IO_VCCIO} {1.2}
define_attribute {p:init} {PAP_IO_STANDARD} {LVCMOS12}
define_attribute {p:init} {PAP_IO_PULLUP} {TRUE}
## 3.2 更新按钮和数码管匹配代码
更新seq_display.v代码如下:
seq_control seq_control_0
(
.sel(2'd0),
.key(key0_cnt),
.dig(dig0),
.smg(smg0)
);
seq_control seq_control_1
(
.sel(2'd1),
.key(key1_cnt),
.dig(dig1),
.smg(smg1)
);
seq_control seq_control_2
(
.sel(2'd2),
.key(key2_cnt),
.dig(dig2),
.smg(smg2)
);
seq_control seq_control_3
(
.sel(2'd3),
.key(key3_cnt),
.dig(dig3),
.smg(smg3)
);
效果见文末视频
更多回帖