电子密码锁.docx

上传人:b****6 文档编号:6284830 上传时间:2023-01-05 格式:DOCX 页数:10 大小:327.49KB
下载 相关 举报
电子密码锁.docx_第1页
第1页 / 共10页
电子密码锁.docx_第2页
第2页 / 共10页
电子密码锁.docx_第3页
第3页 / 共10页
电子密码锁.docx_第4页
第4页 / 共10页
电子密码锁.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

电子密码锁.docx

《电子密码锁.docx》由会员分享,可在线阅读,更多相关《电子密码锁.docx(10页珍藏版)》请在冰豆网上搜索。

电子密码锁.docx

电子密码锁

 

基本要求:

1、设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;

2、在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(设置成8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;

3、从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号,并输出一个信号推动LED不断闪烁。

一、总体设计思想

1.基本原理

本次设计的主要内容是设计一个密码锁的控制电路,第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,当输入正确代码时,输出开锁信号以推动执行机构工作。

此密码锁的基本要求是:

设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关的输入代码等于储存代码时,开锁;从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号,并输出一个信号推动LED不断闪烁。

随着电子产品向智能化和微型化的不断发展,EDA技术作为现代电子设计最新技术的结晶,给电子系统的设计带来了革命性的变化。

本设计一种电子密码锁系统,该系统具有软硬件设计简单、易于开发、成本低、安全可靠、操作方便等特点,可作为产品进行开发,应用于住宅,办公室的保险箱及档案等需要防盗的场所,有较强的实用性。

本系统由QuartusII软件、矩阵键盘、LED显示和报警系统组成。

4*4键盘组成0~9数字键,每按下一个键,相关键的值在数码管上显示,并依次左移;能够清除密码输入,并设置预置密码为“1234”;修改密码时,将当前输入设为新的密码;能完成上锁和开锁功能;当输入密码和预置密码一样时即可开锁。

具有确认、取消、修改、开锁、闭锁功能,用7段数码管组成显示电路提示信息。

2.设计框图

本次设计是采用一种是用QuartusII软件编程,利用VHDL描述数字系统的结构,行为,功能和接口,及其控制的准确性,来实现密码锁的设计。

VHDL编程有较大的活动空间,不但能实现锁要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。

在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,客服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都有大大提高一步。

随着大规模集成电路技术的发展,特别是VHDL的问世,出现了带微处理的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。

具体设计框图如下图所示:

二、设计步骤和调试过程

1、总体设计电路

2、模块设计和相应模块程序

主程序作为整个系统中最重要的部分,设计相当繁琐,而且还承担着其它子程序的连接任务,所以显得尤为重要,如果这个部分出了问题,那整个系统将会瘫痪。

首先是键盘输入电路,键盘的输入电路部分又分为键盘去抖电路和密码锁输入电路,下面先介绍键盘去抖电路部分。

键盘消抖部分是由两个小的模块集成为一个去抖电路的,所以在此分开介绍此两个模块。

第一个是DCFQ模块,如左图所示,模块外部信号端口为,CLK:

时钟脉冲输入端口,为电路提供原始始终信号,CLRM:

清零信号输入端口,PRN:

置位信号输入端口,Q:

信号输出端口。

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

IFCLRN='0'ANDPRN='1'THENQ<='0';

ELSIFCLRN='1'ANDPRN='0'THENQ<='1';

ELSIFCLK'EVENTANDCLK='1'THENQ<=D;ENDIF;

第二个是,DEBOUNCING模块模块外部信号端口如左图所示,其中D-IN:

信号输入端口,CLK:

时钟脉冲输入端口。

模块的内部信号有:

VCC:

模块内部信号,控制清零,Q0:

寄存D触发器处理过的信号,Q1:

与Q0信号做差分处,D1:

模块内部信号,D0:

模块内部信号,QQ0,QQ1,D_OUT1,DD0,DD1是为便于仿真时观察中间,结果而增加的观测点的输出端口(删除无影响)。

DEBOUNCING模块主要程序如下:

U1:

DCFQPORTMAP(CLK=>CLK,CLRN=>INV_D,PRN=>VCC,D=>VCC,Q=>Q0);U2:

DCFQPORTMAP(CLK=>CLK,CLRN=>Q0,PRN=>VCC,D=>VCC,Q=>Q1);PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEND0<=NOTQ1;D1<=D0;ENDIF;ENDPROCESS;DD0<=D0;DD1<=D1;QQ1<=Q1;QQ0<=Q0;

D_OUT<=NOT(D1ANDNOTD0);

D_OUT1<=NOTQ1ENDARCHITECTUREART;

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

其次是密码锁输入电路,密码锁输入电路元件如右图所示:

其中模块外部信号端口有:

CLK-1K:

时钟脉冲输入端口,KEY-IN:

按键输入端口,CLK_SCAN:

键盘扫描序列(仿真时用),DATA_N:

数字输出端口,DATA_F:

功能输出端口,FLAG_N:

数字输出标志,FLAG_F:

功能输出标志,CLK_CTR:

控制电路工作时钟信号,CLK_DEBOUNCE:

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

其中模块内部信号:

CLK:

电路工作时钟脉冲,C_KEYBOARD:

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

去抖时钟信号,C:

键盘输入去抖后的寄存器,N,F:

数字、功能按键译码值的寄存器,FN,FF:

数字、功能按键标志值数字、功能按键,SEL:

模块内部信号,Z:

按键位置信号,密码锁输入电路主要程序为:

KEY_DECODER:

BLOCKSIGNALZ:

STD_LOGIC_VECTOR(4DOWNTO0);

BEGINPROCESS(CLK)BEGINZ<=C_KEYBOARD&C;

IFCLK'EVENTANDCLK='1'THENCASEZISWHEN"11101"=>N<="0000";

WHEN"00011"=>N<="0001";WHEN"00101"=>N<="0010";WHEN"00110"=>N<="0011";WHEN"01011"=>N<="0100";WHEN"01101"=>N<="0101";WHEN"01110"=>N<="0110";WHEN"10011"=>N<="0111";WHEN"10101"=>N<="1000";WHEN"10110"=>N<="1001";WHENOTHERS=>N<="1111";

ENDCASE;ENDIF;IFCLK'EVENTANDCLK='1'THENCASEZIS

WHEN"11011"=>F<="0100";WHEN"11110"=>F<="0001";WHENOTHERS=>F<="1000";ENDCASE;ENDIF;ENDPROCESS;

这段程序的作用是通过按键产生的信号进行译码,判断按键是数字还是上锁、解锁控制信号。

其中还包括密码锁控制电路,密码锁控制电路组成有:

模块外部信号端口:

CLK:

时钟脉冲输入端口,DATA_N:

数字输入端口,DATA_F:

功能输入端口,FLAG_N:

数字输入标志,FLAG_F:

功能输入标,EMLOCK:

密码锁控制信号输出端口,DATA-BCD:

按键显示输出端口

模块内部信号有:

ACC:

暂存键盘输入信息,REG:

密码存储位置,RR2:

寄存器清零信号,R1,R0:

模块内部信号,二者差分生成清零信号,NC:

移位寄存,

QA,QB:

上锁、解锁控制信号。

密码锁控制电路主要程序为:

KEYIN_PROCESS:

BLOCKISSIGNALRST,D0,D1:

STD_LOGIC;BEGINRST<=RR2;PROCESS(FLAG_N,RST)ISBEGIN

IFRST='1'THENACC<="0000000000000000";NC<="000";ELSE

IFFLAG_N'EVENTANDFLAG_N='1'THENIFNC<4THENACC<=ACC(11DOWNTO0)&DATA_N;NC<=NC+1;ENDIF;ENDIF;ENDIF;ENDPROCESS;

ENDBLOCKKEYIN_PROCESS;

以上程序的作用是清除、暂存按键输入数据,每输入一个数字,在数码管显示时都左移一位,直到输入位数达到4位,4位以后不再显示。

LOCK_PROCESS:

BLOCKISBEGIN

PROCESS(CLK,DATA_F)IS

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IFNC=4THEN

IFDATA_F

(2)='1'THEN--上锁控制信号有效

REG<=ACC;--密码存储QA<='1';QB<='0';

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

IFREG=ACCTHEN--密码核对

QA<='0';QB<='1';

ENDIF;

ELSIFACC="1000100010001000"THEN

QA<='0';QB<='1';

ENDIF;

这段程序的作用是在按下*键时将输入的密码跟已经存储的密码进行对比,如果一样,则密码锁开锁。

而在通过密码验证后可以按#键重新设定密码。

在这里值得注意的是有一个密码“8888”作为万用密码,也就是不论当前密码是什么,只要输入的密码为8888,则都可通过密码锁。

此次设计中还有必不可少的密码锁显示电路如下图所示:

其中模块外部信号端口为:

DATA-BCD:

密码信号输入端口,BLOCK:

密码锁状态信号显示灯。

根据设计要求,总程序为:

libraryieee;useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitylockisport(clk_1k:

instd_logic;--频率输入管脚

enter_2,enter_1:

instd_logic;--设密码确认及输入密码确认datain:

instd_logic_vector(3downto0);--密码数据输入

speaker:

outstd_logic;--喇叭

led_g,led_r:

outstd_logic);--绿灯及红灯

endentitylock;

architecturebehaveoflockis

signalram:

std_logic_vector(3downto0);

signaljudge:

std_logic;

signalclk:

std_logic;

signalturn_on,turn_off:

std_logic;

begin

process(Clk_1k)

variableclk_count:

std_logic_vector(8downto0):

="000000000";

begin

ifclk_1k'eventandclk_1k='1'then--分频

ifclk_count<511then

clk_count:

=clk_count+1;

else

clk_count:

="000000000";

clk<=notclk;endif;endif;endprocess;

process(datain,enter_1)--设置密码

begin

ifenter_1'eventandenter_1='1'then

ram<=datain;

endif;endprocess;

process(clk_1k)--判断第一位密码按下时开始计时

begin

ifclk_1k'eventandclk_1k='1'thenifenter_1='0'thenjudge<='0';endif;

ifjudge='0'andenter_1='1'then

ifdatain/=ramthenjudge<='1';endif;endif;endif;endprocess;

process(judge,clk,enter_2)

variablecount:

std_logic_vector(4downto0):

="00000";

variablejudge_sh:

std_logic_vector(1downto0):

="00";

variableswitch:

std_logic:

='0';--判断是否锁定键盘

begin

ifclk'eventandclk='1'then

ifenter_1='0'then--数据复位

count:

="00000";judge_sh:

="00";switch:

='0';

endif;

ifswitch='0'then

ifjudge='1'then

ifcount<"0101"thencount:

=count+1;

ifenter_2='1'then

ifdatain=ramthen

turn_on<='1';turn_off<='0';switch:

='1';--开锁

elseifjudge_sh<"10"thenjudge_sh:

=judge_sh+1;turn_on<='1';turn_off<='1';switch:

='0';

elseturn_on<='0';turn_off<='1';switch:

='1';endif;endif;elseturn_on<='0';turn_off<='0';switch:

='0';--等待下次输入

endif;elseturn_on<='0';turn_off<='1';switch:

='1';

endif;endif;endif;endif;endprocess;

process(clk,clk_1k,turn_on)

beginifclk'eventandclk='1'then

ifenter_1='0'then--数据复位

count:

="0000";count_sh:

="00";temp:

='0';temp_sh:

='0';

endif;ifturn_on='0'andturn_off='1'then

ifcount<"10100"then--响20秒

count:

=count+1;temp:

='1';led_g<='0';led_r<='1';

elsetemp:

='0';endif;endif;

speaker<=(temportemp_sh)andclk_1k;--驱动喇叭

endprocess;endbehave;

3、仿真及仿真结果分析

弹跳消除仿真破型:

密码锁输入模块仿真波形图:

控制电路仿真波形:

显示模块仿真波形:

本次的设计基本完成了设计的要求,设计出的密码锁有4*4键盘输入,LED数码显示,蜂鸣器设置。

具有数字键和确认删除功能,同时用户可根据需要修改密码,密码超次报警功能。

基本完成了预期的目标,系统硬件调试花费时间较长,最终基本达到了预期的目标,配合软件仿真的实现。

本次设计较为完善。

本次设计在键盘操作,及数码管显示电路的研究较为详细。

实时显示方面做的比较好。

但是由于时间仓促、条件有限,设计成果并不是很完美,但对于这一整个电子密码锁系统,设计的程序已经基本实现

三、结论及心得体会

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

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

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

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

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

参考资料

[1]潘松著.EDA技术实用教程(第二版).北京:

科学出版社,2005.

参考文献:

[2]刘常澍,赵雅兴.数字电路与FPGA[M].北京:

人民邮电出版社,

2004.

[3]任晓东,文博.CPLD/FPGA高级应用开发指南[M].北京:

电子工

业出版社,2003.

[4]汉泽西.EDA技术及其应用[M].北京:

北京航空航天大学出版

社,2004.

[5]王小军.VHDL简明教程[M].北京:

清华大学出版社,1997.

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

当前位置:首页 > 农林牧渔 > 农学

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

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