《eda电子密码锁.doc》由会员分享,可在线阅读,更多相关《eda电子密码锁.doc(19页珍藏版)》请在金锄头文库上搜索。
1、电子密码锁设计要求1) 设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;2) 在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;3) 从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。1、方案论证与对比1.1 方案一 方案一是用以AT89C2051为核心的单片机控制方案。共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下
2、干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。设计方框图如图1所示。密码修改电路键盘输入密码校验电路执行电路限时报警报警次数检测锁定五分钟开锁电路1.2 方案二方案二是用本学期所学的EDA技术中的VHDL语言来实现方案。设计方框图如图2所示。1.3 比较 由于单片机方案原理复杂,而且调试较为繁琐,并且是用C语言或者汇编语言实现功能,构成的是软件,容易受到外界影响;而有EDA技术中VHDL(硬件描述语言),
3、构成的是硬件本身,不容易受到外界的干扰,所以本文采用后一种方案。方案一是基于软件的编程语言,对硬件和软件的要求都很高,方案二则是基于硬件设计的语言,很容易对硬件电路实现编程下载;2.总体模块设计 本设计采用EDA技术和VHDL语言设计了一种按键输入密码并数码管回显,当输入正确密码时轰动绿灯亮、红灯熄灭表示开锁,而当输入错误密码时,红灯亮、绿灯熄灭表示关锁。密码模块校对模块5S延时脉冲模块红灯灭绿灯亮绿灯灭红灯亮20S报警20延时脉冲模块关锁开锁图3 系统整体组装设计原理图根据系统设计要求,系统设计采用自顶向下的设计方法。顶层设计采用原理图设计方式,系统的整体组装设计原理图如图2-1所示。它由时
4、钟电路按键控制输入模块、密码锁控制模块、数码管与LED显示模块和报警电路等四部分组成。程序下载后系统进入原始状态(原始密码),按下键8发光二极管8(绿灯)亮、法官二极管7(红灯)灭。当要重新设置密码时,直接输入自己想要设置的密码并按下键8,持续5S,数码管8由0变为1,此时7段数码管1、2、3、4、5、6对应显示新设置的密码。当要输入密码时,按下键7,先将密码清零,再随机输入一组6位密码,假如密码正确,发光二极管8(绿灯)立即亮;反之如不正确,等待5S,发光二极管7(红灯)亮并由蜂鸣器发出20S的报警信号。3.单元模块设计3.1 顶层模块设计该电子密码锁顶层文件使用原理图输入法,将按键、延时、
5、判断正误、出错红灯亮并报警、正确绿灯亮这几个模块连接在一起实现6位二进制密码锁功能。具体顶层原理图如图3-1所示:图4 密码锁顶层文件原理图3.2 密码输入模块1、本按键输入模块包括设置密码并读取、密码清零、输入密码、系统复位功能。该模块中我们设置了8个按键,各个按键的功能分别为:按键1、2、3、4、5、6分别对应6位二进制密码输入、键7为密码清零按键、键8为系统复位和密码读取按键。2、以上各子模块的设计均采用VHDL语言实现,其具体实现程序如下:Library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;e
6、ntity key isport( key_in1,key_in2,key_in3,key_in4,key_in5,key_in6 : in std_logic;clk: in std_logic; str : in std_logic;resert : in std_logic;clk20: in std_logic;ds: in std_logic; key_out : out std_logic_vector(5 downto 0); key_read: out std_logic;key_resert : out std_logic;key_r : out std_logic);end
7、 key;architecture key_mima of key is图5 密码输入模块 signal m :std_logic_vector(5 downto 0);signal sa :std_logic_vector(5 downto 0);signal dd: std_logic:=0;signal dd1: std_logic;signal count :std_logic_vector(3 downto 0) ;signal count2 :std_logic_vector(3 downto 0) ;signal count3 :std_logic_vector(3 downto
8、 0) ; beginc0:process(resert,key_in1,key_in2,key_in3,key_in4,key_in5,key_in6)beginif resert=1 then dd=0; - 全部清零 else if key_in1=1 or key_in2=1 or key_in3=1 or key_in4=1 or key_in5=1 or key_in6=1 then dd=1; end if; end if; - 只要有键按下,dd 将为高电平不变 key_r=dd; end process c0;cc: process(key_in5,key_in6,clk,r
9、esert)beginif clkevent and clk=1 then if ds=1 then - 保持 ds=1 ,持续5秒高电平 5秒后产生低电平,第5秒为低电平 -按下键八5秒后读取密码if count6 then key_read=0 ;count=count+1; else count=count; end if;if count=5 then key_read=1; end if;else count=0000 ;key_read=0; end if; end if;end process cc ;cc2: process(key_in1,key_in2 ,clk,reser
10、t)beginif clkevent and clk=1 then if ds=1 then - 保持ds=1,持续 3秒高电平 3秒后产生低电平,第3秒为低电平 - 按下按下键八三秒后对错误复位if count24 then key_resert=0 ;count2=count2+1; else count2=count2; end if;if count2=3 then key_resert=1; end if;else count2=0000 ;key_resert=0; end if; end if;end process cc2 ;c1:process(key_in1,str,sa)
11、 -按键1输入begin if str=1 or sa(0)=1 then m(0)=0;else if key_in1event and key_in1=1 then m(0)=not m(0);end if; end if; end process c1;c2:process(key_in2,str,sa) -按键2输入beginif str=1 or sa(1)=1 then m(1)=0;else if key_in2event and key_in2=1 then m(1)=not m(1);end if; end if; end process c2;c3:process(key_
12、in3,str,sa) -按键3输入beginif str=1 or sa(2)=1 then m(2)=0; else if key_in3event and key_in3=1 then m(2)=not m(2);end if; end if;end process c3;c4:process(key_in4,str,sa) -按键4输入beginif str=1 or sa(3)=1 then m(3)=0;else if key_in4event and key_in4=1 then m(3)=not m(3);end if; end if;end process c4;c5:pro
13、cess(key_in5,str,sa) -按键5输入beginif str=1 or sa(4)=1 then m(4)=0;else if key_in5event and key_in5=1 then m(4)=not m(4);end if; end if;end process c5;c6:process(key_in6,str,sa) -按键6输入beginif str=1 or sa(5)=1 then m(5)=0;else if key_in6event and key_in6=1 then m(5)=not m(5);end if; end if;end process c
14、6;v22:process(resert,clk20)beginif clk20event and clk20=1 thenif resert=1 thenif count3=7 then count3=count3 ; else count3=count3+1; sa=; if count3=5 then sa=; else sa=; end if;end if; else count3=0000;end if; end if;end process v22 ;key_out=m and (not sa);end key_mima;3.3显示模块1、本设计要求输入正确密码时,绿灯亮、红灯熄灭;当输入错误密码时,5S后红灯亮绿灯灭,同时要求发出20S的报警。为此我们设计发光二极管D7和D8分别表示红灯和绿灯,并用蜂鸣器作为报警电路。2、LED显示电路的VHDL程序如下:Library IEEE;use