基于FPGA的数字密码锁电路设计(含程序)
录
题目
设计思路
代码设计
题目
(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的数字密码锁电路设计(含程序)相关推荐
- FPGA学习——数字密码锁(上)
基于FPGA的数字密码锁 一.简介 1.1设备要求 1.2 功能要求 二.工程分析: 三.具体程序: 顶层模块: 1.矩阵键盘扫描模块 2.功能划分模块 第三.第四模块在下篇中 四.总结: 一.简介 ...
- 基于FPGA的电子密码锁
基于FPGA的电子密码锁 实现的功能: 1. 设计制作一个数字密码锁,共有8位密码,要求该密码是字母与数字的结合.输入密码由LCD显示 2. 系统上电后,8位初始密码为0000_0000. 3. 输入 ...
- 基于FPGA的数字视频信号处理器设计(中)
今天给大侠带来基于FPGA的数字视频信号处理器设计,由于篇幅较长,分三篇.今天带来第二篇,中篇,视频信号概述和视频信号处理的框架.话不多说,上货. 之前也有图像处理相关方面的文章,这里超链接几篇,给各 ...
- [FPGA]基于FPGA的数字跑表
基于FPGA的数字跑表的设计与实现 一.设计要求 用FPGA设计并实现一个数字跑表,范围为0~59分59.99秒.可以实现数字跑表进行启动.停止计时和显示读数三个操作,可以在数码管上显示读数. 二.设 ...
- 基于FPGA的数字识别实现
前言 数字识别在我们生活中很常见,比如车牌识别.本篇博客就将介绍数字识别的方法,由于只是研究数字识别的方法,我们就不用硬件平台,而是用Modelsim和Matlab来仿真验证. 具体方法如下: 我们用 ...
- 基于FPGA的数字视频信号处理器设计(下)
基于FPGA的数字视频信号处理器设计(下) 今天给大侠带来基于FPGA的数字视频信号处理器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,程序测试与运行.话不多说,上货. 导读 图像是用各种观测系统 ...
- 基于 FPGA 的数字抢答器设计
下面是基于 FPGA 的数字抢答器设计,在quartusII下,modelsim下仿真,编程语言VHDL. 1.抢答器的工作原理 主持人宣布可以抢答后,在 20s 的定时时间内若有人按键抢答,则这 ...
- 基于FPGA的数字时钟设计
基于FPGA的数字时钟设计 芯片与开发板 技术指标 1.具有正常的日时分秒技术显示功能,用七个数码管分别显示日,时,分,秒. 2.有按键校日,校时,校分,校秒. 3.利用led模拟整点报时功能. 4. ...
- 基于FPGA的数字钟(四)——时钟控制模块
一.需求分析 时钟控制模块,需要生成秒,分,时三路信号,需要有外部信号能对其进行控制. 按照正常时钟逻辑: 秒满60归零: 分在秒满60时进1,分满60归零: 时在分满60时进1,时满24归零. 外部 ...
最新文章
- 【Maven】maven的安装配置和ecplise结合
- 在SharePoint Foundation 2010中显示来自其他站点的列表
- python语法教程-Python语法教程总结规范
- 掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇
- 如何系统学习python
- CreateCompatibleDC用法[转]
- python123用户登录的三次机会_用户登录三次机会(PYTHON)
- 2020 年开源项目
- JAVA RMI远程方法调用简单实例
- HDU 6321(状压dp)
- windos环境下安装face_recognition
- B站(IT速成之JAVA速成班 300分钟算法面试)跟做笔记
- POI导出Excel(用户自己选择路径)
- 【160313 18:00】四则运算 2 的单元测试
- ERD Online 4.0.4 元数据在线建模(免费、私有部署)
- 浅学cuckoo hash
- 一个优质软件测试工程师简历的范文(一定要收藏)
- 《潮流时装设计——世界顶级时装CAD制板技巧》——导读
- 盘点低延时网络架构中使用的那些黑科技!
- iPad mini 2设计转变无边框