SOPCEDA综合课程设计Word格式.docx

上传人:b****4 文档编号:16681536 上传时间:2022-11-25 格式:DOCX 页数:25 大小:502.53KB
下载 相关 举报
SOPCEDA综合课程设计Word格式.docx_第1页
第1页 / 共25页
SOPCEDA综合课程设计Word格式.docx_第2页
第2页 / 共25页
SOPCEDA综合课程设计Word格式.docx_第3页
第3页 / 共25页
SOPCEDA综合课程设计Word格式.docx_第4页
第4页 / 共25页
SOPCEDA综合课程设计Word格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

SOPCEDA综合课程设计Word格式.docx

《SOPCEDA综合课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《SOPCEDA综合课程设计Word格式.docx(25页珍藏版)》请在冰豆网上搜索。

SOPCEDA综合课程设计Word格式.docx

1.2系统设计要求及内容

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

(1) 

数码输入:

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

(2) 

数码清除:

按下此键可清除前面所有的输入值,清除成为“0000”。

(3) 

密码更改:

按下此键时会将目前的数字设定成新的密码。

(4) 

激活电锁:

按下此键可将密码锁上锁。

(5) 

解除电锁:

按下此键会检查输入的密码是否正确,密码正确即开锁。

其中所有功能自行设计。

第二章系统设计方案

2.1.密码锁的组成部分

作为通用电子密码锁,主要由三个部分组成:

数字密码输入电路、密码锁控制电路和密码锁显示电路。

根据以上选定的输入设备和显示器件,并考虑到实现各项数字密码锁功能的具体要求,整个电子密码锁系统的总体组成框图如图2.1所示。

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

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

(3) 

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

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

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

4矩阵式键盘组成。

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

2.2.矩阵式键盘的工作原理

矩阵式键盘是一种常见的输入装置,在日常的生活中,矩阵式键盘在计算机、电话、手机、微波炉等各式电子产品上已经被广泛应用。

图2.3是一个3×

4矩阵式键盘的面板配置图,其中数字0~9作为密码数字输入按键,*作为“上锁”功能按键,#作为“解锁/清除”功能按键。

图2.3 

4矩阵式键盘的面板配

表2.1.行扫描信号、列按键输入信号与按键位置的关系

KY3~KY0

1110

1101

1011

0111

KX2~KX0

011

101

110

按键号

1

2

3

4

5

6

7

8

9

*

#

2.3.密码锁输入电路各主要功能模块的设计

2.3.1时序产生电路

本时序产生电路中使用了三种不同频率的工作脉冲波形:

系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、弹跳消除取样信号、键盘扫描信号。

2.3.2键盘扫描电路

扫描电路的作用是用来提供键盘扫描信号(表4.1中的KY3~KY0)的,扫描信号变化的顺序依次为1110-1101-1011-0111-1110......依序地周而复始。

2.3.3弹跳消除电路

由于本设计中采用的矩阵式键盘是机械开关结构,因此在开关切换的瞬间会在接触点出现信号来回弹跳的现象,对于电子密码锁这种灵敏度较高的电路这种弹跳将很可能会造成误动作输入,从而影响到密码锁操作的正确性。

从图1.4中可以观察出弹跳现象产生的原因,虽然只是按下按键一次然后放掉,然而实际产生的按键信号却不止跳动一次,经过取样信号的检查后,将会造成误判断,以为键盘按了两次。

如果调整抽样频率(如图1.5所示),可以发现弹跳现象获得了改善。

图2.4 

弹跳现象产生错误的抽样结果

图2.5调整抽样频率后得到的抽样结果

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

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

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

因为一般人的按键速度至多是10次/秒,亦即一次按键时间是100 

ms,所以按下的时间可估算为50 

ms。

以取样信号CLK的周期为8 

ms计,则可以取样到6次。

 

(2) 

对于不稳定的噪声,在4 

ms以下则至多抽样一次。

在触发器之前,接上AND-NOT之后,SR的组态如表1.2所示。

表2.2 

RS触发器真值表

S

R

D-OUT

不变

2.3.4键盘译码电路

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

表2.3键盘参数表

扫描位置

键盘输出

对应键盘按键

键盘译码输出

