1 / 19
文档名称:

EDA电子密码锁.doc

格式:doc   大小:288KB   页数:19页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

EDA电子密码锁.doc

上传人:梅花书斋 2020/2/12 文件大小:288 KB

下载得到文件列表

EDA电子密码锁.doc

文档介绍

文档介绍:电子密码锁设计要求1)设计一个密码锁的控制电路,当输入正确代码时,输出***信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示***;2)在锁的控制电路中储存一个可以修改的4位代码,当***按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,***;3)从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。1、方案论证与对比方案一方案一是用以AT89C2051为核心的单片机控制方案。共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。设计方框图如图1所示。密码修改电路键盘输入密码校验电路执行电路限时报警报警次数检测锁定五分钟***电路方案二方案二是用本学期所学的EDA技术中的VHDL语言来实现方案。设计方框图如图2所示。比较由于单片机方案原理复杂,而且调试较为繁琐,并且是用C语言或者汇编语言实现功能,构成的是软件,容易受到外界影响;而有EDA技术中VHDL(硬件描述语言),构成的是硬件本身,不容易受到外界的干扰,所以本文采用后一种方案。方案一是基于软件的编程语言,对硬件和软件的要求都很高,方案二则是基于硬件设计的语言,很容易对硬件电路实现编程下载;本设计采用EDA技术和VHDL语言设计了一种按键输入密码并数码管回显,当输入正确密码时轰动绿灯亮、红灯熄灭表示***,而当输入错误密码时,红灯亮、绿灯熄灭表示关锁。密码模块校对模块5S延时脉冲模块红灯灭绿灯亮绿灯灭红灯亮20S报警20延时脉冲模块关锁***图3系统整体组装设计原理图根据系统设计要求,系统设计采用自顶向下的设计方法。顶层设计采用原理图设计方式,系统的整体组装设计原理图如图2-1所示。它由时钟电路按键控制输入模块、密码锁控制模块、数码管与LED显示模块和报警电路等四部分组成。程序下载后系统进入原始状态(原始密码000000),按下键8发光二极管8(绿灯)亮、法官二极管7(红灯)灭。当要重新设置密码时,直接输入自己想要设置的密码并按下键8,持续5S,数码管8由0变为1,此时7段数码管1、2、3、4、5、6对应显示新设置的密码。当要输入密码时,按下键7,先将密码清零,再随机输入一组6位密码,假如密码正确,发光二极管8(绿灯)立即亮;反之如不正确,等待5S,发光二极管7(红灯)亮并由蜂鸣器发出20S的报警信号。顶层模块设计该电子密码锁顶层文件使用原理图输入法,将按键、延时、判断正误、出错红灯亮并报警、正确绿灯亮这几个模块连接在一起实现6位二进制密码锁功能。具体顶层原理图如图3-1所示:图4密码锁顶层文件原理图密码输入模块1、本按键输入模块包括设置密码并读取、密码清零、输入密码、系统复位功能。该模块中我们设置了8个按键,各个按键的功能分别为:按键1、2、3、4、5、6分别对应6位二进制密码输入、键7为密码清零按键、键8为系统复位和密码读取按键。2、以上各子模块的设计均采用VHDL语言实现,其具体实现程序如下:LibraryIEEE;use;use;entitykeyis port(key_in1,key_in2,key_in3,key_in4,key_in5,key_in6:instd_logic; clk:instd_logic; str:instd_logic; resert:instd_logic; clk20:instd_logic; ds:instd_logic; key_out:outstd_logic_vector(5downto0); key_read:outstd_logic; key_resert:outstd_logic; key_r:outstd_logic);endkey;architecturekey_mimaofkeyis图5密码输入模块signalm:std_logic_vector(5downto0);signalsa:std_logic_vector(5downto0);signaldd:std_logic:='0';signaldd1:std_logic;signalcount:std_logic_vector(3downto0);signalcount2:std_logic_vector(3downto0);signalcount3:std_logic_vector(3downto0);beginc0:process(resert,key_in1,key_in2,key