eda电子密码锁改31.docx
- 文档编号:16496088
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:21
- 大小:174.56KB
eda电子密码锁改31.docx
《eda电子密码锁改31.docx》由会员分享,可在线阅读,更多相关《eda电子密码锁改31.docx(21页珍藏版)》请在冰点文库上搜索。
eda电子密码锁改31
目录
第1章方案设计1
1.1设计思路1
1.2系统原理及基本框图1
第2章单元模块设计1
2.1顶层模块设计2
2.2密码输入模块2
2.3延时模块2
2.4设置密码及验证模块2
第3章系统软件程序设计3
3.1流程图3
3.2主控程序3
第4章系统仿真测试8
总结9
参考文献10
致谢11
附录源程序12
第1章方案设计
1.1设计思路
当输入正确密码时轰动绿灯亮、红灯熄灭表示开锁,而当输入错误密码时,红灯亮、绿灯熄灭表示关锁。
程序下载后系统进入原始状态(原始密码000000),按下键8发光二极管8(绿灯)亮、法官二极管7(红灯)灭。
当要重新设置密码时,直接输入自己想要设置的密码并按下键8,持续5S,数码管8由0变为1,此时7段数码管1、2、3、4、5、6对应显示新设置的密码。
当要输入密码时,按下键7,先将密码清零,再随机输入一组6位密码,假如密码正确,发光二极管8(绿灯)立即亮;反之如不正确,等待5S,发光二极管7(红灯)亮并由蜂鸣器发出20S的报警信号。
1.2系统原理及基本框图
本设计采用EDA技术和VHDL语言设计了一种按键输入密码并数码管回显,当输入正确密码时轰动绿灯亮、红灯熄灭表示开锁,而当输入错误密码时,红灯亮、绿灯熄灭表示关锁。
第2章单元模块设计
2.1顶层模块设计
该电子密码锁顶层文件使用原理图输入法,将按键、延时、判断正误、出错红灯亮并报警、正确绿灯亮这几个模块连接在一起实现6位二进制密码锁功能。
具体顶层原理图如图2.1所示:
图2.1密码锁顶层文件原理图
2.2密码输入模块
本按键输入模块包括设置密码并读取、密码清零、输入密码、系统复位功能。
该对应6位二进制密码输入、键7为密码清零按键、键8为系统复位和密码读取按键。
2.3延时模块
针对本设计中要求的输入错误密码后5S报错和20S报警,我们设计了5S和20S的两个延时模块。
2.4设置密码以及验证模块
要求密码可以设置,为了更清晰的了解密码,我们除了设计密码设置键外,还设置了数码管显示设置好的密码。
该模块采用VHDL语言设计而成。
第3章系统软件程序的设计
3.1流程图
该电子密码锁的工作流程图如图所示:
图3.1密码锁流程图
3.2主程序
主程序包含初始化部分、密码输入模块、显示模块、延时模块、设置密码与验证模块等组成。
主程序源代码如下:
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;
signalSYNTHESIZED_WIRE_12:
STD_LOGIC;
signalSYNTHESIZED_WIRE_8:
STD_LOGIC;
signalSYNTHESIZED_WIRE_9:
STD_LOGIC;
BEGIN
green<=SYNTHESIZED_WIRE_8;
red<=SYNTHESIZED_WIRE_12;
xianshi<=SYNTHESIZED_WIRE_11;
key_read<=SYNTHESIZED_WIRE_5;
b2v_inst:
led
PORTMAP(r=>SYNTHESIZED_WIRE_0,
str=>str,
str5=>SYNTHESIZED_WIRE_11,
ar=>SYNTHESIZED_WIRE_8);
b2v_inst1:
sound
PORTMAP(str=>SYNTHESIZED_WIRE_2,
key_out=>SYNTHESIZED_WIRE_11);
b2v_inst3:
xd
PORTMAP(str=>SYNTHESIZED_WIRE_11,
a=>a,
b=>b,
key_out=>SYNTHESIZED_WIRE_0);
b2v_inst4:
mima
PORTMAP(clk_mima=>SYNTHESIZED_WIRE_5,
key=>a,
mima_out=>b);
b2v_inst6:
m20
b2v_inst7:
key
PORTMAP(key_in1=>c(0),
key_in2=>c
(1),
key_in3=>c
(2),
key_in4=>c(3),
key_in5=>c(4),
key_in6=>c(5),
clk=>clk1,
str=>SYNTHESIZED_WIRE_12,
resert=>str,
clk20=>clk20,
ds=>ds,
key_read=>SYNTHESIZED_WIRE_5,
key_resert=>SYNTHESIZED_WIRE_9,
key_r=>SYNTHESIZED_WIRE_3,
key_out=>a);
b2v_inst8:
ledw
PORTMAP(ee=>SYNTHESIZED_WIRE_8,
str=>SYNTHESIZED_WIRE_9,
str5=>SYNTHESIZED_WIRE_11,
aw=>SYNTHESIZED_WIRE_12);
c<=key;
display<=a;
key_tell<=b;
END;
第4章系统仿真测试
将程序下载Cyclone系列芯片中,同时在EDA试验箱上进行硬件验证。
本文提出的电子密码锁由于采用VHDL语言设计,用一片FPGA实现,因而体积小,功耗低,稍加修改就可以改变密码的位数和输入密码的次数,具有较好的应用前景。
但由于结构还比较简单,有待进一步完善。
1.密码锁输入模块的仿真,如图4.1所示。
图4.1密码锁输入模块仿真
2.电子密码锁整个系统的仿真如图4.2:
图4.2电子密码锁整个电路系统仿真图
总结
通过两星期的紧张工作,最后完成了我的设计任务——基于VHDL语言的智能密码锁设计。
通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。
本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
希望学校以后多安排一些类似的实践环结,让我们学的更多。
参考文献
[1]宋烈,武等. EDA计数实用教程. 湖北科学计数出版社,2006.
[2]顾斌. 数字电路EDA设计. 西安电子科技大学出版社,2004.
[3]李国洪,等. 可编程器件EDA设计与实践,机械工业出版社,2004.
[4]刘艳萍,等. EDA实用技术及应用. 国防工业出版社, 2006.
[5]潘松,等. EDA技术及其应用. 清华大学出版社,2007.
[6]王诚,等. Altera FPGA—CPLD设计(基础篇). 人民邮电出版社,2005.
[7]王振红,等. VHDL数字电路设计与应用实践教程(第2版). 机械工业出版社,2006.
致谢
本设计是在刘锦江老师的悉心指导下完成的,老师一丝不苟的工作作风,平易近人的性格都是很值得我们赞扬的。
在论文的研究及整理期间,老师给了我很大的支持和鼓励,才使得设计的以顺利完成,在此谨向老师表示衷心的感谢和崇高的敬意。
感谢同我一起进行设计的同学,在课程设计期间,他们不仅在学习上对我有很大的帮助,还给我提供各种方便,提供资料。
最后,感谢各位老师,由于本人知识有限,不足之处在所难免,还请老师指正。
附录源程序
密码输入模块代码:
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
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;
显示模块代码为:
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;
报警电路程序设计如下:
LibraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
entitysoundis
port(str:
instd_logic;
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;
延时模块为:
LibraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
entitymcis
port(str:
instd_logic;
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- eda 电子 密码锁 31