(2)激活电锁键:按下此键时可将密码锁的门上锁。
(3)解除电锁键:按下此键会检查输入的密码是否正确,若密码正确无误则开门。
使用电子密码锁的时候,只会用到三种工作模式,其中输入文字模式用的是数字按键,只有上锁和开锁两个模式必须占用功能按键。但是在实际操作中,难免会有按错键的情况发生,使得“清除输入”功能是用的机率很高,所以在设计中共设置了两个功能按键,其中“接触电锁”和“清除电锁”共用一个功能按键,另一个功能按键是“激活电锁”。
--CTRL.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CTRL IS
PORT (DATA_N: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DATA_F: IN STD_LOGIC_VECTOR(3 DOWNTO 0); FLAG_N: IN STD_LOGIC; FLAG_F: IN STD_LOGIC; CLK: IN STD_LOGIC;
ENLOCK: OUT STD_LOGIC; --1: LOCK, 0: UNLOCK DATA_BCD: OUT STD_LOGIC_VECTOR (15 DOWNTO 0)); END ENTITY CTRL ;
ARCHITECTURE ART OF CTRL IS
SIGNAL ACC, REG: STD_LOGIC_VECTOR (15 DOWNTO 0); --ACC用于暂存键盘输入的信息,REG用于存储输入的密码 SIGNAL NC: STD_LOGIC_VECTOR (2 DOWNTO 0); SIGNAL RR2, CLR, BB, QA, QB: STD_LOGIC; SIGNAL R1, R0: STD_LOGIC; BEGIN
--寄存器清零信号的产生进程 PROCESS(CLK) BEGIN
IF CLK'EVENT AND CLK='1' THEN R1<=R0; R0<=FLAG_F; END IF;
RR2<=R1 AND NOT R0; CLR<=RR2; END PROCESS;
--按键输入数据的存储、清零进程 KEYIN_PROCESS : BLOCK IS
SIGNAL RST, D0, D1: STD_LOGIC ;
BEGIN RST <= RR2; PROCESS(FLAG_N, RST) IS
BEGIN
IF RST = '1' THEN
ACC <= \ --CLEAR INPUT NC <= \ ELSE
IF FLAG_N'EVENT AND FLAG_N = '1' THEN
IF NC < 4 THEN
ACC <= ACC(11 DOWNTO 0) & DATA_N ;
NC <= NC + 1 ; END IF;
END IF ;
END IF ; END PROCESS ;
END BLOCK KEYIN_PROCESS ;
--上锁/开锁控制进程 LOCK_PROCESS : BLOCK IS BEGIN
PROCESS(CLK, DATA_F) IS BEGIN
IF (CLK'EVENT AND CLK = '1') THEN
IF NC = 4 THEN
IF DATA_F(2) = '1' THEN --上锁控制信号有效
REG <= ACC ;
--密码存储
QA <= '1' ; QB <= '0';
ELSIF DATA_F(0) = '1' THEN --开锁控制信号有效
IF REG = ACC THEN QA<= '0'; QB <= '1' ; END IF ;
--密码核对
ELSIF ACC = \
--设置“8888”为万用密码
QA <= '0' ; QB<= '1';
END IF ; END IF;
END IF ;
END PROCESS ;
END BLOCK LOCK_PROCESS ; --输出上锁/开锁控制信号 ENLOCK <= QA AND NOT QB ; --输出显示信息 DATA_BCD<= ACC ; END ARCHITECTURE ART; 4.1.3电子密码锁显示模块
数码管显示原理
数字显示主要由LED数码管实现。LED可单独使用,也可组装成分段式或点阵式LED显示器件。分段式显示器由7条线段围成8型,每一段包含一个发光二极管,外加正向电压时二极管导通,发出清晰的光,有红、黄、绿等色。可以按照相关的规律控制各个发光段的亮、灭,这样就能达到显示各种字形或者符号的目的。图4.4介绍了左边右边是共阴式和共阳式LED数码管的原理图,以及共阴式的连接法和驱动原理。
图4.4 七段数码管电路图
BCD七段译码器的输入时一位BCD码(以D、C、B、A表示),输出是数码管各段的驱动信号(以Fa~Fg表示),也称4——7译码器。若用它驱动共阴极LED数码管,则输出应为高有效,即输出高1时,相应显示段发光。例如,当输入8421码DCBA=0100时,应显示4,即要求同时点亮b、c、f、g段,熄灭a、d、e段,故译码器的输出应为Fa~Fg=0110011,这也是一组代码,常称为段码。同理,根据组成0~9这10个字形的要求可以列出8421BCD七段译码器的真值表,见表4.5。
表4.5 七段译码器真值表
主要程序设计如下: CASE DATA_BCD IS
WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS =>DOUT7<= \
译码显示的实现
生成电路符号图4.6: