【每周一练】+盘古1K开发板+4.密码锁 - FPGA开发者技术社区 - 电子技术william hill官网 - 广受欢迎的专业电子william hill官网 - 威廉希尔官方网站
分享 收藏 返回

hehung 关注 私信
[文章]

【每周一练】+盘古1K开发板+4.密码锁

前言

按照要求,应该实现如下功能:

实验目的:

利用按键、拨码开关以及数码管实现一种简单的密码锁

实验要求:

拨码开关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,再次基础上学习实现功能。

1 代码分析

官方代码文件如下:

1702801107983.png

其中:

  • lock_top.v:顶层代码,提供顶层模块设计,始终以及模块调用顺序;
  • key_ctrl.v:按键控制代码,采样按键是否按下以及滤波;
  • compare.v:比较代码,比较设定密码和拨码开关是否对应;
  • seq_display.v:显示部分,用于按键判断密码是否相等以及按钮按下的数据等数码管显示信息。

2 差异项

官方示例代码中:

  • KEY1控制的是数码管4;
  • KEY2控制的是数码管3;
  • KEY3是确认按钮;
  • KEY4是清空按钮。

上述设置与预期不符,我修改为如下:

  • KEY1控制的是数码管1;
  • KEY2控制的是数码管2;
  • KEY3是清空按钮;
  • KEY4是确认按钮。

3 代码更新

3.1 更新确认和清空按钮配置

示例代码中,确认和清空按钮的引脚和盘古1K开发板不匹配,需要更新,原理图如下:
1702802031287.png

需要更新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)
);

4 实现效果

效果见文末视频

密码锁功能演示

更多回帖

×
发帖