EDA课程设计电子密码锁

1 概述和设计要求 1.1概述

随着科技的发展,电子产品的应用越来越广泛,电子电路的设计也越来越重要。随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤其的突出,传统的机械锁由于结构简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到广大用户的亲昵。同时随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。用电子逻辑电路设计的密码锁经实际操作表明,该密码锁具有安全、实用、成本低等优点,符合一般用锁的需要,具有一定的现实意义。

在本次课程设计中,我的的题目是电子密码锁,由输入密码、设定密码、寄存电路、比较电路、显示电路、修改密码组成。主要工作部分是将输入密码与正确密码进行比较,密码正确时红色发光二极管亮,表示开锁成功,密码错误则蜂鸣器响三秒,表示开锁失败。同时经过显示译码器作用到数码显示器显示密码。随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。

1.2设计要求

利用基于所学EDA以及QuartusII7.2软件相关知识设计一个具有较高安全性和较低成本的通用电子密码锁,其具体功能要求如下:

(1) 数码输入:每按下一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,同时将先前输入的数据依序左移一个数字位置。

(2) 数码清除:按下此键可清除前面所有的输入值,清除成为“0000”。 (3) 密码更改:按下此键时会将目前的数字设定成新的密码。 (4) 激活电锁:按下此键可将密码锁上锁。

(5) 解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。

2功能模块整体结构设计

作为通用电子密码锁,主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。

根据以上选定的输入设备和显示器件,并考虑到实现各项数字密码锁功能的具体要

求,整个电子密码锁系统的总体组成框图如图2.1所示。

(1) 密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。

(2) 密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。

(3) 七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。

图2.1 数字电子密码锁系统总体框图

图2.2是电子密码锁的输入电路框图,由键盘扫描电路、弹跳消除电路、键盘译码电路、按键数据缓存器,加上外接的一个3×4矩阵式键盘组成。

图2.2电子密码锁的输入电路框图

3 各模块详细设计 3.1输入电路

(1)时序产生电路

本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。

(2) 键盘扫描电路

扫描电路的作用是用来提供键盘扫描信号(表4.1中的KY3~KY0)的,扫描

信号变化的顺序依次为1110-1101-1011-0111-1110......依序地周而复始。 (3) 键盘译码电路

上述键盘中的按键可分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除数码、退位、激活电锁、开锁等,详细功能参见表2.3。

表2.3 键盘参数表

(4) 弹跳消除电路

弹跳消除电路的实现原理如图1.6所示,先将键盘的输入信号D_IN做为电路的输入信号,CLK是电路的时钟脉冲信号,也就是取样信号,D_IN经过两级D触发器延时后再使用RS触发器处理。

D_I_OUT

CLK

图2.6 弹跳消除电路的内部实现原理图

此处RS触发器的前端连接和非门的处理原则是:

(1) 因为一般人的按键速度至多是10次/秒,亦即一次按键时间是100 ms,所以按下的时间可估算为50 ms。以取样信号CLK的周期为8 ms计,则可以取样到6次。

(2) 对于不稳定的噪声,在4 ms以下则至多抽样一次。

(3) 在触发器之前,接上AND-NOT之后,SR的组态如表1.2所示。 (5) 按键存储电路

因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕后的结果记录下来。按键存储电路可以使用移位寄存器构成。

(6) 密码锁输入电路模块框图

输入电路引脚图如下图所示,图中CLK_1K为系统原始时钟脉冲(1 kHz)

KEY_IN为键盘按键输入,CLK_SCAN为键盘扫描序列输出,DATA_N:数字输出功能,DATA_F:功能输出,FLAG_N为数字输出标志,FLAG_F为功能输出(上锁及开锁)标志,CLK_CTR是控制电路工作时钟信号,CLK_DEBOUNCE是去抖电路工作时钟信号,大约125 Hz 。

图2.7. 密码输入模块框图

3.2控制模块

密码锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按

键输入的响应控制。

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

1) 如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。 2) 假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有输入的数字,再重新输入四位数。

3) 由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第四个以后的数字。 (2) 功能按键输入的响应控制控制功能如下:

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

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

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

图2.8电子密码锁的三种模式及关系

(3) 密码控制模块图

模块引脚如下图所示:图中DATA_N[3..0]:4位行输入.DATA_N[3..

0]:为4位列扫描输出,FLAG_N和FLAG_F则对应ENLOCK实现清除/上锁功能, CLK为全局时钟信号,DATA_BCD[15..0]为输出16位BCD码,经译码器后转换 为4位密码输出。

