名称:6位数字密码锁设计VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
6位数字密码锁设计
1、设计密码锁,可以输入0~9个数,密码共6位
2、具体确认、重置、修改、输出、上锁控制按键
3、输入密码时可以删除重新输入,输入完成后按确认键
4、若密码正确则开锁,led提示开锁
5、密码错误3次则报警
软件版本:quartusII 9.0
1.报警模块alarm_on
2.显示模块display
3.密码输入模块
4.密码控制模块
5.重置密码模块
1. 工程文件
2. 程序文件
Quartus自带显示不出中文,建议看代码用notpad打开程序文件,可以看中文注释
3. 程序编译
4. RTL图
5. 仿真设置
6. 仿真图
1. 整体仿真图
输入6个密码后,按下delect(删除键),密码减为5个
2. 显示模块
对应修改代码
3. 密码输入模块
仿真图
上图可看出,按下删除键后,原本输入的325761,回退一位,变为32576
对应修改部分代码
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --密码输入模块 ENTITY mima_input IS PORT ( clk : IN STD_LOGIC; key_0 : IN STD_LOGIC;--按键0 key_1 : IN STD_LOGIC;--按键1 key_2 : IN STD_LOGIC;--按键2 key_3 : IN STD_LOGIC;--按键3 key_4 : IN STD_LOGIC;--按键4 key_5 : IN STD_LOGIC;--按键5 key_6 : IN STD_LOGIC;--按键6 key_7 : IN STD_LOGIC;--按键7 key_8 : IN STD_LOGIC;--按键8 key_9 : IN STD_LOGIC;--按键9 delect : IN STD_LOGIC;--删除键 current_state : IN STD_LOGIC_VECTOR(2 DOWNTO 0);--当前状态 current_num : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);--当前输入密码个数 password : OUT STD_LOGIC_VECTOR(23 DOWNTO 0) ); END mima_input; -- current_state=3'd0;锁住 -- current_state=3'd1;密码比对 -- current_state=3'd2;开锁 -- current_state=3'd3;密码错误 -- current_state=3'd4;修改密码 -- current_state=3'd5;报警 ARCHITECTURE trans OF mima_input IS --定义中间信号 SIGNAL current_num_buf : STD_LOGIC_VECTOR(2 DOWNTO 0):="000";--当前输入密码个数 SIGNAL delect_buf1 : STD_LOGIC := '0'; SIGNAL delect_buf2 : STD_LOGIC := '0'; SIGNAL key_0_buf1 : STD_LOGIC := '0'; SIGNAL key_1_buf1 : STD_LOGIC := '0'; SIGNAL key_2_buf1 : STD_LOGIC := '0'; SIGNAL key_3_buf1 : STD_LOGIC := '0'; SIGNAL key_4_buf1 : STD_LOGIC := '0'; SIGNAL key_5_buf1 : STD_LOGIC := '0'; SIGNAL key_6_buf1 : STD_LOGIC := '0'; SIGNAL key_7_buf1 : STD_LOGIC := '0'; SIGNAL key_8_buf1 : STD_LOGIC := '0'; SIGNAL key_9_buf1 : STD_LOGIC := '0'; SIGNAL key_0_buf2 : STD_LOGIC := '0'; SIGNAL key_1_buf2 : STD_LOGIC := '0'; SIGNAL key_2_buf2 : STD_LOGIC := '0'; SIGNAL key_3_buf2 : STD_LOGIC := '0'; SIGNAL key_4_buf2 : STD_LOGIC := '0'; SIGNAL key_5_buf2 : STD_LOGIC := '0'; SIGNAL key_6_buf2 : STD_LOGIC := '0'; SIGNAL key_7_buf2 : STD_LOGIC := '0'; SIGNAL key_8_buf2 : STD_LOGIC := '0'; SIGNAL key_9_buf2 : STD_LOGIC := '0'; SIGNAL key_0_rise : STD_LOGIC; SIGNAL key_1_rise : STD_LOGIC; SIGNAL key_2_rise : STD_LOGIC; SIGNAL key_3_rise : STD_LOGIC; SIGNAL key_4_rise : STD_LOGIC; SIGNAL key_5_rise : STD_LOGIC; SIGNAL key_6_rise : STD_LOGIC; SIGNAL key_7_rise : STD_LOGIC; SIGNAL key_8_rise : STD_LOGIC; SIGNAL key_9_rise : STD_LOGIC; SIGNAL delect_rise : STD_LOGIC; SIGNAL password_buf : STD_LOGIC_VECTOR(23 DOWNTO 0) := "000000000000000000000000"; BEGIN --信号缓存 PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN key_0_buf1 <= key_0; key_1_buf1 <= key_1; key_2_buf1 <= key_2; key_3_buf1 <= key_3; key_4_buf1 <= key_4; key_5_buf1 <= key_5; key_6_buf1 <= key_6; key_7_buf1 <= key_7; key_8_buf1 <= key_8; key_9_buf1 <= key_9; delect_buf1<=delect; delect_buf2<=delect_buf1; key_0_buf2 <= key_0_buf1; key_1_buf2 <= key_1_buf1; key_2_buf2 <= key_2_buf1; key_3_buf2 <= key_3_buf1; key_4_buf2 <= key_4_buf1; key_5_buf2 <= key_5_buf1; key_6_buf2 <= key_6_buf1; key_7_buf2 <= key_7_buf1; key_8_buf2 <= key_8_buf1; key_9_buf2 <= key_9_buf1; END IF; END PROCESS; --检测按键上升沿 key_0_rise <= key_0_buf1 AND NOT(key_0_buf2); key_1_rise <= key_1_buf1 AND NOT(key_1_buf2); key_2_rise <= key_2_buf1 AND NOT(key_2_buf2); key_3_rise <= key_3_buf1 AND NOT(key_3_buf2); key_4_rise <= key_4_buf1 AND NOT(key_4_buf2); key_5_rise <= key_5_buf1 AND NOT(key_5_buf2); key_6_rise <= key_6_buf1 AND NOT(key_6_buf2); key_7_rise <= key_7_buf1 AND NOT(key_7_buf2); key_8_rise <= key_8_buf1 AND NOT(key_8_buf2); key_9_rise <= key_9_buf1 AND NOT(key_9_buf2); delect_rise<= delect_buf1 AND NOT(delect_buf2); --按下一个按键后,整体密码左移4位 --按下删除键后,密码回退一个
源代码
点击下方的公众号卡片获取