My title page contents

6位数字密码锁设计VHDL代码Quartus仿真

名称:6位数字密码锁设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

6位数字密码锁设计

1、设计密码锁,可以输入0~9个数,密码共6位

2、具体确认、重置、修改、输出、上锁控制按键

3、输入密码时可以删除重新输入,输入完成后按确认键

4、若密码正确则开锁,led提示开锁

5、密码错误3次则报警

软件版本:quartusII 9.0


FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com


演示视频:

设计文档:

密码锁设计文档.doc

修改模块仿真图.doc

分模块仿真.doc

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位
   --按下删除键后,密码回退一个

代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 6位数字密码锁设计VHDL代码Quartus仿真

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

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

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