题目

设计思路

代码设计

题目

(1)4个按键分别设置4位数码管上的显示数字,当按键设置的数字与设置的4位密码一致时,蜂鸣器响,表示锁打开;

(2)具备通过按键手动修改数字密码的功能;

(3)具备按键消抖电路功能;

(4)一定时间内无操作数字显示回到初始状态,数码管显示倒计时。

设计思路

我们可以用四个同bit位宽的寄存器把密码寄存起来,在按键时不断将现在按键的值与密码的寄存器对比,当所有对应位都相同时,蜂鸣器响,可以用一个标志位表示所有对应位相同,蜂鸣器工作的条件就是标志位给出的。

由于需要按键手动修改密码,那么数码管显示就有两种状态,一种是修改密码,一种是输入密码。我通过增加一个按键来控制这两种状态,当按下这个按键时进入修改密码阶段,当再次按下时进入输入密码阶段。

按键消抖部分我之前写过,可以看之前的按键消抖。

一定时间无操作进入初始状态,我设定这个时间为15秒,保证15秒的刷新时间是实时性,采样前后时刻的对比,当所有按键的前一时刻与后一时刻相同时开始倒计时,不同时重新倒计时,保证回归初始与最后操作之间有15秒间隔。

我额外增加一个led用来显示修改密码和不修改密码的两种状态,方便区别。

代码设计

密码设计部分

module lock(input            clk        ,input            rstn       ,input            shape_key1 ,input            shape_key2 ,input            shape_key3 ,input            shape_key4 ,input            shape_amend,output reg [3:0] data1      ,output reg [3:0] data2      ,output reg [3:0] data3      ,output reg [3:0] data4      ,output reg [3:0] data5      ,output reg [3:0] data6      ,output reg       buzzer     ,output reg       led
);reg flag1;wire [3:0]button1,button2,button3,button4;wire button_amend;button button (.clk(clk), .rstn(rstn), .flag1(flag1),.shape_key1(shape_key1), .shape_key2(shape_key2), .shape_key3(shape_key3), .shape_key4(shape_key4), .shape_amend(shape_amend), .button1(button1), .button2(button2), .button3(button3), .button4(button4), .button_amend(button_amend)
);reg [3:0]b1,b2,b3,b4;always@(posedge clk)beginb1<=button1;b2<=button2;b3<=button3;b4<=button4;endreg m;always@(posedge clk or negedge rstn)beginif(!rstn)m<=0;else if((button1==0)&&(button2==0)&&(button3==0)&&(button4==0))m<=0;        //防止倒计时结束出现第二次倒计时else if(((b1==button1)&&(b2==button2)&&(b3==button3)&&(b4==button4)))m<=1;        //实时对比密码的输入else m<=0;endreg [3:0]chiper1,chiper2,chiper3,chiper4;always@(posedge clk or negedge rstn)beginif(!rstn)beginchiper1<=1;chiper2<=2;chiper3<=3;chiper4<=4;endelse if(button_amend==1)    //修改密码阶段beginchiper1<=button1;chiper2<=button2;chiper3<=button3;chiper4<=button4;endendalways@(posedge clk or negedge rstn)beginif(!rstn)begindata1<=0;data2<=0;data3<=0;data4<=0;led<=0;endelse if(button_amend==1)//在修改密码阶段时,显示密码begindata1<=chiper1;data2<=chiper2;data3<=chiper3;data4<=chiper4;led<=0;endelse                    //在输入密码阶段时,显示输入密码begindata1<=button1;data2<=button2;data3<=button3;data4<=button4;led<=1;endendalways@(posedge clk or negedge rstn)beginif(!rstn)beginbuzzer<=0;endelse if((chiper1==button1)&&(chiper2==button2)&&(chiper3==button3)&&(chiper4==button4)&&(button_amend==0)) //四个按键都与密码寄存器相等,并且不是修改密码状态buzzer<=1;        //蜂鸣器高电平响else buzzer<=0;        endreg [26:0]cn1;reg [3:0]count;reg [2:0]m2;always@(posedge clk or negedge rstn)beginif(!rstn)begincn1<=0;flag1<=1;count<=1;m2<=0;endelse case(m2)    //在case的每个状态增加一个回到初始计数的条件0:if(m==1)begincn1<=0;count<=0;m2<=1;end1:beginif(m==0)m2<=0;else if(cn1>= 100)//49999999  200beginif(count>=15)    //在15秒计时结束给flag1一个时钟周期的低电平begincount<=0;flag1<=0;m2<=2;endcount<=count+1;cn1<=0;endelse cn1<=cn1+1;end2:beginif(m==0)m2<=0; flag1<=1;endendcaseend    always@(posedge clk or negedge rstn)beginif(!rstn)begindata5<=0;data6<=0;endelse case(count)0:begin data6<=0;data5<=0; end1:begin data6<=1;data5<=5; end2:begin data6<=1;data5<=4; end3:begin data6<=1;data5<=3; end4:begin data6<=1;data5<=2; end5:begin data6<=1;data5<=1; end6:begin data6<=1;data5<=0; end7:begin data6<=0;data5<=9; end8:data5<=8;9:data5<=7;10:data5<=6;11:data5<=5;12:data5<=4;13:data5<=3;14:data5<=2;15:data5<=1;endcaseendendmodule

