电子密码锁Word文档下载推荐.docx
- 文档编号:19292908
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:10
- 大小:327.49KB
电子密码锁Word文档下载推荐.docx
《电子密码锁Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子密码锁Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
首先是键盘输入电路,键盘的输入电路部分又分为键盘去抖电路和密码锁输入电路,下面先介绍键盘去抖电路部分。
键盘消抖部分是由两个小的模块集成为一个去抖电路的,所以在此分开介绍此两个模块。
第一个是DCFQ模块,如左图所示,模块外部信号端口为,CLK:
时钟脉冲输入端口,为电路提供原始始终信号,CLRM:
清零信号输入端口,PRN:
置位信号输入端口,Q:
信号输出端口。
DCFQ模块的主要程序为如下,此段程序作用是判断输入信号是否有效,如有效则输出,无效清零。
IFCLRN='0'ANDPRN='1'THENQ<='0';
ELSIFCLRN='1'ANDPRN='0'THENQ<='1';
ELSIFCLK'EVENTANDCLK='1'THENQ<=D;
ENDIF;
第二个是,DEBOUNCING模块模块外部信号端口如左图所示,其中D-IN:
信号输入端口,CLK:
时钟脉冲输入端口。
模块的内部信号有:
VCC:
模块内部信号,控制清零,Q0:
寄存D触发器处理过的信号,Q1:
与Q0信号做差分处,D1:
模块内部信号,D0:
模块内部信号,QQ0,QQ1,D_OUT1,DD0,DD1是为便于仿真时观察中间,结果而增加的观测点的输出端口(删除无影响)。
DEBOUNCING模块主要程序如下:
U1:
DCFQPORTMAP(CLK=>CLK,CLRN=>INV_D,PRN=>VCC,D=>VCC,Q=>Q0);
U2:
DCFQPORTMAP(CLK=>CLK,CLRN=>Q0,PRN=>VCC,D=>VCC,Q=>Q1);
PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEND0<=NOTQ1;
D1<=D0;
ENDPROCESS;
DD0<=D0;
DD1<=D1;
QQ1<=Q1;
QQ0<=Q0;
D_OUT<=NOT(D1ANDNOTD0);
D_OUT1<=NOTQ1ENDARCHITECTUREART;
这段程序的作用就是通过对信号的分频处理,从而将按键产生的不规则信号转换为便于识别的按键信号,达到消除抖动的目的。
其次是密码锁输入电路,密码锁输入电路元件如右图所示:
其中模块外部信号端口有:
CLK-1K:
时钟脉冲输入端口,KEY-IN:
按键输入端口,CLK_SCAN:
键盘扫描序列(仿真时用),DATA_N:
数字输出端口,DATA_F:
功能输出端口,FLAG_N:
:
数字输出标志,FLAG_F:
功能输出标志,CLK_CTR:
控制电路工作时钟信号,CLK_DEBOUNCE:
去抖电路工作时钟信号(仿真时用)
其中模块内部信号:
CLK:
电路工作时钟脉冲,C_KEYBOARD:
键扫信号“00-01-10-11”寄存器,C_DEBOUNCE:
去抖时钟信号,C:
键盘输入去抖后的寄存器,N,F:
数字、功能按键译码值的寄存器,FN,FF:
数字、功能按键标志值数字、功能按键,SEL:
模块内部信号,Z:
按键位置信号,密码锁输入电路主要程序为:
KEY_DECODER:
BLOCKSIGNALZ:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGINPROCESS(CLK)BEGINZ<=C_KEYBOARD&C;
IFCLK'EVENTANDCLK='1'THENCASEZISWHEN"11101"=>N<="0000";
WHEN"00011"=>N<="0001";
WHEN"00101"=>N<="0010";
WHEN"00110"=>N<="0011";
WHEN"01011"=>N<="0100";
WHEN"01101"=>N<="0101";
WHEN"01110"=>N<="0110";
WHEN"10011"=>N<="0111";
WHEN"10101"=>N<="1000";
WHEN"10110"=>N<="1001";
WHENOTHERS=>N<="1111";
ENDCASE;
IFCLK'EVENTANDCLK='1'THENCASEZIS
WHEN"11011"=>F<="0100";
WHEN"11110"=>F<="0001";
WHENOTHERS=>F<="1000";
ENDCASE;
ENDIF;
这段程序的作用是通过按键产生的信号进行译码,判断按键是数字还是上锁、解锁控制信号。
其中还包括密码锁控制电路,密码锁控制电路组成有:
模块外部信号端口:
时钟脉冲输入端口,DATA_N:
数字输入端口,DATA_F:
功能输入端口,FLAG_N:
数字输入标志,FLAG_F:
功能输入标,EMLOCK:
密码锁控制信号输出端口,DATA-BCD:
按键显示输出端口
模块内部信号有:
ACC:
暂存键盘输入信息,REG:
密码存储位置,RR2:
寄存器清零信号,R1,R0:
模块内部信号,二者差分生成清零信号,NC:
移位寄存,
QA,QB:
上锁、解锁控制信号。
密码锁控制电路主要程序为:
KEYIN_PROCESS:
BLOCKISSIGNALRST,D0,D1:
STD_LOGIC;
BEGINRST<=RR2;
PROCESS(FLAG_N,RST)ISBEGIN
IFRST='1'THENACC<="0000000000000000";
NC<="000";
ELSE
IFFLAG_N'EVENTANDFLAG_N='1'THENIFNC<4THENACC<=ACC(11DOWNTO0)&DATA_N;
NC<=NC+1;
ENDBLOCKKEYIN_PROCESS;
以上程序的作用是清除、暂存按键输入数据,每输入一个数字,在数码管显示时都左移一位,直到输入位数达到4位,4位以后不再显示。
LOCK_PROCESS:
BLOCKISBEGIN
PROCESS(CLK,DATA_F)IS
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IFNC=4THEN
IFDATA_F
(2)='1'THEN--上锁控制信号有效
REG<=ACC;
--密码存储QA<='1';
QB<='0';
ELSIFDATA_F(0)='1'THEN--开锁控制信号有效
IFREG=ACCTHEN--密码核对
QA<='0';
QB<='1';
ENDIF;
ELSIFACC="1000100010001000"THEN
这段程序的作用是在按下*键时将输入的密码跟已经存储的密码进行对比,如果一样,则密码锁开锁。
而在通过密码验证后可以按#键重新设定密码。
在这里值得注意的是有一个密码“8888”作为万用密码,也就是不论当前密码是什么,只要输入的密码为8888,则都可通过密码锁。
此次设计中还有必不可少的密码锁显示电路如下图所示:
其中模块外部信号端口为:
DATA-BCD:
密码信号输入端口,BLOCK:
密码锁状态信号显示灯。
根据设计要求,总程序为:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitylockisport(clk_1k:
instd_logic;
--频率输入管脚
enter_2,enter_1:
instd_logic;
--设密码确认及输入密码确认datain:
instd_logic_vector(3downto0);
--密码数据输入
speaker:
outstd_logic;
--喇叭
led_g,led_r:
outstd_logic);
--绿灯及红灯
endentitylock;
architecturebehaveoflockis
signalram:
std_logic_vector(3downto0);
signaljudge:
std_logic;
signalclk:
signalturn_on,turn_off:
begin
process(Clk_1k)
variableclk_count:
std_logic_vector(8downto0):
="
000000000"
;
ifclk_1k'
eventandclk_1k='
1'
then--分频
ifclk_count<
511then
clk_count:
=clk_count+1;
else
clk<
=notclk;
endif;
endprocess;
process(datain,enter_1)--设置密码
ifenter_1'
eventandenter_1='
then
ram<
=datain;
endif;
process(clk_1k)--判断第一位密码按下时开始计时
thenifenter_1='
0'
thenjudge<
='
ifjudge='
andenter_1='
then
ifdatain/=ramthenjudge<
process(judge,clk,enter_2)
variablecount:
std_logic_vector(4downto0):
00000"
variablejudge_sh:
std_logic_vector(1downto0):
00"
variableswitch:
std_logic:
--判断是否锁定键盘
ifclk'
eventandclk='
ifenter_1='
then--数据复位
count:
judge_sh:
switch:
ifswitch='
ifcount<
"
0101"
thencount:
=count+1;
ifenter_2='
ifdatain=ramthen
turn_on<
turn_off<
--开锁
elseifjudge_sh<
10"
thenjudge_sh:
=judge_sh+1;
elseturn_on<
elseturn_on<
--等待下次输入
elseturn_on<
process(clk,clk_1k,turn_on)
beginifclk'
then
then--数据复位
count:
0000"
count_sh:
temp:
temp_sh:
ifturn_on='
andturn_off='
10100"
then--响20秒
temp:
led_g<
led_r<
elsetemp:
speaker<
=(temportemp_sh)andclk_1k;
--驱动喇叭
endprocess;
endbehave;
3、仿真及仿真结果分析
弹跳消除仿真破型:
密码锁输入模块仿真波形图:
控制电路仿真波形:
显示模块仿真波形:
本次的设计基本完成了设计的要求,设计出的密码锁有4*4键盘输入,LED数码显示,蜂鸣器设置。
具有数字键和确认删除功能,同时用户可根据需要修改密码,密码超次报警功能。
基本完成了预期的目标,系统硬件调试花费时间较长,最终基本达到了预期的目标,配合软件仿真的实现。
本次设计较为完善。
本次设计在键盘操作,及数码管显示电路的研究较为详细。
实时显示方面做的比较好。
但是由于时间仓促、条件有限,设计成果并不是很完美,但对于这一整个电子密码锁系统,设计的程序已经基本实现
三、结论及心得体会
通过这次设计,使我对EDA产生了浓厚的兴趣。
特别是当每一个子模块编写调试成功时,心里特别的开心。
这次EDA课程设计历时一个星期,在这些日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
这次设计的密码锁还是比较成功的,虽然在设计中遇到了很多问题,最后在同学的帮助下外加上自己的努力,终于都得到了解决,因此很有成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。
参考资料
[1]潘松著.EDA技术实用教程(第二版).北京:
科学出版社,2005.
参考文献:
[2]刘常澍,赵雅兴.数字电路与FPGA[M].北京:
人民邮电出版社,
2004.
[3]任晓东,文博.CPLD/FPGA高级应用开发指南[M].北京:
电子工
业出版社,2003.
[4]汉泽西.EDA技术及其应用[M].北京:
北京航空航天大学出版
社,2004.
[5]王小军.VHDL简明教程[M].北京:
清华大学出版社,1997.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 密码锁