图2.9.密码控制模块图

3.3显示模块

密码锁显示电路的设计比较简单,这里直接采用四个4-7译码器来实现。BCD---七段显示译码器(74LS48) 1)输入:8421BCD码,用A3 A2 A1 A0表示(4位)。 2)输出:七段显示,用Ya ~ Yg 表示(7位)

图中A[3..0]为按键输入在经过去抖电路后的的BCD码的高4位输入数值,经过4-7译码器译码后输出0~9之间的数值,因为输入为16位的BCD码,而每一个译码器仅4位输入,故一共需要4个译码器来实现密码锁显示电路的设计。译码器引脚如下图所示:

图2.10. 七段译码器输入输出引脚图

4 逻辑仿真与时序仿真的实现

1)将各个模块连接在一起实现。

将前面各个设计好的功能模块进行整合,可得到一个完整的电子密码锁系统的整体组装设计原理图,如图1.8所示

图3.1密码锁的整体组装设计原理

2)各个模块VHDL源程序及其仿真波形图 (1)

键盘输入去抖电路的VHDL源程序(附仿真图) --DEBOUNCING.VHD LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; LIBRARY ALTERA;

USE ALTERA.MAXPLUS2.ALL; ENTITY DEBOUNCING IS

PORT(D_IN, CLK: IN STD_LOGIC; DD1, DD0, QQ1, QQ0 : OUT STD_LOGIC; D_OUT, D_OUT1: OUT STD_LOGIC ); END ENTITY DEBOUNCING ;

ARCHITECTURE ART OF DEBOUNCING IS COMPONENT DCFQ IS

PORT(CLK, CLRN, PRN, D: IN STD_LOGIC; Q: OUT STD_LOGIC); END COMPONENT DCFQ;

SIGNAL VCC, INV_D : STD_LOGIC ; SIGNAL Q0, Q1 : STD_LOGIC ; SIGNAL D1, D0 : STD_LOGIC ; BEGIN VCC

INV_D

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 => Q1); PROCESS (CLK) BEGIN

IF CLK'EVENT AND CLK='1' THEN D0

DD0

USE IEEE.STD_LOGIC_1164.ALL; ENTITY DCFQ IS

PORT(CLK, CLRN, PRN, D: IN STD_LOGIC; Q: OUT STD_LOGIC); END ENTITY DCFQ ;

ARCHITECTURE ART OF DCFQ IS BEGIN

PROCESS (CLK, CLRN, PRN) BEGIN

IF CLRN='0' AND PRN='1' THEN Q

ELSIF CLRN='1' AND PRN='0' THEN Q

ELSIF CLK'EVENT AND CLK='1' THEN Q

END ARCHITECTURE ART;

对上述去抖电路源程序用quartus7.2进行时序仿真,得到仿真图如下:

图中输出信号QQ0,QQ1,D_OUT1,DD0,DD1是为便于仿真时观察中间结果而增加的观测点的输出,可以在程序中去掉,CLK为时钟脉冲

信号,当检测到有键按下时,即D_IN为高电平时接触点出现信号来回弹跳的现

象。

图4.1 键盘输入去抖电路DEBOUNCING.VHD的仿真结果图 (2)密码锁输入电路的VHDL源程序(附仿真图) --KEYBOARD.VHD LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY KEYBOARD IS

PORT (CLK_1K: IN STD_LOGIC ; --系统原始时钟脉冲(1 kHz)

KEY_IN: IN STD_LOGIC_VECTOR (2 DOWNTO 0); --按键输入 CLK_SCAN: OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; --( 仿真时用)键盘扫描序列

DATA_N: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; --数字输出 DATA_F: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; --功能输出 FLAG_N: OUT STD_LOGIC ; --数字输出标志 FLAG_F: OUT STD_LOGIC ; --功能输出标志

CLK_CTR: OUT STD_LOGIC; --控制电路工作时钟信号

CLK_DEBOUNCE: OUT STD_LOGIC; --(仿真时用)去抖电路工作时钟信号 );

END ENTITY KEYBOARD ;

ARCHITECTURE ART OF KEYBOARD IS

COMPONENT DEBOUNCING IS

PORT(D_IN: IN STD_LOGIC ;

CLK: IN STD_LOGIC ;

D_OUT: OUT STD_LOGIC ) ;

END COMPONENT DEBOUNCING;

