FPGA学习——数字密码锁(上)

本文介绍了使用FPGA设计数字密码锁的过程,包括设备要求、功能要求、工程分析和程序概要。密码锁采用矩阵键盘输入,具备多种功能,如开关、清零、密码设置等。文章详细讲解了模块划分和矩阵键盘扫描模块的实现,而剩余部分将在下篇中继续阐述。
摘要由CSDN通过智能技术生成

一、简介

本文篇幅可能有些长,请耐心阅读
本数字密码锁采用矩阵键盘作为十六位按键输入,其中,十位数字键,六位功能按键。密码锁具有清零,密码重置,错误警报等多项功能,采用数码管动态显示的方法显示信息。

1.1设备要求

1、FPGA开发板一块(需要有至少四位数码管)
2、矩阵键盘一块
3、下载线,电源线等以及杜邦线若干

1.2 功能要求

六位功能按键:

  1. on:密码锁开关,打开初始值显示“0000”
  2. off:密码锁关闭按键
  3. clear:清零按键,输入数字错误后按下此键清零
  4. lock:密码上锁,输入想要的密码按下此键,即可锁定
  5. reset:密码重置,变更前需核对密码是否正确,在开锁状态下,按下此键后输入新密码,再按下lock键上锁
  6. check:输入密码按下此键,如正确即可开锁
    其他要求:
    1.当连续三次输入错误密码时,系统在第四次输入密码时发出警报
    2.输入新数字显示在数码管最右端,前一个数字依次往左移动

二、工程分析:

首先,作为一个功能较多的工程而言,其内在逻辑必然十分复杂。所以在建立工程时首先考虑进行模块划分,将整个工程分为几个模块,尽量降低每个模块之间的耦合性,提高模块的独立性,这样才会使逻辑更加清晰,程序的可读性更好,以及更加便于修改。
本密码锁具体分为四个模块:
1、矩阵键盘扫描模块:要求将矩阵键盘的十六个值分别进行输出
2、按键功能模块:对于矩阵键盘输出的十六个值进行划分,分别为十位数字键以及六位功能按键并对下一个模块进行输出
3、中心处理模块:对于各个按键值接受以后,按照各个按键功能进行相应的信号处理,最后将其结果输出给下一个模块
4、结果显示模块:接收上一个模块的结果,并对结果进行数码管的显示

三、具体程序:

顶层模块:

按照划分的几个模块进行顶层模块的编写,顶层模块的编写放到最后,需要根据各个模块的信号接口进行连接。


module top_lock(clk,dxuan,wxuan,led,beep,row,col);
input            clk;
input   [3:0]    row;
output        beep;
output  [3:0]   col;
output        led;
output  [5:0] wxuan;
output  [7:0] dxuan;

wire [4:0] key_out;
wire [8:0] number_key;
wire [3:0] row;
wire [3:0] cow;
wire lock;
wire check;
wire reset;
wire clear_flag;
wire state_lock;
wire [3:0]rece_cnt;
wire       rece_flag;

wire [3:0] disp_in1;
wire [3:0] disp_in2;
wire [3:0] disp_in3;
wire [3:0] disp_in4;

key_board key_board1(
          .clk     (clk    ),
          .row   (row  ),
          .col   (col  ),
          .key_out (key_out)
			 );
			 
key_function key_function1(
             .clk         (  clk  ),
			 .key_out     (key_out),
			 
			 .state_lock  (state_lock),
			 .clear_flag  (clear_flag),
			 .number_key  (number_key),
			 .lock      (lock),
			 .reset       (reset),
			 .check     (check),
			 .rece_cnt    (rece_cnt),
			 .rece_flag   (rece_flag)
			 );
			 
lock_ctrl   lock_ctrl1(
              .clk         (clk),
				  .check     (check),
				  .state_lock   (state_lock),
			      .clear_flag       (clear_flag),
			      .lock      (lock),
				  .reset       (reset),
				  .rece_cnt    (rece_cnt),
				  .rece_flag   (rece_flag),
				  .number_key  (number_key),
				  
				  .led         (led),
				  .beep        (beep),
				  .disp_in1  (disp_in1)
  • 27
    点赞
  • 165
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆意..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值