电子密码锁EDA课程设计Word格式文档下载.docx
《电子密码锁EDA课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电子密码锁EDA课程设计Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。
(1)、设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;
(2)、在锁的控制电路中储存一个能够修改的4位代码,当开锁按钮开关(可设置成6位至8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;
(3)、从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号。
2、要解决的关键问题
(1)、该题的主要任务是产生一个开锁信号,而开锁信号的形成条件是,输入代码和已设密码相同。
实现这种功能的电路构思有多种,例如,用两片8位锁存器,一片存入密码,另一片输入开锁的代码,经过比较的方式,若两者相等,则形成开锁信号。
(2)、在产生开锁信号后,要求输出声、光信号,声音的产生由开锁信号触动扬声器工作,光信号由开锁信号点亮LED指示灯;
(3)、用按钮开关的第一个动作信号触发一个5秒定时器,若5秒内无开锁信号产生,让扬声器发出特殊音响,以示警告,并输出一个信号推动LED不断闪烁。
二、设计方案
1、总体设计思想
本设计采用VHDL语言进行编程,把所有的功能都整合到一个程序,采用不同的进程将不同的功能区分开来。
该程序主要由密码输入进程、密码修改进程、密码锁操作进程、报警计时进程和报警动作进程等组成。
这样设计的好处是不用设计顶层文件或者顶层原理图,没有复杂的连线。
当然,仅仅是对于一些功能简单,代码较短的程序采用该种方法编程,而该题目正好符合这个条件。
该功能共有两个时钟信号,一个是键盘扫描和系统时钟,采用的是1Hz的时钟信号,该信号不但能够防止键盘抖动引起的误操作,还有助于系统计时。
因为报警电路中的蜂鸣器为无源蜂鸣器,因此需要一个方波信号来驱动蜂鸣器,使其发出声音。
因此又采用了一个1KHz的信号用于驱动蜂鸣器。
为了编程简单,本设计采用的是八个独立键盘,四个按键用于输入密码,四个按键作为功能键。
四位0000到9999可任意改变的密码,输入密码或者更改密码时,采用的是自加运算,当数字加到10以后,自动清零。
另外四个功能健分别是开锁键、关锁键、修改密码键、清除自锁健。
本设计采用LED显示和数码管显示,LED主要用于表示现在的密码锁的开关状态,数码管用于显示输入的数值。
该种显示清晰明了,能够防止误操作的发生。
另外还采用蜂鸣器和LED闪烁报警,当从输入第一个密码开始计时,如果5秒内没有开锁,密码锁会自动报警20S,并让一个LED灯闪烁,直到自锁信号解除。
2、系统设计实现的基本功能
(1)密码输入:
每按下一个数字键,就输入一个数值,并在显示器相应位置上显示出该数值。
(2)密码清除:
按下开锁键和关锁键进入锁定和开锁状态后,系统自动可清除前面所有的输入值,清除成为“0000”。
(3)密码更改:
当密码锁位于开锁状态下,按下更改键能够设定新的密码
(4)密码上锁:
按下上锁键可将密码锁上锁。
(5)密码解除:
按下解除键首先检查输入的密码是否正确,密码正确即解锁。
(6)密码自锁:
从输入第一个密码开始计时,如果5秒内没有开锁,密码锁会自动报警,并进入自锁状态,此时不允许任何操作。
(7)自锁清除:
经过自锁清除键能够清除自锁状态,使密码锁进入正常工作状态。
3、系统程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYLOCKIS
PORT(CLK,CLK5:
INSTD_LOGIC;
KEY1,KEY2,KEY3,KEY4,KEY5,KEY6,KEY7,KEY8:
Q1,Q2,Q3,Q4:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
LED_G,LED_R,LED,BEEP:
OUTSTD_LOGIC);
ENDLOCK;
ARCHITECTUREBEHAVOFLOCKIS
SIGNALPASSWORD1:
STD_LOGIC_VECTOR(3DOWNTO0):
="
0001"
;
SIGNALPASSWORD2:
SIGNALPASSWORD3:
SIGNALPASSWORD4:
SIGNALJISHI5:
0000"
SIGNALJISHI20:
STD_LOGIC_VECTOR(4DOWNTO0):
00000"
SIGNALZISUO,FLAG,BEEP_FLAG,KAI,LED_TMP:
STD_LOGIC:
='
0'
SIGNALCODE1,CODE2,CODE3,CODE4:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,key1,key2,key3,key4,key6)
IFZISUO='
ANDKEY6='
ANDKAI='
THEN
IFKEY1'
EVENTANDKEY1='
1'
THEN--用来输入代码,在关锁状况下,而且无开锁和设置密码信号下有效
IFCODE1<
9THENCODE1<
=CODE1+1;
ELSECODE1<
=(OTHERS=>
'
);
ENDIF;
IFKEY2'
EVENTANDKEY2='
IFCODE2<
9THENCODE2<
=CODE2+1;
ELSECODE2<
IFKEY3'
EVENTANDKEY3='
IFCODE3<
9THENCODE3<
=CODE3+1;
ELSECODE3<
IFKEY4'
EVENTANDKEY4='
IFCODE4<
9THENCODE4<
=CODE4+1;
ELSECODE4<
ELSIF(ZISUO='
ANDKEY7='
)THEN
CODE1<
CODE2<
CODE3<
CODE4<
--这一步很重要,重新上锁必须将密码值清零,不然会显示上次输入的密码
IFKEY6='
THEN--显示密码
Q1<
=PASSWORD1;
Q2<
=PASSWORD2;
Q3<
=PASSWORD3;
Q4<
=PASSWORD4;
THEN--显示要更改的密码
=CODE1;
=CODE2;
=CODE3;
=CODE4;
THEN--开锁后显示零
ELSIFZISUO='
THEN--按住KEY6设置密码,此时必须是开锁状态
IFPASSWORD1<
9THENPASSWORD1<
=PASSWORD1+1;
ELSEPASSWORD1<
THEN
IFPASSWORD2<
9THENPASSWORD2<
=PASSWORD2+1;
ELSEPASSWORD2<
IFPASSWORD3<
9THENPASSWORD3<
=PASSWORD3+1;
ELSEPASSWORD3<
IFPASSWORD4<
9THENPASSWORD4<
=PASSWORD4+1;
ELSEPASSWORD4<
EndIF;
ENDPROCESS;
PROCESS(CLK,key5,key7)
BEGIN
IFCLK'
EVENTANDCLK='
IFKEY5='
ANDZISUO='
IFPASSWORD1=CODE1ANDPASSWORD2=CODE2ANDPASSWORD3=CODE3ANDPASSWORD4=CODE4
THENKAI<
--按下开锁键后,如果密码正确,开锁
ELSEKAI<
IFKAI='
LED_G<
LED_R<
--开锁后红灯灭绿灯亮,否则红灯亮绿灯灭
ELSELED_G<
IFKEY7='
THEN--关锁按钮按下后关锁
KAI<
;
LED_G<
PROCESS(CLK,KEY1,KEY8)
IF(KEY1'
FLAG<
THEN--按下第一个按键时置位标志位FLAG,开始计时
IF(FLAG='
IFZISUO='
IFJISHI5<
5THENJISHI5<
=JISHI5+1;
ELSEJISHI5<
IF(JISHI5=5ANDKAI='
)THEN--如果5秒后未开锁则进入自锁状态
ZISUO<
1