SIGNAL CLK: STD_LOGIC ; --电路工作时钟脉冲 SIGNAL C_KEYBOARD: STD_LOGIC_VECTOR(1 DOWNTO 0);

--键扫信号“00-01-10-11”寄存器

SIGNAL C_DEBOUNCE: STD_LOGIC ;

--去抖时钟信号

SIGNAL C: STD_LOGIC_VECTOR(2 DOWNTO 0) ;

--键盘输入去抖后的寄存器

SIGNAL N , F: STD_LOGIC_VECTOR(3 DOWNTO 0) ;

--数字、功能按键译码值的寄存器

SIGNAL FN , FF: STD_LOGIC ;

--数字、功能按键标志值数字、功能按键

SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0) ;

BEGIN

--内部连接

DATA_N

DATA_F

FLAG_N

FLAG_F

CLK_CTR

--扫描信号发生器

COUNTER : BLOCK IS

SIGNAL Q: STD_LOGIC_VECTOR(5 DOWNTO 0);

SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0);

--1110-1101-1011-0111

BEGIN

PROCESS (CLK_1K) IS

BEGIN

IF CLK_1K'EVENT AND CLK_1K ='1' THEN

Q

END IF;

C_DEBOUNCE

C_KEYBOARD

-- 产生键扫信号***“00-01-10-11”, 大约16 Hz

--C_DEBOUNCE

--C_KEYBOARD

CLK

END PROCESS;

CLK_DEBOUNCE

SEL

"1101" WHEN C_KEYBOARD=1 ELSE

"1011" WHEN C_KEYBOARD=2 ELSE

"0111" WHEN C_KEYBOARD=3 ELSE

"1111";

CLK_SCAN

END BLOCK COUNTER ;

--键盘去抖

DEBOUNUING : BLOCK IS

BEGIN

U1: DEBOUNCING PORT MAP (D_IN => KEY_IN(0) , D_OUT => C(0), CLK => C_DEBOUNCE);

U2: DEBOUNCING PORT MAP (D_IN => KEY_IN(1) , D_OUT => C(1), CLK => C_DEBOUNCE);

U3: DEBOUNCING PORT MAP (D_IN => KEY_IN(2) , D_OUT => C(2), CLK => C_DEBOUNCE );

END BLOCK DEBOUNUING ;

--键盘译码

KEY_DECODER : BLOCK

SIGNAL Z : STD_LOGIC_VECTOR(4 DOWNTO 0) ;

BEGIN

PROCESS(CLK)

BEGIN

Z

IF CLK'EVENT AND CLK = '1' THEN

CASE Z IS

WHEN "11101" => N

WHEN "00011" => N

WHEN "00101" => N

WHEN "00110" => N

WHEN "01011" => N

WHEN "01101" => N

WHEN "01110" => N

WHEN "10011" => N

WHEN "10101" => N

WHEN "10110" => N

WHEN OTHERS => N

END CASE ;

--按键位置

END IF ;

IF CLK'EVENT AND CLK = '1' THEN

CASE Z IS

WHEN "11011" => F

WHEN "11110" => F

WHEN OTHERS => F

END CASE ;

END IF ;

END PROCESS ;

FN

FF

END BLOCK KEY_DECODER ;

END ARCHITECTURE ART;

说明 1、键盘译码电路除了负责将键盘送出的数据进行译码外,另外就是在译码的同时,必须判别所按下的是数字键还是功能键。

2、若为数字键,则flag_numb=1,且out_num 输出BCD 码显示电路。

3、若为功能键,则flag_func=1,且out_func 输出4 位码,并送往电锁控制电路。

4、对密码锁输入模块仿真如下图:图中的输出信号CLK_SCAN,C_DEBOUNCE是为便于仿真时观察中间结果而增加的观测点的输出,FLAG_N为数字输出标志,当输入为数字时为高电平,DATA_F为功能输出(4位),FLAG_F为功能输出标志当按键输入为退格键或确认键时为高电平输出,DATA_N为数字输出,即在数字输出标志为高电平时确认输出数值。

图4.2输入电路仿真结果图

(3)密码锁控制电路的VHDL源程序(附仿真图)

--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

END IF;

RR2

CLR

END PROCESS;

--按键输入数据的存储、清零进程

KEYIN_PROCESS : BLOCK IS

SIGNAL RST, D0, D1: STD_LOGIC ;

BEGIN

RST

PROCESS(FLAG_N, RST) IS

BEGIN

IF RST = '1' THEN

ACC

NC

ELSE

IF FLAG_N'EVENT AND FLAG_N = '1' THEN

