QUARTUS数字电子密码锁.docx

上传人:b****5 文档编号:14283667 上传时间:2023-06-22 格式:DOCX 页数:27 大小:406.31KB
下载 相关 举报
QUARTUS数字电子密码锁.docx_第1页
第1页 / 共27页
QUARTUS数字电子密码锁.docx_第2页
第2页 / 共27页
QUARTUS数字电子密码锁.docx_第3页
第3页 / 共27页
QUARTUS数字电子密码锁.docx_第4页
第4页 / 共27页
QUARTUS数字电子密码锁.docx_第5页
第5页 / 共27页
QUARTUS数字电子密码锁.docx_第6页
第6页 / 共27页
QUARTUS数字电子密码锁.docx_第7页
第7页 / 共27页
QUARTUS数字电子密码锁.docx_第8页
第8页 / 共27页
QUARTUS数字电子密码锁.docx_第9页
第9页 / 共27页
QUARTUS数字电子密码锁.docx_第10页
第10页 / 共27页
QUARTUS数字电子密码锁.docx_第11页
第11页 / 共27页
QUARTUS数字电子密码锁.docx_第12页
第12页 / 共27页
QUARTUS数字电子密码锁.docx_第13页
第13页 / 共27页
QUARTUS数字电子密码锁.docx_第14页
第14页 / 共27页
QUARTUS数字电子密码锁.docx_第15页
第15页 / 共27页
QUARTUS数字电子密码锁.docx_第16页
第16页 / 共27页
QUARTUS数字电子密码锁.docx_第17页
第17页 / 共27页
QUARTUS数字电子密码锁.docx_第18页
第18页 / 共27页
QUARTUS数字电子密码锁.docx_第19页
第19页 / 共27页
QUARTUS数字电子密码锁.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

QUARTUS数字电子密码锁.docx

《QUARTUS数字电子密码锁.docx》由会员分享,可在线阅读,更多相关《QUARTUS数字电子密码锁.docx(27页珍藏版)》请在冰点文库上搜索。

QUARTUS数字电子密码锁.docx

QUARTUS数字电子密码锁

1.概述

电子密码锁在生活中十分常见,在这我将设计一个具有较低成本的电子密码锁,本文讲述了我整个设计过程及收获。

讲述了电子密码锁的的工作原理以及各个模块的功能,并讲述了所有部分的设计思路,对各部分电路方案的选择、元器件的筛选、以及对它们的调试、对波形图的分析,到最后的总体图的分析。

2.设计要求

本设计名称为电子密码锁,用四个模块,分别为输入模块、控制模块、扫描器模块、显示模块,来控制密码的输入、验证与显示。

设计所要实现的功能为:

1数码输入:

手动用3个拨码开关与3个按键设计三位密码的输入,并在显示器显示出该数值。

2数码验证:

开锁时输入密码后,拨动RT键使其为高电平,而CHANGE为低电平检测,密码正确时开锁,输出LOCKOPEN灯灭,LOCKCLOSE灯亮,表示开锁成功。

3错误显示:

当密码输入错误时,LOCKOPEN灯亮,LOCKCLOSE灯灭,表示开锁失败。

4更改密码:

当改变密码时,按下CHANGE键使其为高电平,而RT为低电平时,可改变密码。

5密码清除:

按下REST可清除前面的输入值,清除为“888”。

3.总体框图

1)设计方案:

电子密码锁,主要由三部分组成:

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

作为电子密码锁的输入电路,可选用的方案有拨码与按键来控制输入和触摸式键盘输入等多种。

拨码与按键和触摸式4*4键盘相比简单方便而且成本低,构成的电路简单,本设计中采用拨码与按键来作为该设计的输入设备。

数字电子密码锁的显示信息电路可采用LED数码显示管和液晶屏显示两种。

液晶显示具有高速显示、可靠性高、易于扩展和升级的特点,但是普通的液晶存在亮度低、对复杂环境适应能力差的特点,但是在本设计中任然使用LED数码管。

根据以上选定的输入设备与与显示器件,并考虑到现实各项密码锁功能的具体要求,与系统的设计要求,系统设计采用自顶向下的设计方案。

整个密码锁系统的总体总体框图如图3.1所示。

输入模块

寄存器与清零信号发生电路

数值比较器

LED灯

扫描电路

三选一选择器

开/关锁电路

控制模块

 

 

显示模块

图3.1电子密码锁系统总体框图

4.电子密码锁的波形仿真

4.1电子密码锁的设计流程

使用QuartusⅡ进行电子密码锁设计的流程为