按键消抖部分https://blog.csdn.net/m0_59487432/article/details/124872245?spm=1001.2014.3001.5501

动态显示部分https://blog.csdn.net/m0_59487432/article/details/124891256?spm=1001.2014.3001.5501

顶层模块部分

module top(input        clk    ,input        rstn   ,input        key1   ,input        key2   ,input        key3   ,input        key4   ,input        amend  ,output [7:0] seg    ,output [5:0] sel    ,output       led    ,output       buzzer
);//完整代码在QQ群文件689408654wire shape_key1;
wire shape_key2;
wire shape_key3;
wire shape_key4;   //消抖后的四个密码波形
wire shape_amend;  //消抖后的修改按键波形
shake_top shake_top_u(.clk          (clk        ), .rstn         (rstn       ), .key1         (key1       ), .key2         (key2       ), .key3         (key3       ), .key4         (key4       ), .amend        (amend      ), .shape_key1   (shape_key1 ), .shape_key2   (shape_key2 ), .shape_key3   (shape_key3 ), .shape_key4   (shape_key4 ), .shape_amend  (shape_amend)
);
wire [3:0] data1;
wire [3:0] data2;
wire [3:0] data3;
wire [3:0] data4;
wire [3:0] data5;
wire [3:0] data6;//数码管各个位码值
lock lock_u(.clk         (clk         ), .rstn        (rstn        ), .shape_key1  (shape_key1  ), .shape_key2  (shape_key2  ), .shape_key3  (shape_key3  ), .shape_key4  (shape_key4  ), .shape_amend (shape_amend ), .data1       (data1       ), .data2       (data2       ), .data3       (data3       ), .data4       (data4       ), .data5       (data5       ),.data6       (data6       ),.buzzer      (buzzer      ),.led         (led         )
);
digital digital_u(.clk  (clk  ), .rstn (rstn ), .data1(data1), .data2(data2), .data3(data3), .data4(data4), .data5(data5),.data6(data6), .seg  (seg  ), .sel  (sel  )
);
endmodule

