名称:4位密码锁采用矩阵键盘输入
软件:Quartus
语言:VHDL
代码功能:
1、 设计一个四位的电子密码锁,每按下一个数字键,就输入一个数字,并在显示器上显示该数值,同时将先前输入的数据左移。
2、此外,包含密码清除(密码右移),密码更改(可以通过按键修改新密码),密码上锁和密码解除(按下解除首先检查密码是否正确,密码正确就开锁)功能。
3、密码连续错误3次报警
代码下载地址:
FPGA代码资源下载网:hdlcode.com
部分代码展示
--设计一个四位的电子密码锁, --每按下一个数字键,就输入一个数字, --并在显示器上显示该数值,同时将先前输入的数据左移。 --此外,包含密码清除(密码右移), --密码更改(可以通过按键修改新密码), --密码上锁和密码解除(按下解除首先检查密码是否正确,密码正确就开锁)功能。 --密码连续错误3次报警 LIBRARY ieee; USE ieee.std_logic_1164.all; --顶层模块 ENTITY mimasuo IS PORT ( clk : IN STD_LOGIC; L_row : IN STD_LOGIC_VECTOR(3 DOWNTO 0);--矩阵键盘行 H_col : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--矩阵键盘列 confirm : IN STD_LOGIC;--确认键 reset : IN STD_LOGIC;--重置键 modify : IN STD_LOGIC;--修改键 lock_up : IN STD_LOGIC;--锁住键 delect : IN STD_LOGIC;--删除键 alarm : OUT STD_LOGIC;--报警 led_open : OUT STD_LOGIC;--开锁指示信号,高电平表示开锁,低电平表示锁住 HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示 HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示 HEX2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管显示 HEX3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管显示 ); END mimasuo; ARCHITECTURE trans OF mimasuo IS --例化报警模块 --4x4矩阵键盘模块 COMPONENT key_4x4 IS PORT ( clk : IN STD_LOGIC; reset : IN STD_LOGIC; L_row : IN STD_LOGIC_VECTOR(3 DOWNTO 0);--行 H_col : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--列 key_number : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)--按键键值 ); END COMPONENT; --报警模块 COMPONENT alarm_on IS PORT ( clk : IN STD_LOGIC; current_state : IN STD_LOGIC_VECTOR(2 DOWNTO 0); alarm : OUT STD_LOGIC ); END COMPONENT; --修改密码模块(寄存器模块,存储正确密码) COMPONENT reset_password IS PORT ( clk : IN STD_LOGIC; password : IN STD_LOGIC_VECTOR(15 DOWNTO 0); correct_password : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); confirm : IN STD_LOGIC; current_state : IN STD_LOGIC_VECTOR(2 DOWNTO 0) ); END COMPONENT; --例化显示模块 COMPONENT display IS PORT ( clk : IN STD_LOGIC; password : IN STD_LOGIC_VECTOR(15 DOWNTO 0);--当前输入密码 HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT; --例化密码输入模块 COMPONENT mima_input IS PORT ( clk : IN STD_LOGIC; key_0 : IN STD_LOGIC; key_1 : IN STD_LOGIC; key_2 : IN STD_LOGIC; key_3 : IN STD_LOGIC; key_4 : IN STD_LOGIC; key_5 : IN STD_LOGIC; key_6 : IN STD_LOGIC; key_7 : IN STD_LOGIC; key_8 : IN STD_LOGIC; key_9 : IN STD_LOGIC; delect : IN STD_LOGIC;--删除键 current_state : IN STD_LOGIC_VECTOR(2 DOWNTO 0); password : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); END COMPONENT; --例化密码锁控制模块 COMPONENT mimasuo_ctrl IS PORT ( clk : IN STD_LOGIC; password : IN STD_LOGIC_VECTOR(15 DOWNTO 0); correct_password : IN STD_LOGIC_VECTOR(15 DOWNTO 0); confirm : IN STD_LOGIC; reset : IN STD_LOGIC; modify : IN STD_LOGIC; lock_up : IN STD_LOGIC; led_open : OUT STD_LOGIC; current_state : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ); END COMPONENT; --定义信号 SIGNAL current_state : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL password : STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL correct_password : STD_LOGIC_VECTOR(15 DOWNTO 0);
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
整体仿真图
上图仿真过程为先输入1234开锁(默认密码1234),开锁后按下修改键进入修改模式,再输入2537,确认,将密码修改为2537,再关锁。然后再输入1234,无法开锁,在输入2537,开锁。
矩阵键盘模块仿真
显示模块
上图仿真的是数码管显示模块,4个数码管显示输入的4位密码,每输入1位,密码左移一次。
密码输入模块
上图为密码输入模块,按键0~9输入密码,每输入1位,密码左移一次。
密码锁控制模块
密码锁控制模块为状态机控制,state信号为当前状态指示,密码正确时led_open输出高电平。Error_cnt信号为输入密码错误计数。
密码修改模块
在密码修改状态下,输入新的密码并按下确认键,修改密码。上图为将密码1234修改为2537
报警模块
State为密码锁当前状态,当密码输入连续错误3次,报警,上图仿真输入错误只有1次,无报警。