四位数电子密码锁
一,实验目的
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 ;
clk : IN STD_LOGIC ;
d_out : OUT STD_LOGIC ) ;
end component ;
SIGNAL CLK : STD_LOGIC ;
SIGNAL CLK_KEYBOARD : STD_LOGIC_VECTOR(1 downto 0) ;
SIGNAL CLK_DEBOUNCE : STD_LOGIC ;
做的时候说的污污情话SIGNAL CLK_DISPLAY : STD_LOGIC_VECTOR(1 downto 0) ;
SIGNAL C : STD_LOGIC_VECTOR(3 downto 0) ;
SIGNAL N : STD_LOGIC_VECTOR(3 downto 0) ;
SIGNAL F : STD_LOGIC_VECTOR(3 downto 0) ;
SIGNAL FN : STD_LOGIC ;
SIGNAL FF : STD_LOGIC ;
SIGNAL SEL : STD_LOGIC_VECTOR (3 downto 0) ;
SIGNAL ACC : STD_LOGIC_VECTOR (15 DOWNTO 0) ;
SIGNAL REG : STD_LOGIC_VECTOR (15 DOWNTO 0) ;
SIGNAL RR2 : STD_LOGIC ; -- ** RR2 = Clear停牌的股票是什么意思
SIGNAL QA, QB, BB : STD_LOGIC ;
SIGNAL NC : STD_LOGIC_VECTOR (2 DOWNTO 0) ;
SIGNAL DB : STD_LOGIC_VECTOR( 3 DOWNTO 0);-- Number TO Display
SIGNAL SEG : STD_LOGIC_VECTOR( 6 DOWNTO 0);-- SEG7 Display Signal
BEGIN
-
-******************************************* 连接模块-- CONNECTION
FLAG_NUMB <= FN ;
FLAG_FUNC <= FF ;
CLK_DEBOUNCE <= CLK ;
SELOUT <= '0'&CLK_DISPLAY ;
SEGOUT(6 DOWNTO 0) <= SEG; -- Seven Segment Display
--********************************************* 时钟模块-- scan signal generator
counter : block
Signal Q : STD_LOGIC_VECTOR(22 DOWNTO 0);
Signal S : STD_LOGIC_VECTOR(1 DOWNTO 0) ; --keyboard scan about 15Hz *** SIGNAL SEL : STD_LOGIC_VECTOR (3 downto 0);
BEGIN
PROCESS (Clk_4M) --各种时钟产生
Begin
IF CLK_4M'Event AND CLK_4M = '1' then
Q <= Q+1;
END IF;
END PROCESS;
CLK <= Q(0) ; --CLK = CLK_DEBOUNCE
CLK_KEYBOARD <= Q(5 DOWNTO 4) ; --产生扫描信号----- 32分频
CLK_DISPLAY <= Q(5 DOWNTO 4) ; 用于数码扫描时钟
-- To generate keyboard scan sequence 1110->1101->1011->0111 对应一,二,三,四行SEL <= "1110" WHEN CLK_KEYBOARD=0 ELSE ----行扫描
"1101" WHEN CLK_KEYBOARD=1 ELSE
"1011" WHEN CLK_KEYBOARD=2 ELSE
腊八节诗句"0111" ;
CLK_SCAN <= SEL ;
end block counter ;
--*********************************************
女人理财--debounuing ckt
debounuing : block ----消抖处理模块begin
魔兽世界怎么了U1: debouncing PORT MAP (
d_in => key_in(0) ,
d_out => C(0) ,
clk => CLK
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论