IF NC

ACC

NC

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

QA

ELSIF DATA_F(0) = '1' THEN --开锁控制信号有效

IF REG = ACC THEN --密码核对

QA

END IF ;

ELSIF ACC = "[**************]0" THEN

--设置“8888”为万用密码

QA

END IF ;

END IF;

END IF ;

END PROCESS ;

END BLOCK LOCK_PROCESS ;

--输出上锁/开锁控制信号

ENLOCK

--输出显示信息

DATA_BCD

END ARCHITECTURE ART;

对密码控制电路模块进行时序仿真如下图: FLAG_N为数字输出标志,高电平时确认输出数字,FLAG_F为功能输出标志,密码控制模块根据4位按键输入在判断其为功能输入还是数字输入后输出16位BCD码。

图4.3密码锁控制电路仿真结果图

(4)密码锁显示电路七段译码器设计源程序(仿真图)

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY DECL7S IS

PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;

END ;

ARCHITECTURE one OF DECL7S IS

BEGIN

PROCESS( A )

BEGIN

CASE A IS

WHEN "0000" => LED7S

WHEN "0001" => LED7S

WHEN "0010" => LED7S

WHEN "0011" => LED7S

WHEN "0100" => LED7S

WHEN "0101" => LED7S

WHEN "0110" => LED7S

WHEN "0111" => LED7S

WHEN "1000" => LED7S

WHEN "1001" => LED7S

WHEN "1010" => LED7S

WHEN "1011" => LED7S

WHEN "1100" => LED7S

WHEN "1101" => LED7S

WHEN "1110" => LED7S

WHEN "1111" => LED7S

WHEN OTHERS => NULL ;

END CASE ;

END PROCESS ;

END ;

对七段数码显示译码器源程序仿真如下图,执行功能如下:将输入的BCD码的高4位进行转换,如图中输入为1011时,输出7C;输入为1000时,输出为7F。

图4.4 七段数码显示译码器仿真波形

5 设计结论

根据系统设计原理图,图中CLK为输入信号系统原始时钟脉冲(1 kHz),KEY_IN[2..0]为按键输入信号,即当有键按下时时钟脉冲信号检测到有信号输入,KEYBOARD模块对输入信号进行键盘扫描处理,判断按下的是数字键还是功能键,每次的输入数值都会通过七段译码器显示结果,最后在核定密码真确后则开锁。

6参考文献

[1] 宋武烈,等.《EDA技术实用教程》. 湖北科学技术出版社 ,2006

[2] 阎石主编.《数字电子技术基础》(第五版).高等教等育出版社.,2007

[3]谭会生,等 .《 EDA技术综合应用实例与分析》.西安电子科技出版社 ,2003

[4] 李国丽 朱维勇 何剑春.《EDA与数字系统设计》(第2版).机械工业出版社.,2002

1 概述和设计要求 1.1概述

随着科技的发展,电子产品的应用越来越广泛,电子电路的设计也越来越重要。随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤其的突出,传统的机械锁由于结构简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到广大用户的亲昵。同时随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。用电子逻辑电路设计的密码锁经实际操作表明,该密码锁具有安全、实用、成本低等优点,符合一般用锁的需要,具有一定的现实意义。

在本次课程设计中,我的的题目是电子密码锁,由输入密码、设定密码、寄存电路、比较电路、显示电路、修改密码组成。主要工作部分是将输入密码与正确密码进行比较,密码正确时红色发光二极管亮,表示开锁成功,密码错误则蜂鸣器响三秒,表示开锁失败。同时经过显示译码器作用到数码显示器显示密码。随着电子产品向智能化和微型化的不断发展,数字逻辑电路电子芯片已成为电子产品研制和开发首选的控制器。

1.2设计要求

利用基于所学EDA以及QuartusII7.2软件相关知识设计一个具有较高安全性和较低成本的通用电子密码锁,其具体功能要求如下:

(1) 数码输入:每按下一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,同时将先前输入的数据依序左移一个数字位置。

(2) 数码清除:按下此键可清除前面所有的输入值,清除成为“0000”。 (3) 密码更改:按下此键时会将目前的数字设定成新的密码。 (4) 激活电锁:按下此键可将密码锁上锁。

(5) 解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。

2功能模块整体结构设计

作为通用电子密码锁,主要由三个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路。

根据以上选定的输入设备和显示器件,并考虑到实现各项数字密码锁功能的具体要

求,整个电子密码锁系统的总体组成框图如图2.1所示。

