名称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 仿真相关目录可作为查看模块编译与仿真环境配置的参考。部分代码以下展示顶层模块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_ON1; 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), // ... 以下代码略完整源码请下载压缩包查看代码获取点击下方公众号卡片