4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus

名称:4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:Cyclone IV FPGA开发板

功能介绍

本设计实现一个基于 FPGA 的 4x4 矩阵键盘电子密码锁系统,采用 Verilog 编写,工程软件为 Quartus。系统通过 4x4 矩阵键盘输入数字密码,并配合确认、复位、修改、上锁等独立按键完成密码锁常见操作流程,可输出开锁指示和报警信号,同时支持 LCD1602 与数码管显示。 密码锁的主要功能包括数字按键输入、密码确认、密码修改、复位控制、上锁控制、错误报警和状态显示。用户通过矩阵键盘输入密码后,按确认键进行校验;当密码正确时,led_open 输出可用于指示开锁状态;当进入异常或错误处理流程时,alarm 输出可用于报警提示。修改键和上锁键用于完成密码锁的管理操作,使系统具备较完整的交互逻辑。 显示方面,LCD1602 用于展示密码锁运行状态或提示信息,数码管接口提供位选和段选输出,便于观察输入或状态结果。工程结构包含顶层控制、键盘扫描、按键消抖、密码输入、报警控制、LCD 驱动、数码管显示和时钟分频等模块,适合作为 FPGA 综合课程设计、Verilog 模块化设计练习、矩阵键盘与 LCD1602 联合应用实验参考。

运行环境

开发语言:Verilog 开发软件:Quartus 目标平台:Cyclone IV FPGA 开发板 主要外设:4x4 矩阵键盘、独立按键、LCD1602、数码管、报警输出、开锁指示 LED 顶层模块:mimasuo

设计思路

系统以 mimasuo 作为顶层模块,将时钟分频、键盘输入、按键消抖、密码输入/修改、LCD1602 显示、数码管显示、开锁指示和报警控制拆分为多个功能模块。顶层统一连接 50MHz 时钟、4x4 矩阵键盘行列信号、确认/复位/修改/上锁按键,以及 LCD 与数码管输出端口,便于在 Quartus 中综合和进行 FPGA 板级调试。 输入部分先通过 div_clk 将系统时钟分频到 500KHz,作为按键扫描和消抖相关逻辑的工作时钟。4x4 矩阵键盘由 data_input、key_4x4 等逻辑完成数字键识别,独立功能按键则通过 key_jitter2 消抖并提取有效边沿,减少机械按键抖动对密码确认、修改和上锁动作的影响。 密码锁控制逻辑围绕当前状态、输入密码、正确密码、确认信号、修改信号和上锁信号展开。用户输入数字后,系统可进行密码比对;密码正确时输出开锁指示,操作异常或密码错误流程可驱动报警输出。reset_password、mima_input、alarm_on、display 等模块分别承担密码重置/修改、输入组织、报警控制和显示输出相关功能,使整体结构清晰,适合阅读、修改和二次扩展。 显示部分同时使用 LCD1602 与数码管。LCD_Driver、LCD_Top 负责 LCD 控制时序与显示内容组织,数码管显示模块负责位选和段选输出。这样的设计便于在实物演示中同时观察系统状态、输入过程和结果反馈,也方便学生理解 FPGA 中键盘扫描、状态控制和字符显示之间的协同关系。

模块结构

顶层模块为 mimasuo,负责连接系统时钟、矩阵键盘、功能按键、报警输出、开锁指示、LCD1602 接口和数码管接口。 div_clk:将 50MHz 时钟分频为 500KHz,供键盘扫描和按键处理逻辑使用。 data_input、key_4x4:完成 4x4 矩阵键盘扫描与数字按键识别,输出 0-9 数字键的有效触发信号。 key_jitter、key_jitter2、negedge_check:用于机械按键消抖和边沿检测,提升确认、复位、修改、上锁等按键操作的稳定性。 mima_input、reset_password、mimasuo_ctrl:围绕密码输入、密码修改/重置和密码锁状态控制展开,实现密码校验及相关控制流程。 alarm_on:根据密码锁状态或错误条件产生报警控制输出。 display:负责数码管位选、段选显示输出。 LCD_Driver、LCD_Top:负责 LCD1602 控制时序、状态信息组织和显示接口驱动。

开发板验证

工程已完成 Cyclone IV FPGA 开发板的管脚约束配置,按键、4x4 矩阵键盘、LCD1602 控制信号、数码管位选/段选、报警与开锁指示等端口均可结合 Quartus 工程中的 qsf 管脚分配进行综合、编译和下载验证。开发板验证重点覆盖密码输入、确认、修改、复位、上锁、开锁指示以及报警输出等交互流程,适合直接用于 FPGA 课程设计、综合实验和实物演示。