(1) 密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。

(2) 密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。

(3) 七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。

图2.1 数字电子密码锁系统总体框图

图2.2是电子密码锁的输入电路框图,由键盘扫描电路、弹跳消除电路、键盘译码电路、按键数据缓存器,加上外接的一个3×4矩阵式键盘组成。

图2.2电子密码锁的输入电路框图

3 各模块详细设计 3.1输入电路

(1)时序产生电路

本时序产生电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。

(2) 键盘扫描电路

扫描电路的作用是用来提供键盘扫描信号(表4.1中的KY3~KY0)的,扫描

信号变化的顺序依次为1110-1101-1011-0111-1110......依序地周而复始。 (3) 键盘译码电路

上述键盘中的按键可分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除数码、退位、激活电锁、开锁等,详细功能参见表2.3。

表2.3 键盘参数表

(4) 弹跳消除电路

弹跳消除电路的实现原理如图1.6所示,先将键盘的输入信号D_IN做为电路的输入信号,CLK是电路的时钟脉冲信号,也就是取样信号,D_IN经过两级D触发器延时后再使用RS触发器处理。

D_I_OUT

CLK

图2.6 弹跳消除电路的内部实现原理图

此处RS触发器的前端连接和非门的处理原则是:

(1) 因为一般人的按键速度至多是10次/秒,亦即一次按键时间是100 ms,所以按下的时间可估算为50 ms。以取样信号CLK的周期为8 ms计,则可以取样到6次。

(2) 对于不稳定的噪声,在4 ms以下则至多抽样一次。

(3) 在触发器之前,接上AND-NOT之后,SR的组态如表1.2所示。 (5) 按键存储电路

因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完毕后的结果记录下来。按键存储电路可以使用移位寄存器构成。

(6) 密码锁输入电路模块框图

输入电路引脚图如下图所示,图中CLK_1K为系统原始时钟脉冲(1 kHz)

KEY_IN为键盘按键输入,CLK_SCAN为键盘扫描序列输出,DATA_N:数字输出功能,DATA_F:功能输出,FLAG_N为数字输出标志,FLAG_F为功能输出(上锁及开锁)标志,CLK_CTR是控制电路工作时钟信号,CLK_DEBOUNCE是去抖电路工作时钟信号,大约125 Hz 。

图2.7. 密码输入模块框图

3.2控制模块

密码锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按

键输入的响应控制。

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

1) 如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。 2) 假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有输入的数字,再重新输入四位数。

3) 由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第四个以后的数字。 (2) 功能按键输入的响应控制控制功能如下:

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

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

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

图2.8电子密码锁的三种模式及关系

(3) 密码控制模块图

模块引脚如下图所示:图中DATA_N[3..0]:4位行输入.DATA_N[3..

0]:为4位列扫描输出,FLAG_N和FLAG_F则对应ENLOCK实现清除/上锁功能, CLK为全局时钟信号,DATA_BCD[15..0]为输出16位BCD码,经译码器后转换 为4位密码输出。

图2.9.密码控制模块图

3.3显示模块

密码锁显示电路的设计比较简单,这里直接采用四个4-7译码器来实现。BCD---七段显示译码器(74LS48) 1)输入:8421BCD码,用A3 A2 A1 A0表示(4位)。 2)输出:七段显示,用Ya ~ Yg 表示(7位)

图中A[3..0]为按键输入在经过去抖电路后的的BCD码的高4位输入数值,经过4-7译码器译码后输出0~9之间的数值,因为输入为16位的BCD码,而每一个译码器仅4位输入,故一共需要4个译码器来实现密码锁显示电路的设计。译码器引脚如下图所示:

图2.10. 七段译码器输入输出引脚图

4 逻辑仿真与时序仿真的实现

1)将各个模块连接在一起实现。

将前面各个设计好的功能模块进行整合,可得到一个完整的电子密码锁系统的整体组装设计原理图,如图1.8所示

图3.1密码锁的整体组装设计原理

2)各个模块VHDL源程序及其仿真波形图 (1)

键盘输入去抖电路的VHDL源程序(附仿真图) --DEBOUNCING.VHD LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; LIBRARY ALTERA;

USE ALTERA.MAXPLUS2.ALL; ENTITY DEBOUNCING IS

PORT(D_IN, CLK: IN STD_LOGIC; DD1, DD0, QQ1, QQ0 : OUT STD_LOGIC; D_OUT, D_OUT1: OUT STD_LOGIC ); END ENTITY DEBOUNCING ;

