《课程设计报告基于VHDL的电子密码锁设计.doc》由会员分享,可在线阅读,更多相关《课程设计报告基于VHDL的电子密码锁设计.doc(28页珍藏版)》请在三一办公上搜索。
1、摘要随着电子产品向智能化和微型化的不断发展,EDA技术作为现代电子设计最新技术的结晶,给电子系统的设计带来了革命性的变化。本论文设计一种基于VHDL的电子密码锁系统,该系统具有软硬件设计简单、易于开发、成本低、安全可靠、操作方便等特点,可作为产品进行开发,应用于住宅,办公室的保险箱及档案等需要防盗的场所,有较强的实用性。本系统由Quartus II软件、矩阵键盘、LED显示和报警系统组成。4*4键盘组成09数字键,每按下一个键,相关键的值在数码管上显示,并依次左移;能够清除密码输入,并设置预置密码为“1234”;修改密码时,将当前输入设为新的密码;能完成上锁和开锁功能;当输入密码和预置密码一样
2、时即可开锁。具有确认、取消、修改、开锁、闭锁功能,用7段数码管组成显示电路提示信息。关键词:QuartusII VHDL 电子密码锁 矩阵键盘 七段数目 录第一章 绪论11.1选题依据11.2设计功能1第二章 系统方案选择22.1设计方案的选择22.2根据方案拟实现的具体功能3第三章 硬件原理及软件程序设计53.1软件设计流程53.2各模块程序设计53.2.1键盘输入部分的源程序53.2.2 键盘消抖电路113.2.3 移位寄存电路123.2.4 密码验证及改密电路143.2.5 电锁控制电路153.2.6 动态扫描电路程序173.2.7 片选信号电路程序183.2.8 选择输出电路程序193
3、.2.9 译码输出电路程序20第四章 仿真测试23结束语24参 考 文 献26第一章 绪论1.1选题依据在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的方法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用既不方便,且钥匙丢失后安全性就打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码应运而生。密码锁具有安全性高、成本低、功耗低、易操作等优点。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,客服了机械式密码锁密码量少
4、、安全性能差的缺点,使密码锁无论在技术上还是在性能上都有大大提高一步。随着大规模集成电路技术的发展,特别是VHDL的问世,出现了带微处理的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。但是这些产品的特点是针对特定的指纹和有效卡,只能使用于保密要求的箱、柜、门等。而且指纹识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。加上其成本较高,一定程度上限制了这类产品的普及和推广。鉴于目前的技术与水平与市
5、场的接受程度,电子密码锁是这类电子防盗产品的主流。1.2设计功能基于以上思路,本次电子密码锁的设计,主要具有如下功能:(1)设置4位密码,密码通过键盘输入,若密码正确,则打开。(2)密码可以由用户自己修改设定(只支持4位密码),开锁后才能修改密码,修改功能为:输入旧密码,再输入新密码并二次确认(以防止误操作)。(3)报警、锁定键盘功能。密码输入错误数码管显示出现错误提示,若密码 输入错误次数超过3次,蜂鸣器报警并且锁定键盘。(4)按下清零键,错误计数归零,不再报警并灯熄灭,恢复原始状态。第二章 系统方案选择2.1设计方案的选择在本次设计中提出了两种方案:一种是用以74LS112双JK触发器构成
6、的数字逻辑电路控制方案,还有一种是用VHDL语言编程方案。下面对这两种方案做分析。方案一:采用数字电路控制。其原理方框图如图2-1所示。密码修改电路密码校验电路键盘输入报警次数检测锁定5分钟开锁电路执行电路限时报警市电供电电路电子切换开关蓄电池断电检测充电电路开门220V电源VCC 图2-1 数字密码锁电路方案采用数字密码锁电路的好处就是设计原理比较易懂。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40
7、秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。 电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。方案二:采用一种是用Quartus II软件编程,利用VHDL描述数字系统的结构,行为,功能和接口,及其控制的准确性,来实现密码锁的设计。如图2-2所示:矩阵键盘控制LED数码显示电路VHDL编程图2-2设计方案通过比较以上两种方
8、案,VHDL编程方案有较大的活动空间,不但能实现锁要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用第二种方案。2.2根据方案拟实现的具体功能1、论文的设计要求:1)设置4位密码,密码通过键盘输入,若密码正确,则将锁打开。2)密码可以由用户自己修改设定(只支持4位密码),锁打开后才能修改密码。修改密码之前必须再次输入密码,在输入新密码时候需要二次确认,以防止误操作。3)报警、锁定键盘功能。密码输入错误数码管显示出现错误提示,若密码 输入错误次数超过3次,蜂鸣器报警并且锁定键盘。2、本论文既定的设计功能描述:1)加电后,数码管上没有任何显示,当按下开锁键,数码管
9、出现“”并闪烁。2)输入密码时,只逐为显示“H”,以防止泄露密码。密码输入完后,按下“确定”键,密码如果正确,则蜂鸣器响三声,数码管熄灭。这时,再按下“关锁”键,数码管就出现“”静止不动,实现闭锁功能,按任一个键都不会有反应,只有按开锁重新开始。输入密码过程中,如果不小心输入错误,可按“取消”键,删除输错的密码。3)修改密码,按下修改键,连续输入新密码,按确定键即可。第三章 硬件原理及软件程序设计3.1软件设计流程根据第二章的设计方案并结合实际情况,进行单元电路设计后得电子密码锁的硬件设计机。主要由三部分组成:4*4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。另外,系统还有LED提示
10、灯,报警蜂鸣器等。首先用键盘输入密码,通过消抖后进入存储器,输入密码与设定的密码,相同时开锁,当输入密码错误时,开始计数,当第三次输入密码错误时,扬声器报警。系统顶层框图较为简单,如图3-1所示。密码输入电路 扫描信号 按键输入键盘译码弹跳消除键盘键盘扫描显示电路数码管显示控制密码电路按键数据存储数值比较开/关锁报警图3-1 系统顶层框图3.2各模块程序设计3.2.1键盘输入部分的源程序4*4按键分行线和列线去控制,行线连接16个按键的一端,列线连接16个按键的另外一端,当给行线(或者列线)一个信号,有按键按下的时候读回来的时候的数据是不一样的,也就是证明有按键按下!当行信号(KEY)接到高电
11、平,当没有键按时,行线与列线(KEYSCAN)是断开的,且行线都是高电平(1111),行信号作为CPLD、列信号作为CPLD。可以设置列线初始状态为低电平(0000)。信号为从上到下的顺序。键盘输入的原理图如图3-2图3-2 4*4键盘输入原理图根据需要,本例子的4*4键盘设定10个数字键(09)和4个功能键(确认键、取消键、开锁键、闭锁键),键盘的布局如图3-3所示。图3-3 矩阵键盘键盘程序代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.
12、all;entity jp isport (clk :in std_logic ;R:in std_logic_vector(3 downto 0);L:out std_logic_vector(3 downto 0);dataout:out std_logic_vector(3 downto 0);szkzj1,gnkzj1:out std_logic; rest,querenj,gaimij,sanchuj:out std_logic);end jp;architecture arth of jp issignal carry1:std_logic;signal count:std_log
13、ic_vector(3 downto 0);signal count1:std_logic_vector(1 downto 0);signal sel:std_logic_vector(3 downto 0);signal temp:std_logic_vector(3 downto 0);signal querenj1,sanchuj1,gaimij1,rest1:std_logic;signal szkzj,gnkzj:std_logic;p1:process(clk)beginif(rising_edge(clk) thencount=count+1;end if;end process
14、 p1;p2:process(clk)beginif(rising_edge(clk)thenif(count=1111) thencarry1=1;elsecarry1=0;end if;end if;end process p2;p3:process(carry1)beginif(rising_edge(carry1) thencount1=count1+1;end if;end process p3;sel=1110 when count1=00 else 1101 when count1=01 else 1011 when count1=10 else 0111 when count1
15、=11;p:process(clk)begin if(falling_edge(clk) then L=sel; -列线 end if;end process p;p4:process(clk,R,sel)beginif(rising_edge(clk) thenif(R(0)=0) thenif(sel(0)=0)thentemp=0000;szkzj=1;gnkzj=0; -0,数字标识,功能标识。elsif(sel(1)=0) thentemp=0001;szkzj=1;gnkzj=0;elsif(sel(2)=0)thentemp=0010;szkzj=1;gnkzj=0;elsif(
16、sel(3)=0) thentemp=0011;szkzj=1;gnkzj=0;end if;elsif(R(1)=0) thenif(sel(0)=0)thentemp=0100;szkzj=1;gnkzj=0;elsif(sel(1)=0) thentemp=0101;szkzj=1;gnkzj=0;elsif(sel(2)=0)thentemp=0110;szkzj=1;gnkzj=0;elsif(sel(3)=0) thentemp=0111;szkzj=1;gnkzj=0;end if;elsif(R(2)=0) thenif(sel(0)=0)thentemp=1000;szkzj
17、=1;gnkzj=0;elsif(sel(1)=0) thentemp=1001;szkzj=1;gnkzj=0;elsif(sel(2)=0)thenszkzj=0;gnkzj=1;elsif(sel(3)=0) thenszkzj=0;gnkzj=1;end if;elsif(R(3)=0) thenif(sel(0)=0)thenquerenj1=1;szkzj=0;gnkzj=1;else querenj1=0;end if; if(sel(1)=0) thensanchuj1=1;szkzj=0;gnkzj=1;else sanchuj1=0;end if;if(sel(2)=0)t
18、hengaimij1=1;szkzj=0;gnkzj=1;else gaimij1=0;end if;if(sel(3)=0) thenrest1=1;szkzj=0;gnkzj=1;else rest1=0;end if;end if;end if;end process p4; p8:process(szkzj,gnkzj)beginif szkzj=1 and gnkzj=0 thendataout=temp;else dataout=null;end if;if gnkzj=1 and szkzj=0 thenquerenj=querenj1;sanchuj=sanchuj1;gaim
19、ij=gaimij1;rest=rest1;else querenj=null;sanchuj=null;gaimij=null;rest=null;end if;end process p8;szkzj1=szkzj;gnkzj1=gnkzj;END arth;3.2.2 键盘消抖电路因为按键大多是机械式开关,在开关切换的瞬间会在接解点出现来回弹跳的现象,虽然只是按了一次键,实际产生的按键信号却不只跳动一次,经过取样信号的检查后,将会造成误码判断,认为是按了两次键。消除按键抖动可以用硬件电路来实现,例如,利用RS触发器来锁定按键状态,消除抖动的影响。也可以利用现成的专用消抖电路,如MC144
20、90就是六路消抖电路。较为简单的方法是用软件延时方法来消除按键的抖动,也就是说,一旦发现有按键按下,就延时20ms以后在测按键的状态。这样就避免开按键发生抖动的那一段时间,使CPU能可靠地读按键状态。在编制键盘扫描程序时,只要发现按键状态有变化,即无论是按下还是松开,程序都应延时20ms以后再进行其他操作。如果调整取样频率,弹跳现象可得到改善。本论文应用D触发器可以实现消抖作用。原理图如图3-4VHDL语言键盘消抖电路原理图所示:图3-4键盘消抖电路原理图键盘消抖电路的程序代码:library ieee;use ieee.std_logic_1164.all;entity d4 is port
21、 is( clk:in std_logic; a: in std_logic_vector(3 downto 0); rest1,querenj1,gaimij1,sanchuj1:in std_logic; q:out std_logic_vector(3 downto 0); rest2,querenj2,gaimij2,sanchuj2:out std_logic);end d4;architecture f of d4 issignal qi:integer range 0 to 3;signal clk_temp:std_logic;begin process(clk) begin
22、if rising_edge(clk) then if qi=3 then qi=0; clk_temp=not clk_temp; else qi=qi+1; end if;end if;end process;process(clk_temp)begin if clk_temp event and clk_temp =1 then q =a;rest2=rest1;querenj2=querenj1; gaimij2=gaimij1;sanchuj2=sanchuj1; end if;end process;end f;3.2.3 移位寄存电路表3-1移位寄存器功能表输入数据输出数据第一次
23、00000000第二次000100000001第三次0010000000010010第四次00110000000100100011第五次01000001001000110100由于按键按下时,键盘输入的是4位二进制数,每次输入后都会前一次输入的都会消失,所以必须对键盘输出进行移位储存才能得要16位二进制数即4位十进制数。移位寄存工作原理就是在下一次数据输入前,对其进行移位寄存以确保不会丢失,如我们定义输入为4位二进制数,输出为16为二进制数,由低位向高位移位,第一次输入的是0000,第二次输入的是0001,第三次输入的是0010,第四次是0011,这时输出的就是0000000100100011
24、。如表3-1当用户发现输入密码错误时可以进行删除,这里删除采用了移位操作,按一次删除键输出数据就向低位移动已达到删除功能。原理图如图3-5 VHDL语言移位寄存电路原理图所示:图3-5移位寄存电路移位寄存电路程序代码:library ieee;use ieee.std_logic_1164.all;entity yw isport(input:in std_logic_vector(3 downto 0); rest,shanchu,clk :in std_logic; output :out std_logic_vector(15 downto 0); end yw;architecture
25、 behave of yw is signal output_temp: std_logic_vector(15 downto 0); -signal output_temp(3 downto 0): std_logic_vector(3 downto 0);beginprocess(clk)begin if rest=1 then output=null; elsif (rising_edge(clk) then if shanchu=0 then output_temp(15 downto 12)=output_temp(11 downto 8); output_temp(11 downt
26、o 8)=output_temp(7 downto 4); output_temp(7 downto 4)=output_temp(3 downto 0); output_temp(3 downto 0)=input; else output_temp(3 downto 0)=output_temp(7 downto 4); output_temp(7 downto 4)=output_temp(11 downto 8); output_temp(11 downto 8)=output_temp(15 downto 12); end if; end if;end process;output=
27、output_temp;end behave;3.2.4 密码验证及改密电路密码验证实际上就是对输入的密码进行比较,这里事先内置了初始密码,只有当用户输入的密码与初始密码一致时,输出就为高电平。这里也可以外置密码,但按下改密键时,就处于改密状态。然后由键盘输入需要修改的密码。library ieee;use ieee.std_logic_1164.all;entity yan is port (clk,gaimij2,querenj2:in std_logic; input2:in std_logic_vector(15 downto 0); output2:out std_logic);en
28、d yan;architecture a of yan is signal input2_temp:std_logic_vector(15 downto 0):=0000000100100011;begin-input2_temp=0000000100100011;process (clk,gaimij2)begin if gaimij2=0 then if clkevent and clk=1 then if querenj2=1 then if input2_temp=input2 then output2=1; else output2=0; end if; end if; end if
29、; else input2_temp=input2; end if;end process;end a;3.2.5 电锁控制电路电锁控制电路是整个电路的控制中心,主要完成如下功能:1) 数字按键输入部分:如果输入数字键,第一个数字会从显示器的最右端开始显示,此后每新按一个数字时,显示器上的数字必须往左移动一位。若想要更改刚输入的数字,可按删除键来使数字右移一位以清除前一个输入的数字。2)功能键输入部分:删除键:只清除前一个输入的数字。确认键:输入密码后,开锁之前必须先核对密码。密码变更:按下此键将目前输入的数字设定为新的密码。清零键:按下此键恢复原始状态即错误计数归零,发光二极管熄灭,蜂鸣器停
30、止工作。输入4位数字退格及清除上锁工作模式:输入密码、密码核对、变更密码、存储密码及激活密码开锁工作模式:(输入密码)、密码核对、开锁图3-6 三种工作模式library ieee;use ieee.std_logic_1164.all;entity ztj isport( clk,input,reset:in std_logic; light:out std_logic:=0; alarm:out std_logic:=0);end ztj;architecture face of ztj istype state_type is(s0,s1,s2,s3);signal state:stat
31、e_type;begin process(clk) begin if reset=1 then state=s0;alarm=0;light if input=0 then alarm=0;light=0;state=s1; else state=S0;light=1;alarm if input=0 then alarm=0;light=0;state=s2; else state=S0;light=1;alarm if input=0 then alarm=0;light=0; state=s3; else state=S0;light=1;alarm state=s3; light=0;
32、alarmseg4seg4seg4seg4seg4=1111; end case; end process;end behave;3.2.7 片选信号电路程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sel isport (cllk:in std_logic; sel:out std_logic_vector(1 downto 0);end sel;architecture behave of sel isbeginprocess(cllk)variable cnt:std_l
33、ogic_vector(1 downto 0); begin if cllkevent and cllk=1 then cnt:=cnt+1; end if; sel if sel=00 then state=s1; output3 if sel=01 then state=s2; output3 if sel=10 then state=s3; output3 if sel=11 then state=s3; output3dataoutdataoutdataoutdataoutdataoutdataoutdataoutdataoutdataoutdataoutdataout=1111111
34、1;end case;end if;end process;end behave;第四章 仿真测试各主要的小模块的波形结束语本次的设计经过一个多月的时间,基本完成了设计选题的要求,设计出的密码锁有4*4键盘输入,LED数码显示,蜂鸣器设置。具有数字键和确认删除功能,同时用户可根据需要修改密码,密码超次报警功能。基本完成了预期的目标,系统硬件调试花费时间较长,最终基本达到了预期的目标,配合软件仿真的实现。本次设计较为完善。本次设计在键盘操作,及数码管显示电路的研究较为详细。实时显示方面做的比较好。但是由于时间仓促、条件有限,设计成果并不是很完美,还存在下面问题:LED在密码输入正确、错误、及超次输入错误后的红绿黄指示灯的提示部分未能达到预期目的。串口通讯还不太稳定,未对温度数值统计处理以及存储。我准备在今后的工作过程中进一步完善此设计。感想刚开始起草设计方案的时候我可真是可以用无头苍蝇来形容,根本不知道从哪里下手,因为做毕业设计还是第一次。好不容易查了一些资料后,终于有了一个雏形,可是,当我开始写选题报告的时候,又是问题百出,让我心烦意乱。指导老师看