演示视频

配套演示视频用于展示密码锁工程的实际运行效果,可结合开发板操作观察矩阵键盘输入、确认、修改、上锁、复位、LCD1602 显示、开锁指示和报警输出等功能流程。

仿真图/仿真说明/设计文档图片

设计文档图片展示了工程文件、程序文件、程序编译、RTL 图和管脚分配等内容,可用于了解 Quartus 工程组织、源码模块关系、综合编译结果和 FPGA 引脚约束情况。工程目录中同时包含 ModelSim 仿真相关目录,可作为查看模块编译与仿真环境配置的参考。

4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus 设计文档图片 image1.png

4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus 设计文档图片 image2.png

4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus 设计文档图片 image3.png

4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus 设计文档图片 image4.png

4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus 设计文档图片 image5.png

4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus 设计文档图片 image6.png

部分代码

以下展示顶层模块 mimasuo 的部分代码,完整源码请下载压缩包查看。

module mimasuo(
input clk,//时钟

input [3:0] L_row,//行
output [3:0] H_col,//列

input confirm_key,//key4-确认键
input reset,//key3-复位
input modify_key,//key2--修改
input lock_up_key,//key1--上锁

output alarm,//报警
output led_open,//开锁

//LCD控制信号
output  LCD_EN,
output  RS,
output  RW,
output  [7:0] DB8,

//数码管
output [5:0] bit_select,//数码管位选
output [7:0] seg_select//数码管段选	
);

wire  LCD_ON;
wire reset_v;
wire reset_p;
assign reset_p=~reset_v;
wire [2:0] current_state;
wire [15:0] password;
wire [15:0] correct_password;
wire confirm;
wire modify;
wire lock_up;
assign LCD_ON=1;
wire clk_500KHz;

//数字输入按键
wire key_0;
wire key_1;
wire key_2;
wire key_3;
wire key_4;
wire key_5;
wire key_6;
wire key_7;
wire key_8;
wire key_9;

//分频
div_clk i_div_clk(
. clk(clk),//50M
. clk_500KHz(clk_500KHz)//分频到500K
);

//输入模块
data_input i_data_input(
. clk_500KHz(clk_500KHz),//500KHZ 
. reset(reset_v),
. L_row(L_row),//行
. H_col(H_col),//列
. key_0_rise(key_0),//键0
. key_1_rise(key_1),//键1
. key_2_rise(key_2),//键2
. key_3_rise(key_3),//键3
. key_4_rise(key_4),//键4
. key_5_rise(key_5),//键5
. key_6_rise(key_6),//键6
. key_7_rise(key_7),//键7
. key_8_rise(key_8),//键8
. key_9_rise(key_9) //键9
);

//下降沿检测
key_jitter2 i0_key_jitter(
     . clkin(clk_500KHz),
     . key_in(reset),//输入
	  . key_posedge(),//消抖后按键上升沿
	  . key_negedge(),//消抖后按键下降沿
     . key_value(reset_v)//消抖后按键
);


//下降沿检测
key_jitter2 i1_key_jitter(
     . clkin(clk_500KHz),
     . key_in(confirm_key),//输入
	  . key_posedge(),//消抖后按键上升沿
	  . key_negedge(confirm),//消抖后按键下降沿
     . key_value()//消抖后按键
);


//下降沿检测
key_jitter2 i2_key_jitter(
     . clkin(clk_500KHz),
     . key_in(modify_key),//输入
	  . key_posedge(),//消抖后按键上升沿
	  . key_negedge(modify),//消抖后按键下降沿
     . key_value()//消抖后按键
);

//下降沿检测
key_jitter2 i3_key_jitter(
     . clkin(clk_500KHz),
     . key_in(lock_up_key),//输入
	  . key_posedge(),//消抖后按键上升沿
	  . key_negedge(lock_up),//消抖后按键下降沿
     . key_value()//消抖后按键
);

LCD_Top i_LCD_Top(
.clk_50M(clk),
.rst(confirm_key & modify_key),
.confirm(confirm),
.current_state(current_state),
.LCD_EN(LCD_EN),
.RS(RS),
.RW(RW),
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 4x4矩阵键盘电子密码锁 FPGA 设计 Verilog Quartus

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员