1.编写VHDL程序(使用TextEditor)(见附录);

2.编译VHDL程序(使用Compiler);

3.仿真验证VHDL程序(使用WaveformEditor,Simulator);

4.进行芯片的时序分析(使用TimingAnalyzer);

5.安排芯片管脚位置(使用FloorplanEditor);

6.下载程序至芯片(使用Programmer)。

5.功能模块

5.1输入模块

1)功能介绍

输入时有三个拨码键控制输入,每个拨码各控制一位密码,对于其中一个拨码键每拨一次码按一次按键,表示输入一位,当输入四位时输出一位数,用“888”作为初始密码。

2)输入模块与仿真图形

单脉冲控制如图5.1如下图

图5.1

上图为单脉冲控制输入,当M给一上升沿信号将在PUL输出一位与之对应的高或低电平。

四位串行输入并行输出寄存器如下图5.1.2

图5.1.2

上图为4为串行输入并行输出寄存器,它由4个D触发组成,当reset为高电平时,每给一脉冲输入数据将向右移一位二值代码,它能同时复位

3)程序的输入

在文本区内输入程序,程序如下:

单脉冲信号控制

puls.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYpulsIS

PORT(PUL,M:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC);

ENDpuls;

ARCHITECTUREBEHAVEOFpulsIS

SIGNALTEMP:

STD_LOGIC;

BEGIN

PROCESS(M)

BEGIN

IFM'EVENTANDM='1'THEN

IFPUL='1'THEN

TEMP<='1';

ELSETEMP<='0';

ENDIF;

ENDIF;

ENDPROCESS;

Q<=TEMP;

ENDBEHAVE;

4位串行输入并行输出寄存器

shifter.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYshifterIS

PORT

(din:

INSTD_LOGIC;

reset,CLK:

INSTD_LOGIC;

qout:

bufferSTD_LOGIC_VECTOR(0TO3)

);

ENDshifter;

ARCHITECTUREactOFshifterIS

BEGIN

PROCESS(CLK)

VARIABLEq:

STD_LOGIC_VECTOR(0TO3);

BEGIN

IFreset='0'THEN

q:

=(others=>'0');

ELSE

ifclk'eventandclk='1'then

q(3):

=q

(2);

q

(2):

=q

(1);

q

(1):

=q(0);

q(0):

=din;

ENDIF;

ENDIF;

qout<=q;

ENDPROCESS;

ENDarchitectureact;

5.2控制模块

1)功能介绍

开锁时输入密码后,拨动RT键使其为高电平,而CHANGE为低电平检测,密码正确时开锁,输出LOCKOPEN灯灭,LOCKCLOSE灯亮,表示开锁成功。

当密码输入错误时,LOCKOPEN灯亮,LOCKCLOSE灯灭,表示开锁失败。

当改变密码时,按下CHANGE键使其为高电平,而RT为低电平时,可改变密码。

按下REST可清除前面的输入值,清除为“888”。

2)控制模块与仿真图形

输入译码器图5.2.1,如下图

图5.2.2

上图为译码器将4位二值代码转化成BCD码从“0000”~“1001”表示

0~9。

表5-2输入译码的真值表

输入输出

DCBAY1Y2Y3Y4字形

000000000

000100011

001000102

001100113

010001004

010101015

011001106

011101117

100010008

100110019

表5-2

总功能控制模块图5.2.3,如下图

图5.2.3

当CHANGE为高电平且rt为低电平时开始输入密码这时lockopen为高电平,而lockclose为低电平,当rt为高电平,change为低电平时开始检测密码,如上图开始密码为“108”当再次出现“108”时lockopen为高电平,而lockclose为低电平,当密码错误时lockopen为低电平,而lockclose为高电平。

4选1选择器与扫描器图5.2.4,如下图

图5.2.4

如上图多路选择器可以从多组数据来源中选取一组送入目的地,在本设计中利用多路选择器做扫描电路来分别驱动输出装置,可以将低成本消耗,如上图当输入“819”时,在时钟地控制下qout将输出“819”,而与之对应的sel扫描对应的数码管。

在文本区内输入程序,程序如下:

输入译码器

KEY.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYKEYIS

PORT(clk:

INSTD_LOGIC;

data:

INSTD_LOGIC_VECTOR(3DOWNTO0);

q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

q1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDENTITYKEY;

ARCHITECTUREARTOFKEYIS

BEGIN

PROCESS(clk,data)IS

BEGIN

IFclk'EVENTANDclk='1'THEN

CASEdataIS

WHEN"0000"=>q<="0000";q1<="0000";

WHEN"0001"=>q<="0001";q1<="0001";

WHEN"0010"=>q<="0010";q1<="0010";

WHEN"0011"=>q<="0011";q1<="0011";

WHEN"0100"=>q<="0100";q1<="0100";

WHEN"0101"=>q<="0101";q1<="0101";

WHEN"0110"=>q<="0110";q1<="0110";

WHEN"0111"=>q<="0111";q1<="0111";

WHEN"1000"=>q<="1000";q1<="1000";

WHEN"1001"=>q<="1001";q1<="1001";

WHENOTHERS=>q<="0000";q1<="0000";

ENDCASE;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

总功能控制模块

Eleclock.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYEleclockIS

PORT(NB:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NS:

INSTD_LOGIC_VECTOR(3DOWNTO0);

NG:

INSTD_LOGIC_VECTOR(3DOWNTO0);

CLK:

INSTD_LOGIC;

CHANGE,RT:

INSTD_LOGIC;

DB:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

DS:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

DG:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

LOCKOPEN,LOCKCLOSE:

OUTSTD_LOGIC);

ENDENTITYEleclock;

ARCHITECTUREARTOFEleclockIS

COMPONENTKeyIS

PORT(CLK:

INSTD_LOGIC;

DATA:

INSTD_LOGIC_VECTOR(3DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

Q1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENTKey;

SIGNALENABLE,C0,C1,S,ENABLE1:

STD_LOGIC;

SIGNALTB,TS,TG,D_B,D_S,D_G:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

ENABLE<=CHANGEAND(NOTRT);

ENABLE1<=RTAND(NOTCHANGE);

U0:

KEYPORTMAP(CLK=>CLK,DATA=>NB,Q=>DB,Q1=>D_B);

U1:

KEYPORTMAP(CLK=>CLK,DATA=>NS,Q=>DS,Q1=>D_S);

U2:

KEYPORTMAP(CLK=>CLK,DATA=>NG,Q=>DG,Q1=>D_G);

PROCESS(CLK,D_B,D_S,D_G)IS

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFENABLE='1'THEN

TB<=D_B;

TS<=D_S;

TG<=D_G;

ENDIF;

IFENABLE1='1'THEN

IF(TB<=D_BANDTS<=D_SANDTG<=D_G)THEN

LOCKOPEN<='1';

LOCKCLOSE<='0';

ELSE

LOCKOPEN<='0';

LOCKCLOSE<='1';

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

4选1选择器与扫描器

sel.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYselIS

PORT(QIN1,QIN2,QIN3:

INSTD_LOGIC_VECTOR(3DOWNTO0);

CLK,RST:

INSTD_LOGIC;

QOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

sel:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDsel;

ARCHITECTUREARTOFselIS

BEGIN

PROCESS(CLK,RST)

VARIABLECNT:

INTEGERRANGE0TO2;

BEGIN

IF(RST='0')THEN

CNT:

=0;

sel<="00000000";

QOUT<="0000";

ELSIFCLK'EVENTANDCLK='1'THEN

IFCNT=2THEN

CNT:

=0;

ELSE

CNT:

=CNT+1;

ENDIF;

CASECNTIS

WHEN0=>QOUT<=QIN1;

sel<="11111110";

WHEN1=>QOUT<=QIN2;

sel<="11111101";

WHEN2=>QOUT<=QIN3;

sel<="11111011";

WHENOTHERS=>QOUT<="0000";

sel<="11111111";

ENDCASE;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

5.3显示模块

1)功能介绍

将密码用BCD七段数码管显示

2)显示模块与仿真波形图5.3,如下图

图5.3

上图将BCD码转化到七段译码电路上

表5-3BCD-七段数码管的真值表

输入输出

DCBAY1Y2Y3Y4Y5Y6Y7字形

000011111100

000101100001

001011011012

001101110013

010001100114

010110110115

011010111116

011111100007

100011111118

100111100119

表5-3

在文本区内输入程序,程序如下:

Seg7.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSeg7IS

PORT(num:

INSTD_LOGIC_VECTOR(3DOWNTO0);

led:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDSeg7;

ARCHITECTUREACTOFSeg7IS

BEGIN

LED<="1111110"WHENnum="0000"ELSE

"0110000"WHENnum="0001"ELSE

"1101101"WHENnum="0010"ELSE

"1111001"WHENnum="0011"ELSE

"0110011"WHENnum="0100"ELSE

"1011011"WHENnum="0101"ELSE

"1011111"WHENnum="0110"ELSE

"1110000"WHENnum="0111"ELSE

"1111111"WHENnum="1000"ELSE

"1111011"WHENnum="1001"ELSE

"1110111"WHENnum="1010"ELSE

"0011111"WHENnum="1011"ELSE

"1001110"WHENnum="1100"ELSE

"0111101"WHENnum="1101"ELSE

"1001111"WHENnum="1110"ELSE

"1000111"WHENnum="1111";

ENDACT;

6.总体设计电路图

1)功能介绍

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

2)顶层文件如下:

3)波形仿真如下:

图6﹒1

当change为高电平,rt为低电平时,输入“952”验证,当再次输入“952”时锁打开,设计正确。

设计心得体会

通过这次设计,使我对EDA产生了浓厚的兴趣。

特别是当每一个子模块编写调试成功时,心里特别的开心。

在编写蜂鸣器模块时,我遇到了很大的困难,一直被定时问题所困扰,解决了这个问题时,我特别的高兴。

写控制文件的程序时,也遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了。

再对控制模块仿真时,虽然语法正确,但连最基本的输入输出都进不去,我们弄了很多遍都不行,后来在老师的指导下我们才解决了这个问题。

另一个问题就是三个时钟信号的配合,其中显示模块和控制模块的信号频率要高。

其次,在进行引脚连接时一定要细心,有些引脚不能使用,我因为没注意使得开始时一直不能得到正确的结果。

这次EDA课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到的问题,反映出来我的许多不足之处,我以后要努力克服缺点。

总的来说,这次设计的密码锁还是比较成功的,在设计中遇到了很多问题,最后在同学和老师的辛勤的指导下外加上自己的努力,终于都得到了解决,因此很有成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。

参考文献

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

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

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

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

设计思想:

本课程设计主要是基于VHDL文本输入法设计电子密码锁。

基于EDA技术设计的电子密码锁,以其价格便宜、安全可靠、使用方便,受到了人们的普遍关注。

而以现场可编程逻辑器件(FPGA)为设计载体,以硬件描述语言(VHDE)为主要表达方式,以QuartusⅡ开发软件为设计工具设计的电子密码锁,由于其能够实现数码输入、数码清除、密码解除、密码更改、密码上锁和密码解除等功能,因此,能够满足社会对安全防盗的要求。

一、系统设计实现的基本功能

1、输入密码正确后,正确小灯(led)亮,错误小灯(led1)不亮;

2、正确修改密码后,正确小灯(led)不亮,错误小灯(led1)不亮;

3、输入错误密码,正确小灯(led)不亮,错误小灯(led1)亮,并有1KHz闹铃声产生;

4、按下reset后,密码归为初始密码。

开锁代码为8位二进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯D3。

否则系统进入“错误”状态,并发出报警信号。

数字锁的报警方式是点亮指示灯D6,并使喇叭鸣叫来报警,报警动作直到按下复位开关,报警才停止。

此时,数字锁自动进入等待下一次开锁的状态。

三.程序分析

比较部分

ifcounter="1000"then--输入为8位数码时比较

ifcode=getcodethen

led<='1';--正确灯亮

led1<='0';

ring<='0';

allow<='1';--允许修改密码

else

allow<='0';

led<='0';

led1<='1';--错误灯亮

ring<='1';--闹铃响

计数部分

counter<=counter+1;

 

四、结论及心得体会

仿真结果:

此次的设计是参考了《EDA技术实验与课程设计》里的程序,不过由于程序里面出现了不少的语法错误,使得在编译时出现了20多个错误,不过在看过书后,细心地检查过程序后方能纠正过来。

在纠正的过程中获益良多。

在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

感觉EDA还是很有研究价值的,能大大的减少设计者的工作量。

从编写程序到完成此次课程设计,亲自操作软件起来从生硬到熟练,现在能较娴熟的运用QuartusⅡ。

附:

VHDL源程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycodeis

port(clk:

instd_logic;--电路工作时的时钟信号

clk1:

instd_logic;--闹铃产生需要的时钟信号

k:

instd_logic;--高电平表示输入1

led:

outstd_logic;--输入正确时亮

led1:

outstd_logic;--输入错误时亮

reset:

instd_logic;--按下时复位

want:

instd_logic;--是否修改密码

alarm:

outstd_logic;--输出闹铃声

show:

outstd_logic_vector(3downto0));--提示作用

end;

architectureaofcodeis

signaltemp:

std_logic_vector(3downto0);--输入一位加1

signalcode:

std_logic_vector(7downto

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2