实现按键功能

F=0001

数码输入

F=0010

F=0011

F=0100

F=0101

F=0110

F=0111

F=1000

F=1001

T=0100

激活电锁

F=0000

T=0001

退格、解锁

2.3.5按键存储电路

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

按键存储电路可以使用

移位寄存器构成。

2.3.6密码锁输入电路模块框图

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

KEY_IN为键盘按键输入,CLK_SCAN为键盘扫描序列输出,DATA_N:

数字输出功能,DATA_F:

功能输出,FLAG_N为数字输出标志,FLAG_F为功能输出(上锁及开锁)标志,CLK_CTR是控制电路工作时钟信号,CLK_DEBOUNCE是去抖电路工作时钟信号,大约125Hz。

图2.7.密码输入模块框图

密码锁控制电路的设计

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

2.4.1.数字按键输入的响应控制

1) 

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

2) 

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

3) 

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

2.4.2.功能按键输入的响应控制

控制功能如下:

清除键:

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

激活电锁键:

按下此键时可将密码锁的门上锁。

(上锁前必须预先设定一个四位的数字密码。

解除电锁键:

按下此键会检查输入的密码是否正确,若密码正确无误则开门。

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

2.4.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.密码控制模块图

2.5、密码锁显示电路的设计

密码锁显示电路的设计比较简单,这里直接采用四个4-7译码器来实现。

BCD---七段显示译码器(74LS48) 

1)输入:

8421BCD码,用A3A2A1A0表示(4位)。

2)输出:

七段显示,用Ya~Yg表示(7位)

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

译码器引脚如下图所示:

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

第三章密码锁的整体组装设计

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

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

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

第四章各个模块VHDL源程序及其仿真波形图

4.1键盘输入去抖电路的VHDL源程序(附仿真图)

--DEBOUNCING.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

LIBRARYALTERA;

USEALTERA.MAXPLUS2.ALL;

ENTITYDEBOUNCINGIS

PORT(D_IN,CLK:

INSTD_LOGIC;

DD1,DD0,QQ1,QQ0:

OUTSTD_LOGIC;

D_OUT,D_OUT1:

OUTSTD_LOGIC);

ENDENTITYDEBOUNCING;

ARCHITECTUREARTOFDEBOUNCINGIS

COMPONENTDCFQIS

PORT(CLK,CLRN,PRN,D:

Q:

OUTSTD_LOGIC);

ENDCOMPONENTDCFQ;

SIGNALVCC,INV_D:

STD_LOGIC;

SIGNALQ0,Q1:

SIGNALD1,D0:

BEGIN

VCC<

='

1'

;

INV_D<

=NOTD_IN;

U1:

DCFQPORTMAP(CLK=>

CLK,CLRN=>

INV_D,PRN=>

VCC,D=>

VCC,Q=>

Q0);

U2:

Q0,PRN=>

Q1);

PROCESS(CLK)

IFCLK'

EVENTANDCLK='

THEN

D0<

=NOTQ1;

D1<

=D0;

ENDIF;

ENDPROCESS;

DD0<

DD1<

=D1;

QQ1<

=Q1;

QQ0<

=Q0;

D_OUT<

=NOT(D1ANDNOTD0);

D_OUT1<

=NOTQ1;

ENDARCHITECTUREART;

--DCFQ.VHD

ENTITYDCFQIS

ENDENTITYDCFQ;

ARCHITECTUREARTOFDCFQIS

PROCESS(CLK,CLRN,PRN)

IFCLRN='

0'

ANDPRN='

Q<

='

;

ELSIFCLRN='

ELSIFCLK'

Q<

=D;

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

图中输出信号QQ0,QQ1,D_OUT1,DD0,DD1是为便于仿真时观察中间结果而增加的观测点的输出,可以在程序中去掉,CLK为时钟脉冲信号,当检测到有键按下时,即D_IN为高电平时,对按键进行去抖,可以消除在开关切换的瞬间会在接触点出现信号来回弹跳的现象。

图4.1键盘输入去抖电路DEBOUNCING.VHD的仿真结果图

4.2密码锁输入电路的VHDL源程序(附仿真图)

--KEYBOARD.VHD

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYKEYBOARDIS

PORT(CLK_1K:

INSTD_LOGIC;

--系统原始时钟脉冲(1kHz)

KEY_IN:

INSTD_LOGIC_VECTOR(2DOWNTO0);

--按键输入

CLK_SCAN:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

--(仿真时用)键盘扫描序列

DATA_N:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

--数字输出

DATA_F:

--功能输出

FLAG_N:

OUTSTD_LOGIC;

--数字输出标志

FLAG_F:

--功能输出标志

CLK_CTR:

--控制电路工作时钟信号

CLK_DEBOUNCE:

OUTSTD_LOGIC--(仿真时用)去抖电路工作时钟信号

);

ENDENTITYKEYBOARD;

ARCHITECTUREARTOFKEYBOARDIS

COMPONENTDEBOUNCINGIS

PORT(D_IN:

CLK:

D_OUT:

OUTSTD_LOGIC);

ENDCOMPONENTDEBOUNCING;

SIGNALCLK:

--电路工作时钟脉冲

SIGNALC_KEYBOARD:

STD_LOGIC_VECTOR(1DOWNTO0);

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

SIGNALC_DEBOUNCE:

--去抖时钟信号

SIGNALC:

STD_LOGIC_VECTOR(2DOWNTO0);

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

SIGNALN,F:

STD_LOGIC_VECTOR(3DOWNTO0);

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

SIGNALFN,FF:

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

SIGNALSEL:

STD_LOGIC_VECTOR(3DOWNTO0);

--内部连接

DATA_N<

=N;

DATA_F<

=F;

FLAG_N<

=FN;

FLAG_F<

=FF;

CLK_CTR<

=CLK;

--扫描信号发生器

COUNTER:

BLOCKIS

SIGNALQ:

STD_LOGIC_VECTOR(5DOWNTO0);

STD_LOGIC_VECTOR(3DOWNTO0);

--1110-1101-1011-0111

PROCESS(CLK_1K)IS

IFCLK_1K'

EVENTANDCLK_1K='

=Q+1;

ENDIF;

C_DEBOUNCE<

=Q

(2);

--去抖时钟信号,大约125Hz

C_KEYBOARD<

=Q(2DOWNTO1);

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

--C_DEBOUNCE<

=Q

(1);

--仿真时用

--C_KEYBOARD<

=Q(5DOWNTO4);

--仿真时用

CLK<

=Q(0);

ENDPROCESS;

CLK_DEBOUNCE<

=C_DEBOUNCE;

SEL<

="

1110"

WHENC_KEYBOARD=0ELSE

"

1101"

WHENC_KEYBOARD=1ELSE

1011"

WHENC_KEYBOARD=2ELSE

0111"

WHENC_KEYBOARD=3ELSE

1111"

CLK_SCAN<

=SEL;

ENDBLOCKCOUNTER;

--键盘去抖

DEBOUNUING:

DEBOUNCINGPORTMAP(D_IN=>

KEY_IN(0),D_OUT=>

C(0),

CLK=>

C_DEBOUNCE);

KEY_IN

(1),D_OUT=>

C

(1),

U3:

KEY_IN

(2),D_OUT=>

C

(2),

C_DEBOUNCE);

ENDBLOCKDEBOUNUING;

--键盘译码

KEY_DECODER:

BLOCK

SIGNALZ:

STD_LOGIC_VECTOR(4DOWNTO0);

--按键位置

PROCESS(CLK)

Z<

=C_KEYBOARD&

C;

IFCLK'

EVENTANDCLK='

CASEZIS

WHEN"

11101"

=>

N<

="

0000"

--0

00011"

0001"

--1

00101"

0010"

--2

00110"

0011"

--3

01011"

0100"

--4

01101"

0101"

--5

01110"

0110"

--6

10011"

--7

10101"

1000"

--8

10110"

1001"

--9

WHENOTHERS=>

ENDCASE;

WHEN"

11011"

F<

--*_LOCK

11110"

--#_UNLOCK

WHENOTHERS=>

FN<

=NOT(N(3)ANDN

(2)ANDN

(1)ANDN(0));

FF<

=F

(2)ORF(0);

ENDBLOCKKEY_DECODER;

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

2、若

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1