EDA电子密码锁.docx

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

EDA电子密码锁.docx

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

EDA电子密码锁.docx

EDA电子密码锁

EDA电子密码锁

电子密码锁

设计要求

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

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

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

1、方案论证与对比

1.1方案一

方案一是用以AT89C2051为核心的单片机控制方案。

共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。

设计方框图如图1所示。

1.2方案二

图4密码锁顶层文件原理图

3.2密码输入模块

1、本按键输入模块包括设置密码并读取、密码清零、输入密码、系统复位功能。

该模块中我们设置了8个按键,各个按键的功能分别为:

按键1、2、3、4、5、6分别对应6位二进制密码输入、键7为密码清零按键、键8为系统复位和密码读取按键。

2、以上各子模块的设计均采用VHDL语言实现,其具体实现程序如下:

LibraryIEEE;

useIEEE.std_logic_1164.all;

useIEEE.std_logic_unsigned.all;

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);

begin

c0:

process(resert,key_in1,key_in2,key_in3,key_in4,key_in5,key_in6)

begin

ifresert='1'thendd<='0';--全部清零

elseifkey_in1='1'orkey_in2='1'orkey_in3='1'orkey_in4='1'orkey_in5='1'orkey_in6='1'

thendd<='1';endif;endif;--只要有键按下,dd将为高电平不变

key_r<=dd;

endprocessc0;

cc:

process(key_in5,key_in6,clk,resert)

begin

ifclk'eventandclk='1'then

ifds='1'

then--保持ds='1',持续5秒高电平5秒后产生低电平,第5秒为低电平

--按下键八5秒后读取密码

ifcount<6then

key_read<='0';count<=count+1;elsecount<=count;

endif;

ifcount=5thenkey_read<='1';endif;

elsecount<="0000";key_read<='0';

endif;

endif;

endprocesscc;

cc2:

process(key_in1,key_in2,clk,resert)

begin

ifclk'eventandclk='1'then

ifds='1'

then--保持ds='1',持续3秒高电平3秒后产生低电平,第3秒为低电平

--按下按下键八三秒后对错误复位

ifcount2<4then

key_resert<='0';count2<=count2+1;elsecount2<=count2;

endif;

ifcount2=3thenkey_resert<='1';endif;

elsecount2<="0000";key_resert<='0';

endif;

endif;

endprocesscc2;

c1:

process(key_in1,str,sa)--按键1输入

begin

ifstr='1'orsa(0)='1'thenm(0)<='0';else

ifkey_in1'eventandkey_in1='1'thenm(0)<=notm(0);endif;

endif;

endprocessc1;

c2:

process(key_in2,str,sa)--按键2输入

begin

ifstr='1'orsa

(1)='1'thenm

(1)<='0';else

ifkey_in2'eventandkey_in2='1'thenm

(1)<=notm

(1);endif;

endif;

endprocessc2;

c3:

process(key_in3,str,sa)--按键3输入

begin

ifstr='1'orsa

(2)='1'thenm

(2)<='0';else

ifkey_in3'eventandkey_in3='1'thenm

(2)<=notm

(2);endif;

endif;

endprocessc3;

c4:

process(key_in4,str,sa)--按键4输入

begin

ifstr='1'orsa(3)='1'thenm(3)<='0';else

ifkey_in4'eventandkey_in4='1'thenm(3)<=notm(3);endif;

endif;

endprocessc4;

c5:

process(key_in5,str,sa)--按键5输入

begin

ifstr='1'orsa(4)='1'thenm(4)<='0';else

ifkey_in5'eventandkey_in5='1'thenm(4)<=notm(4);endif;

endif;

endprocessc5;

c6:

process(key_in6,str,sa)--按键6输入

begin

ifstr='1'orsa(5)='1'thenm(5)<='0';else

ifkey_in6'eventandkey_in6='1'thenm(5)<=notm(5);endif;

endif;

endprocessc6;

v22:

process(resert,clk20)

begin

ifclk20'eventandclk20='1'then

ifresert='1'then

ifcount3=7thencount3<=count3;else

count3<=count3+1;sa<="000000";

ifcount3=5thensa<="111111";elsesa<="000000";endif;

endif;

elsecount3<="0000";

endif;endif;

endprocessv22;

key_out<=mand(notsa);

endkey_mima;

3.3显示模块

1、本设计要求输入正确密码时,绿灯亮、红灯熄灭;当输入错误密码时,5S后红灯亮绿灯灭,同时要求发出20S的报警。

为此我们设计发光二极管D7和D8分别表示红灯和绿灯,并用蜂鸣器作为报警电路。

