毕业设计论文 - 基于FPGA的电子密码锁设计(5)

2019-01-26 17:19

基于FPGA的电子密码锁设计

q<='0';

elsif clrn='1' and prn='0' then q<='1';

elsif clk'event and clk='1' then q<=d; end if;

此段程序作用是判断输入信号是否有效, 如有效则输出,无效清零。 debouncing 模块主要程序如下:

u1:dcfq port map (clk=>clk,clrn=>inv_d,prn=>vcc,d=>vcc,q=>q0); u2:dcfq port map (clk=>clk,clrn=>q0,prn=>vcc,d=>vcc,q=>q0); process(clk) begin

if clk'event and clk='1' then d0<=not q1; d1<=d0; end if; end process;

dd0<=d0;dd1<=d1;qq1<=q1; qq0<=q0; d_out<=not (d1 and not d0); d_out1<=not q1; end architecture art;

这段程序的作用就是通过对信号的分频处理,从而将按键产生的不规则信号转换为便于识别的按键信号,达到消除抖动的目的。

4.1.3 键盘扫描电路

扫描电路的作用是用来提供键盘扫描信号的,扫描信号变化的顺序依次为1110-1101-1011-0111-1110……依序的周而复始。扫描时依序分别扫描四列按键,当扫描信号为1110时扫描KY3这一排按键;当扫描信号为1101室,扫描KY2这一排按键;当扫描信号为1011时,扫描KY1这一排按键;当扫描信号为0111时,扫描KY0这一排按键。每扫描一排按键就检查一次是否有键被按下,如果这排没有按键被按下就忽略,反之,如果出现被按下的键则立刻进行按键编码的动作,且将编码的结果储存于寄存器中。

- 17 -

基于FPGA的电子密码锁设计

--扫描信号发生器 counter: block is begin

process (clk_1k) is begin

if (clk_1k'event and clk_1k='1') then q<=q+1; end if ; k_srclk<=q(7); k_pos<=q(9 downto 8); end process ;

scan <=\ \ \ \ \ end block counter;

键盘扫描电路的作用是提供键盘扫描信号,扫描信号变化的顺序为1110- -1101-1011-0111-1110……周而复始。扫描信号0111代表扫描的为*、0、#这一排按键, 当*这个按键被按下时, 由CSR[1..0]读出的值为11,按键位置的数码关系如表4.6所列。

表4.1 按键位置的数码关系

扫描信号CSR[1..0] 键盘输出信号SEL[3..0] 按键号 1 2 3 4 5 6 7 8 9 * 0 0011 0101 0110 0011 0101 0110 0011 0101 0110 0011 0101 00 00 00 01 01 01 10 10 10 11 11 11 0110 # - 18 -

基于FPGA的电子密码锁设计

4.1.4 键盘译码电路

在密码输入电路中,按键又分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除键、上锁键和解锁键等。数字按键主要是用来输入数字的,但是键盘所产生的输出是无法直接拿来用作密码锁控制电路的输入的,另外,不同的按键具有不同的功能,所以必须由键盘译码电路来规划每个按键的输出形式,以便执行相应的动作。

键盘译码电路主要将所对应的键盘值设定成所要用的功能键,其主要程序如下:

z<=k_pos & c;

if (k_srclk'event and k_srclk = '1') then case z is

when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when others =>n<=\ end case; end if;

if k_srclk 'event and k_srclk='1' then case z is

when \ when \ when others =>f<=\ end case; end if;

- 19 -

基于FPGA的电子密码锁设计

4.1.5 键盘输入模块的实现

生成符号图如4.7:

mmsrclk_1kkey_in[2..0]data_n[3..0]data_f[3..0]flag_nflag_fksrclkkscan[3..0]kpos[1..0]inst1 图4.7 键盘输入电路符号图

模块外部信号端口:

clk_1k:时钟脉冲输入端口,为系统提供工作的时钟脉冲。 key_in:按键输入端口,为按键输入提供输入信号。 kscan:键盘扫描序列(仿真时用),为按键扫描提供信号。 data_n:数字输出端口,为数字的输出提供信号。 data_f:功能输出端口,为功能的输出提供信号。 flag_n::数字输出标志,用于识别数字是否输出。 flag_f:功能输出标志,用于识别功能是否输出。 ksrclk:键盘输入采样时钟。

kpos:按键位置,用于识别按键所在位置提供信号。 模块内部信号:

scan:键扫信号“00-01-10-11”寄存器 k_ksrclk:去抖时钟信号,为去抖提供信号。

c:键盘输入去抖后的寄存器,用于键盘去抖后存储键盘输入的寄存器。 n,f:数字、功能按键译码值的寄存器,用于存储数字、功能按键译码后的值。 fn,ff:数字、功能按键标志值数字、功能按键。 q:模块内部信号,用于识别各个信号所用。 k_pos:按键位置信号,用于提供按键位置所在信号。

- 20 -

基于FPGA的电子密码锁设计

4.2 电子密码锁控制模块

4.2.1 控制模块的描述

控制锁的控制模块是整个电路的控制中心,主要完成对数字按键输入和功能按键输入的相应控制。

1、数字按键输入的响应控制

(1)如果按下数字键,第一个数字会从显示其的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一个数码管,以便将新的数字显示出来。

(2)假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有出入的数字,再重新输入四位数。

(3)由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过预设位数时,电路不予理会,而且不再显示以后的数字。

2、功能按键输入的响应控制

(1)清除键:清除所有的输入数字,即作归零动作。

(2)激活电锁键:按下此键时可将密码锁的门上锁(上锁前必须预先设定一个四位的数字密码)。

(3)解除电锁键:按下此键会检查输入的密码是否正确,若密码正确无误则开门。

使用电子密码锁的时候,只会用到三种工作模式,其中输入文字模式用的是数字按键,只有上锁和开锁两个模式必须占用功能按键。但是在实际操作中,难免会有按错键的情况发生,使得“清除输入”功能是用的机率很高,所以在设计中共设置了两个功能按键,其中“接触电锁”和“清除电锁”共用一个功能按键,另一个功能按键是“激活电锁”。

4.2.2 控制模块的状态图与ASM图

控制模块的状态图如4.8图所示:

- 21 -


毕业设计论文 - 基于FPGA的电子密码锁设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013年暑期政治业务学习动员讲话稿

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: