实验报告四位数电子密码锁
- 格式:docx
- 大小:96.90 KB
- 文档页数:11
四位数电子密码锁
一,实验目的
1.学习查找相关资料,并对小型项目开发有一定的认识;
2.掌握能进行模块化设计的能力;
3.学会对各部分电路,进行讨论、说明与仿真验证,最后在整合起来。
二,硬件要求
1、拨位开关。
2、FPGA主芯片:EP1K30QC208。
3、LED显示模块。
4、4*4键盘。
5、七段数码管
三,实验原理
通过对4×4键盘进行扫描,然后获取其键值,并对其进行编码,从而进行按键的识别,并将相应的按键值进行显示。
键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配。
两功能键:在开锁状态时,一个用于清除数字,一个用于激活电锁。在上锁状态,一个用于清除,一个用于解除电锁。
四、实验内容及步骤
1、编写4*4数字密码锁的VHDL代码。
2、用MaxPlusII对其进行编译仿真。
3、在仿真确定无误后,选择芯片ACEX1K EP1K30QC208。
4、给芯片进行管脚绑定,在此进行编译。
5、根据自己绑定的管脚,在实验箱上对键盘接口、显示接口和FPGA之间进行正确
连线。
6、给目标板下载代码,在4×4键盘输入键值,观看实验结果。
五、程序代码及说明
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL ;
USE IEEE.STD_LOGIC_UNSIGNED.ALL ;
LIBRARY altera; ----这是利用库编译成的去拌电路。
USE altera.maxplus2.ALL;
entity debouncing is
port( D_IN,CLK :IN STD_LOGIC;
D_OUT:OUT STD_LOGIC);
END DEBOUNCING;
ARCHITECTURE A OF debouncing IS
SIGNAL VCC,INV_D:STD_LOGIC;
SIGNAL D1,D0:STD_LOGIC;
signal Q0,Q1: STD_LOGIC;
BEGIN
VCC<='1';
INV_D<=NOT D_IN;
DFF1: DFF PORT MAP(D=>VCC,Q=>Q0,CLK=>CLK,CLRN=>INV_D,PRN=>VCC);
DFF2: DFF PORT MAP(D=>VCC,Q=>Q1,CLK=>CLK,CLRN=>Q0,PRN=>VCC); PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
D0<=NOT Q1;
D1<=D0;
END IF;
END PROCESS;
D_OUT<=NOT(D1 AND NOT D0);
END A;
--*************************************************************** --这里密码锁的主程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL ;
USE IEEE.STD_LOGIC_UNSIGNED.ALL ;
LIBRARY altera;
USE altera.maxplus2.ALL;
--*********************************************
ENTITY elec_lock IS
PORT (
CLK_4M : IN STD_LOGIC ; --system original clock 4M
CLK_SCAN,outnum : OUT STD_LOGIC_VECTOR (3 downto 0) ; --scan sequence KEY_IN : IN STD_LOGIC_VECTOR (3 downto 0) ; --KEY IN button code
FLAG_NUMB : OUT STD_LOGIC ; 判断按下的是数字键
FLAG_FUNC : OUT STD_LOGIC ; 判断按下的是功能键
ENLOCK : OUT STD_LOGIC ; --1:LOCK, 0:UNLOCK
SELOUT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); ---38选择信号
SEGOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) -- SEG7 Display
);
END elec_lock ;
--********************************************* ARCHITECTURE a OF elec_lock IS
component debouncing --调用去抖
port( d_in : IN STD_LOGIC ;