2、LED显示电路的VHDL程序如下:

LibraryIEEE;

useIEEE.std_logic_1164.all;

useIEEE.std_logic_unsigned.all;

entityledis

port(r:

instd_logic;

str:

instd_logic;

str5:

instd_logic;

ar:

outstd_logic);

endled;

architectureled_mimaofledis

signals1:

std_logic:

='0';

begin

b1:

process(str,r,str5)

begin

ifstr='0'then

ifr'eventandr='1'thenifstr5='1'thens1<='1';endif;endif;

elses1<='0';

endif;

endprocessb1;

ar<=s1;

endled_mima;

3、报警电路程序设计如下:

LibraryIEEE;

useIEEE.std_logic_1164.all;

useIEEE.std_logic_unsigned.all;

entitysoundis

port(str:

instd_logic;

图7报警模块

clk:

instd_logic;

sound_out:

outstd_logic);

endsound;

architecturexd_soundofsoundis

signalss:

std_logic;

begin

process(str,clk)--产生20报警电路,需要str为高电平20秒

begin

ifstr='1'then

ss<=clk;

elsess<='0';

endif;

sound_out<=ss;

endprocess;

endxd_sound;

3.4延时模块

1、针对本设计中要求的输入错误密码后5S报错和20S报警,我们设计了5S和20S的两个延时模块。

2、延时5S程序设计

LibraryIEEE;

useIEEE.std_logic_1164.all;

useIEEE.std_logic_unsigned.all;

entitymcis

port(str:

instd_logic;

图8延时5秒模块

clk:

instd_logic;

key_out:

outstd_logic);

endmc;

architecturemc_mimaofmcis

signalcount:

std_logic_vector(3downto0);

begin

process(str,clk)

begin

ifclk'eventandclk='1'then

ifstr='1'then--保持str为15秒高电平5秒后产生低电平,第6秒为低电平

ifcount<6thenkey_out<='1';

count<=count+1;elsecount<=count;

endif;

ifcount=5thenkey_out<='0';endif;

elsecount<="0000";key_out<='0';

endif;

endif;

endprocess;

endmc_mima;

3、延时20S程序如下:

LibraryIEEE;

useIEEE.std_logic_1164.all;

useIEEE.std_logic_unsigned.all;

entitym20is

port(str:

instd_logic;

clk:

instd_logic;

key_out:

outstd_logic);

endm20;

architecturem20_mimaofm20is

signalcount:

std_logic_vector(4downto0);

begin

process(str,clk)

begin

ifclk'eventandclk='1'then

ifstr='1'then--保持str为120秒高电平20秒后产生低电平,第21秒为低电平

ifcount<21thenkey_out<='1';

count<=count+1;elsecount<=count;

endif;

ifcount=20thenkey_out<='0';endif;

elsecount<="00000";key_out<='0';

endif;

endif;

endprocess;

endm20_mima;

3.5设置密码以及验证模块

1、中要求密码可以设置,为了更清晰的了解密码,我们除了设计密码设置键外,还设置了数码管显示设置好的密码。

该模块采用VHDL语言设计而成。

2、设置密码输入程序如下:

LibraryIEEE;

useIEEE.std_logic_1164.all;

useIEEE.std_logic_unsigned.all;

entityledwis

port(ee:

instd_logic;

tr:

instd_logic;

tr5:

instd_logic;

aw:

outstd_logic);

图10密码及验证模块

endledw;

architectureledw_mimaofledwis

signals1:

std_logic:

='0';

begin

process(str,ee,str5)

begin

ifstr='0'then

ifstr5'eventandstr5='0'then

ifee='0'then

s1<='1';

endif;

endif;

elses1<='0';endif;

endprocess;

aw<=s1;

endledw_mima;

3、密码校对电路程序设计如下:

LibraryIEEE;

useIEEE.std_logic_1164.all;

useIEEE.std_logic_unsigned.all;

entityxdis--密码校对

port(str:

instd_logic;

a:

instd_logic_vector(5downto0);

b:

instd_logic_vector(5downto0);

key_out:

outstd_logic);

endxd;

architecturexd_mimaofxdis

signalss:

std_logic:

='0';

begin

process(a(0),a

(1),a

(2),a(3),a(4),a(5),str)

begin

ifstr='1'then

ifa=bthen

ss<='1';

elsess<='0';endif;

elsess<='0';endif;

key_out<=ss;

endprocess;

endxd_mima;

4.系统仿真

将程序下载Cyclone系列芯片中,同时在EDA试验箱上进行硬件验证。