基于FPGA的数字密码锁电路设计(含程序)相关推荐

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

    基于FPGA的数字密码锁 一.简介 1.1设备要求 1.2 功能要求 二.工程分析: 三.具体程序: 顶层模块: 1.矩阵键盘扫描模块 2.功能划分模块 第三.第四模块在下篇中 四.总结: 一.简介 ...

  2. 基于FPGA的电子密码锁

    基于FPGA的电子密码锁 实现的功能: 1. 设计制作一个数字密码锁,共有8位密码,要求该密码是字母与数字的结合.输入密码由LCD显示 2. 系统上电后,8位初始密码为0000_0000. 3. 输入 ...

  3. 基于FPGA的数字视频信号处理器设计(中)

    今天给大侠带来基于FPGA的数字视频信号处理器设计,由于篇幅较长,分三篇.今天带来第二篇,中篇,视频信号概述和视频信号处理的框架.话不多说,上货. 之前也有图像处理相关方面的文章,这里超链接几篇,给各 ...

  4. [FPGA]基于FPGA的数字跑表

    基于FPGA的数字跑表的设计与实现 一.设计要求 用FPGA设计并实现一个数字跑表,范围为0~59分59.99秒.可以实现数字跑表进行启动.停止计时和显示读数三个操作,可以在数码管上显示读数. 二.设 ...

  5. 基于FPGA的数字识别实现

    前言 数字识别在我们生活中很常见,比如车牌识别.本篇博客就将介绍数字识别的方法,由于只是研究数字识别的方法,我们就不用硬件平台,而是用Modelsim和Matlab来仿真验证. 具体方法如下: 我们用 ...

  6. 基于FPGA的数字视频信号处理器设计(下)

    基于FPGA的数字视频信号处理器设计(下) 今天给大侠带来基于FPGA的数字视频信号处理器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,程序测试与运行.话不多说,上货. 导读 图像是用各种观测系统 ...

  7. 基于 FPGA 的数字抢答器设计

    下面是基于 FPGA 的数字抢答器设计,在quartusII下,modelsim下仿真,编程语言VHDL.   1.抢答器的工作原理 主持人宣布可以抢答后,在 20s 的定时时间内若有人按键抢答,则这 ...

  8. 基于FPGA的数字时钟设计

    基于FPGA的数字时钟设计 芯片与开发板 技术指标 1.具有正常的日时分秒技术显示功能,用七个数码管分别显示日,时,分,秒. 2.有按键校日,校时,校分,校秒. 3.利用led模拟整点报时功能. 4. ...

  9. 基于FPGA的数字钟(四)——时钟控制模块

    一.需求分析 时钟控制模块,需要生成秒,分,时三路信号,需要有外部信号能对其进行控制. 按照正常时钟逻辑: 秒满60归零: 分在秒满60时进1,分满60归零: 时在分满60时进1,时满24归零. 外部 ...

最新文章

  1. 【Maven】maven的安装配置和ecplise结合
  2. 在SharePoint Foundation 2010中显示来自其他站点的列表
  3. python语法教程-Python语法教程总结规范
  4. 掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇
  5. 如何系统学习python
  6. CreateCompatibleDC用法[转]
  7. python123用户登录的三次机会_用户登录三次机会(PYTHON)
  8. 2020 年开源项目
  9. JAVA RMI远程方法调用简单实例
  10. HDU 6321(状压dp)
  11. windos环境下安装face_recognition
  12. B站(IT速成之JAVA速成班 300分钟算法面试)跟做笔记
  13. POI导出Excel(用户自己选择路径)
  14. 【160313 18:00】四则运算 2 的单元测试
  15. ERD Online 4.0.4 元数据在线建模(免费、私有部署)
  16. 浅学cuckoo hash
  17. 一个优质软件测试工程师简历的范文(一定要收藏)
  18. 《潮流时装设计——世界顶级时装CAD制板技巧》——导读
  19. 盘点低延时网络架构中使用的那些黑科技!
  20. iPad mini 2设计转变无边框

热门文章

  1. win7无法通过网页登录ftp服务器,win7不能登录ftp服务器配置
  2. 电商交易之订单中心设计(一)
  3. CSS之后代、子代选择器的区别
  4. 【比赛总结】2022十四届华中杯数学建模比赛总结
  5. 在线查询IP及IP信息
  6. 一周Spring Boot + VUE 入门(2) --VUE
  7. 最详细的教程axure新手入门:Axure教程
  8. 差分+树状数组 线段树【P2357】 守墓人
  9. java保证一段代码枷锁_Java堆外内存之突破JVM枷锁
  10. iomanip I/O流类库操纵符