ARCHITECTURE ART OF DEBOUNCING IS COMPONENT DCFQ IS

PORT(CLK, CLRN, PRN, D: IN STD_LOGIC; Q: OUT STD_LOGIC); END COMPONENT DCFQ;

SIGNAL VCC, INV_D : STD_LOGIC ; SIGNAL Q0, Q1 : STD_LOGIC ; SIGNAL D1, D0 : STD_LOGIC ; BEGIN VCC

INV_D

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 => Q1); PROCESS (CLK) BEGIN

IF CLK'EVENT AND CLK='1' THEN D0

DD0

USE IEEE.STD_LOGIC_1164.ALL; ENTITY DCFQ IS

PORT(CLK, CLRN, PRN, D: IN STD_LOGIC; Q: OUT STD_LOGIC); END ENTITY DCFQ ;

ARCHITECTURE ART OF DCFQ IS BEGIN

PROCESS (CLK, CLRN, PRN) BEGIN

IF CLRN='0' AND PRN='1' THEN Q

ELSIF CLRN='1' AND PRN='0' THEN Q

ELSIF CLK'EVENT AND CLK='1' THEN Q

END ARCHITECTURE ART;

对上述去抖电路源程序用quartus7.2进行时序仿真,得到仿真图如下:

图中输出信号QQ0,QQ1,D_OUT1,DD0,DD1是为便于仿真时观察中间结果而增加的观测点的输出,可以在程序中去掉,CLK为时钟脉冲

信号,当检测到有键按下时,即D_IN为高电平时接触点出现信号来回弹跳的现

象。

图4.1 键盘输入去抖电路DEBOUNCING.VHD的仿真结果图 (2)密码锁输入电路的VHDL源程序(附仿真图) --KEYBOARD.VHD LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY KEYBOARD IS

PORT (CLK_1K: IN STD_LOGIC ; --系统原始时钟脉冲(1 kHz)

KEY_IN: IN STD_LOGIC_VECTOR (2 DOWNTO 0); --按键输入 CLK_SCAN: OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; --( 仿真时用)键盘扫描序列

DATA_N: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; --数字输出 DATA_F: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ; --功能输出 FLAG_N: OUT STD_LOGIC ; --数字输出标志 FLAG_F: OUT STD_LOGIC ; --功能输出标志

CLK_CTR: OUT STD_LOGIC; --控制电路工作时钟信号

CLK_DEBOUNCE: OUT STD_LOGIC; --(仿真时用)去抖电路工作时钟信号 );

END ENTITY KEYBOARD ;

ARCHITECTURE ART OF KEYBOARD IS

COMPONENT DEBOUNCING IS

PORT(D_IN: IN STD_LOGIC ;

CLK: IN STD_LOGIC ;

D_OUT: OUT STD_LOGIC ) ;

END COMPONENT DEBOUNCING;

SIGNAL CLK: STD_LOGIC ; --电路工作时钟脉冲 SIGNAL C_KEYBOARD: STD_LOGIC_VECTOR(1 DOWNTO 0);

--键扫信号“00-01-10-11”寄存器

SIGNAL C_DEBOUNCE: STD_LOGIC ;

--去抖时钟信号

SIGNAL C: STD_LOGIC_VECTOR(2 DOWNTO 0) ;

--键盘输入去抖后的寄存器

SIGNAL N , F: STD_LOGIC_VECTOR(3 DOWNTO 0) ;

--数字、功能按键译码值的寄存器

SIGNAL FN , FF: STD_LOGIC ;

--数字、功能按键标志值数字、功能按键

SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0) ;

BEGIN

--内部连接

DATA_N

DATA_F

FLAG_N

FLAG_F

CLK_CTR

--扫描信号发生器

COUNTER : BLOCK IS

SIGNAL Q: STD_LOGIC_VECTOR(5 DOWNTO 0);

SIGNAL SEL: STD_LOGIC_VECTOR (3 DOWNTO 0);

--1110-1101-1011-0111

BEGIN

PROCESS (CLK_1K) IS

BEGIN

IF CLK_1K'EVENT AND CLK_1K ='1' THEN

Q

END IF;

C_DEBOUNCE

C_KEYBOARD

-- 产生键扫信号***“00-01-10-11”, 大约16 Hz

--C_DEBOUNCE

--C_KEYBOARD

CLK

END PROCESS;

CLK_DEBOUNCE

SEL

"1101" WHEN C_KEYBOARD=1 ELSE