本文提出的电子密码锁由于采用VHDL语言设计,用一片FPGA实现,因而体积小,功耗低,稍加修改就可以改变密码的位数和输入密码的次数,具有较好的应用前景。

但由于结构还比较简单,有待进一步完善。

1)密码锁输入模块的仿真,如图12所示。

图12密码锁输入模块仿真

2)电子密码锁整个系统的仿真如图13:

图13电子密码锁整个电路系统仿真图

5.硬件测试

1)仿真波形正确后,便可进行下载;

2)选择GW48系列EDA试验开发系统;

3)使用Cyclone系列芯片EP1C6Q240C8;

4)先进行引脚锁定,具体引脚锁定如图14;

5)选择模式3;

6)选择好硬件和模式后就可以下载都EDA实验箱;

图14密码锁引脚锁定

6.结束语

通过两星期的紧张工作,最后完成了我的设计任务——基于VHDL语言的智能密码锁设计。

通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。

本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。

它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。

希望学校以后多安排一些类似的实践环

附录

主控制程序参考如下:

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYwork;

ENTITYlockIS

port(str:

INSTD_LOGIC;

clk20:

INSTD_LOGIC;

clk1:

INSTD_LOGIC;

ds:

INSTD_LOGIC;

key:

INSTD_LOGIC_VECTOR(5downto0);

green:

OUTSTD_LOGIC;

red:

OUTSTD_LOGIC;

sound:

OUTSTD_LOGIC;

xianshi:

OUTSTD_LOGIC;

key_read:

OUTSTD_LOGIC;

display:

OUTSTD_LOGIC_VECTOR(5downto0);

key_tell:

OUTSTD_LOGIC_VECTOR(5downto0));

ENDlock;

ARCHITECTUREbdf_typeOFlockIS

componentled

PORT(r:

INSTD_LOGIC;

str:

INSTD_LOGIC;

str5:

INSTD_LOGIC;

ar:

OUTSTD_LOGIC);

endcomponent;

componentsound

PORT(str:

INSTD_LOGIC;

clk:

INSTD_LOGIC;

sound_out:

OUTSTD_LOGIC);

endcomponent;

componentmc

PORT(str:

INSTD_LOGIC;

clk:

INSTD_LOGIC;

key_out:

OUTSTD_LOGIC);

endcomponent;

componentxd

PORT(str:

INSTD_LOGIC;

a:

INSTD_LOGIC_VECTOR(5downto0);

b:

INSTD_LOGIC_VECTOR(5downto0);

key_out:

OUTSTD_LOGIC);

endcomponent;

componentmima

PORT(clk_mima:

INSTD_LOGIC;

key:

INSTD_LOGIC_VECTOR(5downto0);

mima_out:

OUTSTD_LOGIC_VECTOR(5downto0));

endcomponent;

componentm20

PORT(str:

INSTD_LOGIC;

clk:

INSTD_LOGIC;

key_out:

OUTSTD_LOGIC);

endcomponent;

componentkey

PORT(key_in1:

INSTD_LOGIC;

key_in2:

INSTD_LOGIC;

key_in3:

INSTD_LOGIC;

key_in4:

INSTD_LOGIC;

key_in5:

INSTD_LOGIC;

key_in6:

INSTD_LOGIC;

clk:

INSTD_LOGIC;

str:

INSTD_LOGIC;

resert:

INSTD_LOGIC;

clk20:

INSTD_LOGIC;

ds:

INSTD_LOGIC;

key_read:

OUTSTD_LOGIC;

key_resert:

OUTSTD_LOGIC;

key_r:

OUTSTD_LOGIC;

key_out:

OUTSTD_LOGIC_VECTOR(5downto0));

endcomponent;

componentledw

PORT(ee:

INSTD_LOGIC;

str:

INSTD_LOGIC;

str5:

INSTD_LOGIC;

aw:

OUTSTD_LOGIC);

endcomponent;

signala:

STD_LOGIC_VECTOR(5downto0);

signalb:

STD_LOGIC_VECTOR(5downto0);

signalc:

STD_LOGIC_VECTOR(5downto0);

signalSYNTHESIZED_WIRE_0:

STD_LOGIC;

signalSYNTHESIZED_WIRE_11:

STD_LOGIC;

signalSYNTHESIZED_WIRE_2:

STD_LOGIC;

signalSYNTHESIZED_WIRE_3:

STD_LOGIC;

signalSYNTHESIZED_WIRE_5:

STD_LOGIC;

signalSYNTHESI

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

当前位置:首页 > 高等教育 > 工学

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

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