"1011" WHEN C_KEYBOARD=2 ELSE

"0111" WHEN C_KEYBOARD=3 ELSE

"1111";

CLK_SCAN

END BLOCK COUNTER ;

--键盘去抖

DEBOUNUING : BLOCK IS

BEGIN

U1: DEBOUNCING PORT MAP (D_IN => KEY_IN(0) , D_OUT => C(0), CLK => C_DEBOUNCE);

U2: DEBOUNCING PORT MAP (D_IN => KEY_IN(1) , D_OUT => C(1), CLK => C_DEBOUNCE);

U3: DEBOUNCING PORT MAP (D_IN => KEY_IN(2) , D_OUT => C(2), CLK => C_DEBOUNCE );

END BLOCK DEBOUNUING ;

--键盘译码

KEY_DECODER : BLOCK

SIGNAL Z : STD_LOGIC_VECTOR(4 DOWNTO 0) ;

BEGIN

PROCESS(CLK)

BEGIN

Z

IF CLK'EVENT AND CLK = '1' THEN

CASE Z IS

WHEN "11101" => N

WHEN "00011" => N

WHEN "00101" => N

WHEN "00110" => N

WHEN "01011" => N

WHEN "01101" => N

WHEN "01110" => N

WHEN "10011" => N

WHEN "10101" => N

WHEN "10110" => N

WHEN OTHERS => N

END CASE ;

--按键位置

END IF ;

IF CLK'EVENT AND CLK = '1' THEN

CASE Z IS

WHEN "11011" => F

WHEN "11110" => F

WHEN OTHERS => F

END CASE ;

END IF ;

END PROCESS ;

FN

FF

END BLOCK KEY_DECODER ;

END ARCHITECTURE ART;

说明 1、键盘译码电路除了负责将键盘送出的数据进行译码外,另外就是在译码的同时,必须判别所按下的是数字键还是功能键。

2、若为数字键,则flag_numb=1,且out_num 输出BCD 码显示电路。

3、若为功能键,则flag_func=1,且out_func 输出4 位码,并送往电锁控制电路。

4、对密码锁输入模块仿真如下图:图中的输出信号CLK_SCAN,C_DEBOUNCE是为便于仿真时观察中间结果而增加的观测点的输出,FLAG_N为数字输出标志,当输入为数字时为高电平,DATA_F为功能输出(4位),FLAG_F为功能输出标志当按键输入为退格键或确认键时为高电平输出,DATA_N为数字输出,即在数字输出标志为高电平时确认输出数值。

图4.2输入电路仿真结果图

(3)密码锁控制电路的VHDL源程序(附仿真图)

--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

END IF;

RR2

CLR

END PROCESS;

--按键输入数据的存储、清零进程

KEYIN_PROCESS : BLOCK IS

SIGNAL RST, D0, D1: STD_LOGIC ;

BEGIN

RST

PROCESS(FLAG_N, RST) IS

BEGIN

IF RST = '1' THEN

ACC

NC

ELSE

IF FLAG_N'EVENT AND FLAG_N = '1' THEN

IF NC

ACC

NC

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

QA

ELSIF DATA_F(0) = '1' THEN --开锁控制信号有效

IF REG = ACC THEN --密码核对

QA

END IF ;

ELSIF ACC = "[**************]0" THEN

--设置“8888”为万用密码

QA

END IF ;

END IF;

END IF ;

END PROCESS ;

END BLOCK LOCK_PROCESS ;

--输出上锁/开锁控制信号

ENLOCK

--输出显示信息

DATA_BCD

END ARCHITECTURE ART;

对密码控制电路模块进行时序仿真如下图: FLAG_N为数字输出标志,高电平时确认输出数字,FLAG_F为功能输出标志,密码控制模块根据4位按键输入在判断其为功能输入还是数字输入后输出16位BCD码。

图4.3密码锁控制电路仿真结果图

(4)密码锁显示电路七段译码器设计源程序(仿真图)

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY DECL7S IS

PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;

END ;

ARCHITECTURE one OF DECL7S IS

BEGIN

PROCESS( A )

BEGIN

CASE A IS

WHEN "0000" => LED7S

WHEN "0001" => LED7S

WHEN "0010" => LED7S

WHEN "0011" => LED7S

WHEN "0100" => LED7S

WHEN "0101" => LED7S

WHEN "0110" => LED7S

WHEN "0111" => LED7S

WHEN "1000" => LED7S

WHEN "1001" => LED7S

WHEN "1010" => LED7S

WHEN "1011" => LED7S

WHEN "1100" => LED7S

WHEN "1101" => LED7S

WHEN "1110" => LED7S

WHEN "1111" => LED7S

WHEN OTHERS => NULL ;

END CASE ;

END PROCESS ;

END ;

对七段数码显示译码器源程序仿真如下图,执行功能如下:将输入的BCD码的高4位进行转换,如图中输入为1011时,输出7C;输入为1000时,输出为7F。

图4.4 七段数码显示译码器仿真波形

5 设计结论

根据系统设计原理图,图中CLK为输入信号系统原始时钟脉冲(1 kHz),KEY_IN[2..0]为按键输入信号,即当有键按下时时钟脉冲信号检测到有信号输入,KEYBOARD模块对输入信号进行键盘扫描处理,判断按下的是数字键还是功能键,每次的输入数值都会通过七段译码器显示结果,最后在核定密码真确后则开锁。

6参考文献

[1] 宋武烈,等.《EDA技术实用教程》. 湖北科学技术出版社 ,2006

[2] 阎石主编.《数字电子技术基础》(第五版).高等教等育出版社.,2007

[3]谭会生,等 .《 EDA技术综合应用实例与分析》.西安电子科技出版社 ,2003

[4] 李国丽 朱维勇 何剑春.《EDA与数字系统设计》(第2版).机械工业出版社.,2002


相关文章

  • 电子密码锁
  • 成绩 课 程 设 计 说 明 书 课程设计名称: 题 目: 学 院: 学 生 姓 名: 专 业: 学 号: 指 导 教 师: 电子技术课程设计 电子密码锁 电气信息学院 叶建雄 信 息 工 程 日期:2013年 月 日 电子密码锁 摘 要: ...查看


  • 单片机电子密码锁
  • 目 录 一电子密码锁 摘 要 1 绪 论 2 系统的总体设计和主要元器件介绍 2.1 系统方案论证选择 2.2 系统的总体思路设计 2.3 主要元器件介绍 2.3.1 AT89C51介绍 2.3.2 继电器介绍 2.3.3 LED数码管介绍 ...查看


  • 电子与信息技术1
  • 中等职业学校 电子与信息技术专业课程设置 一.招生对象与学制 本专业招收初中毕业生或具有同等学力者,学制3-4年. 二.培养目标与业务范围 (一) 培养目标 本专业培养与我国社会主义现代化建设要求相适应,在德.智.体.美等方面全面发展,具有 ...查看


  • 广东海洋大学本科生毕业论文(设计)一览表
  • 广东海洋大学本科生毕业论文(设计)一览表 学院 :信息学院 专业:电子信息工程专业 班级:1031-1036 本班第 页共9页 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 学 ...查看


  • 智力竞赛抢答器设计
  • 唐 山 学 院 程 设 计 题 目 智力竞赛抢答器设计 系 (部) 信息工程系 班 级 姓 名 学 号 指导教师 2014 年 6 月 30 日至 7 月 4 日 共 1 周 2014年 7 月 4 日 课程设计任务书 课程设计成绩评定表 ...查看


  • EDA电子技术课程设计教材与参考文献
  • EDA电子技术课程设计教材与参考文献 教材: 参考教材: 1 黄正瑾.在系统编程技术及其应用.南京:东南大学出版社,1997 2 彭介华.电子技术课程设计指导.北京:高等教育出版社,1997 3 李国丽,朱维勇.电子技术实验指导书.合肥:中 ...查看


  • 51单片机电子密码锁
  • 中北大学信息商务学院 课 程 设 计 说 明 书 学生姓名: 郑晓峰 学 号: 10050644X22 学生姓名: 梁一才 学 号: 10050644X30 学生姓名: 李 功 学 号: 10050644X32 学 院: 信息与通信工程 专 ...查看


  • 七人表决器课程设计报告
  • 课 程 设 计 课程名称 硬件描述语言与EDA 技术 题目名称 硬件描述语言与EDA 技术实践 学生学院 材料与能源 专业班级 11微电子学(1)班 学 号 学生姓名 指导教师 2014年 6月 27日 广东工业大学课程设计任务书 题目名称 ...查看


  • 八路抢答器EDA课程设计VHDL
  • 第一章 EDA技术简介 EDA在通信行业(电信)里的另一个解释是企业数据架构,EDA给出了一个企业级的数据架构的总体视图,并按照电信企业的特征,进行了框架和层级的划分. 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新 ...查看


热门内容