电子密码锁

时间:2024.3.20

绍 兴 文 理 学 院

数 理 信 息 学 院

课 程 设 计 报 告 书

题目 电子密码锁设计

姓 名 小丢

学 号

专业班级

指导教师

时 间 20xx年 1月14日

EDA技术课程设计—电子密码锁设计

课程设计任务书

电子密码锁

I

EDA技术课程设计—电子密码锁设计

电子密码锁设计

摘 要

本文介绍了一种采用单片FPGA芯片进行电子密码锁的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用FPGA的可编程性,简洁而又多变的设计方法,缩短了研发周期。电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。密码锁是以芯片为核心,通过编程来实现的,

[1]其性能和安全性已大大超过了机械锁。该电子密码锁以Quartus II软件平台完成电子密码

锁的功能设计和仿真,并在FPGA芯片EP1C12Q240C8和EDA V+开发系统上进行功能验证。结果表明,该密码锁具有高安全性、操作简单等特点。

关键词: FPGA;EDA;VHDL;电子密码锁

II

EDA技术课程设计—电子密码锁设计

目 录

课程设计任务书 ...................................................................................................................... I 摘 要 .................................................................................................................................... II

1.设计概述 .............................................................................................................................. 4

1.1设计背景 ........................................................................................................................... 4

1.2 电子密码锁的发展前景 .................................................................................................. 4

2.设计方案 .............................................................................................................................. 5

2.1 输入电路: .................................................................................................................... 5

2.2 控制模块电路: ............................................................................................................ 6

2.3 显示模块电路: ............................................................................................................ 6

3.电子密码锁的实现 .............................................................................................................. 6

3.1 系统的总体原理图 ........................................................................................................ 6

3.2 系统各模块的实现 ........................................................................................................ 6

4.设计验证 ......................................................................................................................... 10

4.1 软件仿真 ........................................................................................................................ 10

4.2 硬件验证 ........................................................................................................................ 11

5.总结 .................................................................................................................................... 12

参考文献 ............................................................................................................................... 12

附录源码 ............................................................................................................................... 13

EDA技术课程设计—电子密码锁设计

1.设计概述

1.1设计背景

随着电子技术的发展,具有防盗报警功能的电子密码锁越来越受到人们的青睐,用其代替密码量少、安全性差的机械密码锁已是必然趋势。电子密码锁与普通机械锁相比,具有无可比拟的优越性,如保密性好、防盗性强、可以不用钥匙记住密码即可开锁等。目前使用的密码锁大部分是基于单片机技术,以单片机为主要器件,以软件的方式生成编码器和解码器。而在实际应用中,由于程序容易跑飞,使得系统的可靠性较差。基于FPGA器件的电子密码锁,所有算法完全由硬件电路实现,使得系统的可靠性大为提高。[2]

1.2 电子密码锁的发展前景

在当今社会中,人们对于隐私的保护和对物品安全的重视程度与日俱增。因此,使用了现代电子技术的电子密码锁便有了广泛的应用前景。电子密码锁与普通机械密码锁相比,具有无可比拟的优越性,如保密性好,防盗性强,可以不用钥匙记住密码即开锁等,密码锁的主要功能是用来对某些操作进行加密保护,目的是避免无权人员使用,它的实际应用十分广泛,例如门卡系统,自动售货机,银行自动柜员机或者保险柜中都含有这种密码锁,本次所设计的电子密码锁,能够实现该四位十进制并行密码保护,当输入的密码与锁内密码一致时,绿灯亮,开锁;当输入的密码与锁内的密码不一致时,红灯亮,不能开锁。密码锁的密码可由用户自行设置,并可在LED数码管显示屏上显示所输入的密码。为人们的财产、信息安全提供了可靠地保障。[3]

4

EDA技术课程设计—电子密码锁设计

2.设计方案

电子密码锁

图2-1 方案一系统框图

2.1 输入电路:

作为电子密码锁的输入模块,课题选用的方案有按键来控制输入和触摸式键盘输入等多种。本实验主要采用8*4矩阵键盘作为输入电路。其主要分为以下三大模块:

(1) 时序产生模块:对主时钟进行分频,提供各模块的时钟信号。

(2) 按键去抖模块:防止机械按键抖动引起误判。

(3) 键盘扫描模块:判断键盘输入的按键键值。

5

EDA技术课程设计—电子密码锁设计

2.2 控制模块电路:

(1) 预置密码寄存器:将密码设置模式下输入的密码值保存。

(2) 比较模块:将密码输入模式下输入的密码与预置密码比较,判断正误。如果错误三次则进入报警模式。

(3) 万能密码:避免忘记密码引起的诸多麻烦。

2.3 显示模块电路:

电子密码锁的显示模块电路可采用LED数码管显示和液晶屏显示两种,因液晶显示屏成本高,适应能力差,所以采用LED数码管显示。

(1) 显示密码:在密码设置模式下显示密码数值。

(2) 屏蔽密码显示:在密码输入状态下屏蔽密码显示,以防密码泄露。

根据以上选定的输入设备与显示器件,并考虑现实各项密码锁功能的具体需求,与系统设计的要求,系统设计采用自顶向下的设计方案。

3.电子密码锁的实现

3.1 系统的总体原理图

电子密码锁

图3-1 系统总体原理图 系统的总体框图由FPGA作为中心控制模块,时钟输入与键盘扫描输入作为信号输入,LED显示模块和报警模块作为输出。FPGA芯片采用Cyclone公司的EP1C12Q240C8作为主控模块。

3.2 系统各模块的实现

电子密码锁主要有输入电路模块、控制电路模块、显示电路模块和报警电路模块四个模块。由于显示模块比较简单,重点介绍输入电路、控制电路和报警电路。

6

EDA技术课程设计—电子密码锁设计

3.2.1 时钟输入模块

系统采用1kHz时钟作为主频。因键盘扫描模块的扫描频率不宜过高,且LED显示模块为动态扫描,因此采用1kHz时钟作为系统主时钟。

3.2.2 键盘扫描模块

该系统的键盘输入模块为8*4矩阵键盘,该模块又划分为时钟产生模块、键盘消抖模块、键盘扫描模块三部分。

(1) 时钟产生模块。该时钟即为系统主时钟1kHz,通过该时钟的上升沿产生键盘扫描所需的时钟。

(2) 键盘消抖模块。键盘消抖模块是键盘扫描中比较关键的部分。通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,而这种会影响键盘扫描模块。[4]如果不作消抖处理,在键盘抖动期间获取键值,则会造成键值的错误或丢失,影响系统的稳定性。

键盘消抖分为硬件消抖和软件消抖,由于硬件消抖在开发板中难以实现的局限性,该系统采用的键盘消抖方式为软件消抖:根据系统时

钟1kHz且通常的键盘抖动时间为10毫秒左右,所以在程序中连续采样十次均为同一键值时,判定按下的按键已通过抖动时间,即键值已经稳定,这时

采样的键值便为正确键值。

(3) 键盘扫描模块。键盘输入模块采用的是8*4矩

阵键盘。该矩阵键盘行数为8,列数为4,且行扫

描信号通过译码芯片74HC138接入信号Sel3~Sel0。通过给Sel3~Sel0赋值“000”~“111”,行信号将依次产生“11111110”~“01111111”,由于列引脚通过5k的电阻上拉且矩阵键盘列信号和行信号的“线与”,当行信号为低电平且该行有按键按下时,按键所在的列信号将被拉为低电平,该信号输入FPGA控制模块,由核心控制模块获取列信号的值,即可判断矩阵键盘被按下的键值,从而将数据发送LED显示模块进行显示。

由于使用电子密码锁所需的按键为数不多,因此只需按键“0”到按键“F”,和功能扫描输出信号Sel3~Sel0的值及相应列信号返回值对应的键值如下表所示。

电子密码锁

Sel3~Sel0 Keyin3~Keyin0 1110

000

电子密码锁

1101 6 键值 0 图3-2 按键抖动波形图[4] 按键“Ctrl”、“Esc”和“Enter”即可。

7

EDA技术课程设计—电子密码锁设计 Sel3~Sel0 Keyin3~Keyin0

1011 0111 1110 1101 001 1011 0111 1110 1101 010 1011 0111 1110 1101 011 1011 0111 1110 1101 100 1011 0111 1110 1101 101 1011 0111 1110 1101 110 1011 0111 1110 111 1101 键值 None CTRL 1 7 None None 2 None C None 3 None D None None 8 E None ESC 9 F None 4 A None None 5 B

8

EDA技术课程设计—电子密码锁设计

Sel3~Sel0 Keyin3~Keyin0

1011 0111 键值 ENTER None

矩阵键盘功能键相应功能如下表所示:

表3-2 功能键功能表

键值

ESC

CTRL

ENTER 功能 清除输入或上锁 设置密码 完成密码输入

3.2.3 FPGA控制模块

系统的核心部分FPGA模块接收系统信号输入,处理接收数据,并为系统外设输出信号。其中的关键部分是处理接受数据。该系统围绕有限状态机(FSM)进行设计,采用的有限状态机类型为Mealy型状态机,状态的切换不仅与当前状态有关,并与输入信号有关。下面列出了各状态的名称以及特性。

(1) 密码输入状态:当前状态为密码输入状态,由矩阵键盘中“0~F”为键值的按键进行输入,输入过程中可按下“ESC”键进行清除。输入完成后按下“ENTER”键进行输入操作的完成,然后由FPGA判断密码输入是否正确。

(2) 密码设置状态:当前状态为密码设置状态。在密码输入状态下按下“CTRL”进入该状态,同样由矩阵键盘中“0~F”为键值的按键进行输入,“ESC”键进行已输入值的清除。输入完成下按下“ENTER”键进行密码设置的完成,重新进入密码输入状态。

(3) 解锁状态:当前状态为解锁状态。在密码输入完成后由FPGA将输入的值与密码预设值进行比较,若输入正确则进入解锁状态,若不正确则对错误次数进行计数。解锁状态将点亮解锁指示灯。

(4) 报警状态:当前状态为报警状态。当连续三次出现错误输入后,将进入该状态。报警状态将驱动蜂鸣器报警,并且锁定键盘。进入该状态后将无法进入其他状态。

3.2.4 LED显示模块

显示模块采用4位共阴极数码管进行显示。在多位LED显示时,为了简化电路,降低成本,将所有的段选线并联在一起,段选码,每送一次后延时,因为人眼视觉暂留时间100ms显示间隙不超过20ms,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管都在亮。[6]

(1) 密码输入状态:在密码输入状态要求用特殊字符对密码值进行屏蔽,采用该位数码管8段全亮的方法。

9

EDA技术课程设计—电子密码锁设计

(2) 密码设置状态:在密码设置状态对已输入的密码值进行显示,以免产生用户忘记密码造成诸多不便的情况。

4.设计验证

4.1 软件仿真

4.1.1 LED显示模块

电子密码锁

图4-1 LED显示模块仿真波形

使用Quartus II软件对LED显示模块进行时序仿真。如图4-1所示,在每个时钟信号的上升沿,4位数码管的位选信号增加1,且数码管的段选信号为相应的数值的段码,实现了数码管的动态扫描功能。

4.1.2 软件按键去抖模块

电子密码锁

图4-2 软件按键去抖模块仿真波形

图4-2为软件按键去抖模块的仿真波形。该波形中的列选信号从高电平变为低电平的过程中产生了大约8ms的抖动。从图中可以看出低电平计数器“Counter”在抖动期间几乎没有计数,而在抖动消失之后计数器的值到达5,系统此时取走键值,即四位密码中的最高位取走键值。从图中易观察得到仿真波形中该次按键的键值为“9”,从而赋值给“Code3”,由“Word3”显示其值。因此可以得出结论,该软件去抖方法具有较好的效果,可以有效地去除键盘抖动。

4.1.3 键盘扫描模块

10

EDA技术课程设计—电子密码锁设计

图4-3 键盘扫描模块仿真波形

图4-3为键盘扫描模块仿真波形。按下对应按键,“Word3”由初始值“0”变为“8”,同时数码管的段选信号在位选信号为“011”时其值为“7F”,即共阴数码管中数值“8”的段码。此仿真波形可证明按键按下后系统可正确获取键值并正确地显示在数码管上。

经过以上三步软件仿真,可初步证明该设计的合理性和完整性。由于输入时间超时等功能较简单,可在硬件电路上直接验证,因此不再赘述。但是软件仿真的成功不代表硬件电路的实现,因此在EDA V+试验箱连接硬件电路并验证实际电路的可行性。

4.2 硬件验证

图4-4 密码输入状态实图

图4-4为该设计的硬件验证实物图。经验证和调试,

电子密码锁

该设计完成了电子密码锁的开锁、

电子密码锁

11

EDA技术课程设计—电子密码锁设计

解锁、改密码等基本功能。当用户密码连续三次输入错误时,蜂鸣器报警并且锁定键盘。超时功能为在密码输入或设置密码状态下5秒无输入动作时,超时提示灯亮。万能密码为“FFFF”,该功能亦实现。在密码设置状态下显示密码值,在密码输入状态下用数码管八段全亮屏蔽密码,即如上图所示。经过验证,证明该设计较好地完成了设计的要求。

5.总结

这次EDA技术课程设计历时两个星期,课程设计的过程中不算艰辛,不过碰到的问题也是不少的。首先是查找资料的过程,平时我们都习惯于直接在网上查找资料。但是网上的资料良莠不齐,难以辨别资料的好坏,因此选择在图书馆查找资料和在维普网查找专业人士发表的期刊。我主要负责程序的编写,在编程的过程中也是碰到了不少问题,比如矩阵键盘的扫描问题,VHDL的所有进程是并发进程,因此在控制其时序方面不如C语言那样简明和易于控制。这点是值得我们学习的,控制系统的复杂性和全局性也有利于编程能力的提升。同时也感谢指导老师的不吝指导,帮助我们分析和解决问题,在此过程中收益颇丰,让我懂得了分析问题的循序渐进是很重要的。当碰到问题时不应该盲目尝试各种方法解决问题,而是应该理性分析然后选择最优方案。总之这次课程设计让我的研究能力又有了提高,是非常有益的。

参考文献

[1] 薛明明.VHDL设计电子密码锁[J].吉林省教育学院学报.2012,28(10):148-150

[2] 曹昕燕.EDA技术实验与课程设计[M].第一版.北京:清华大学出版社,2006.117-119

[3] 李秀霞.电子系统EDA设计实训[M].第一版.北京.北京航空航天大学出版社,2011.237-260

[4] bankrate1.按键消抖[EB/OL]./link?url=K5bBPgbznRydXAASg_cyYc GWcoUtp7AQig1QexDEmTqzGJ5j4P2rAhSxpH8sYEDkS1xjUjzLG5NSCx28wA3upq,2014.1.7

[5] 邹其洪.EDA技术实验教程[M].第一版.北京:中国电力出版社,2009.117-119

[6] 李珍.基于FPGA的可靠性电子密码锁设计[J].现代电子技术.2013,36(7):151-153

12

EDA技术课程设计—电子密码锁设计

附录源码

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity Lock is

port(Clock:in std_logic; --Main Clock Input:1KHz

Column:in std_logic_vector(3 downto 0); --Matrix Keyboard Input

LEDSegment:out std_logic_vector(7 downto 0); --LED Segment Selection

Sel:buffer std_logic_vector(2 downto 0):="000"; --LED Position Selection and Key Position Alarm,LED,NoticeLED:out std_logic:='0' ; --Wrong Code Input Warning and Unlock Signal Word0,Word1,Word2,Word3:out integer range 0 to 30;

Counter:out integer range 0 to 50000

);

end entity Lock;

architecture bhv of Lock is

Type FSM_TypeDef is(

InputState3,InputState2,InputState1,InputState0,InputStateDone, SetState0,SetState1,SetState2,SetState3,SetStateDone,

UnlockState,WarningState); --FSM Definition

signal State:FSM_TypeDef:=InputState3;

signal Set0,Set1,Set2,Set3:integer range 0 to 30:=15; --PreSet Code:"FFFF"

signal Code0,Code1,Code2,Code3:integer range 0 to 30:=0; --Code Input

signal Show0,Show1,Show2,Show3:integer range 0 to 30; --Numbers Used to Display

signal DivCounter:integer range 0 to 500:=0; --Counter Used to Frequence Division

signal KeyCounter:integer range 0 to 50000:=0;--Counter Used to Clear Keyboard Trembling signal KeyValue:integer range 0 to 30; --KeyValue returned

signal ErrorCounter:integer range 0 to 3:=0; --Error Times Counter

signal EClock:std_logic;

signal Loose:std_logic_vector(7 downto 0); --Signal Used to Judge Key Loosen or not

signal NoticeCounter:integer range 0 to 5000:=0;--Input Overtime Counter

function Decode(signal x:in integer range 0 to 30)--LED Decode Function

return std_logic_vector is

begin

case x is

when 0=>return x"3f";

when 1=>return x"06";

when 2=>return x"5b";

13

EDA技术课程设计—电子密码锁设计

when 3=>return x"4f";

when 4=>return x"66";

when 5=>return x"6d";

when 6=>return x"7d";

when 7=>return x"07";

when 8=>return x"7f";

when 9=>return x"6f";

when 10=>return x"77";

when 11=>return x"7c";

when 12=>return x"39";

when 13=>return x"5e";

when 14=>return x"79";

when 15=>return x"71";

when 20=>return x"40";

when 30=>return x"ff";

when 25=>return x"00";

when others=>return x"40";

end case;

end function;

BEGIN

----Assignments----

Alarm<='1' when State=WarningState else

'0';

LED<='1' when State=UnlockState else

'0';

Show0<=20 when (((State=SetState0 or State=InputState0)and EClock='1') or State=UnlockState) else Set0 when (State=SetState3 or State=SetState2 or State=SetState1 or State=SetStateDone) else 30 when (State=WarningState or State=InputState3 or State=InputState2 or State=InputState1 or State=InputStateDone) else

25 when ((State=SetState0 or State=InputState0)and EClock='0') else

20; -----UnlockState and WarningState

Show1<=20 when (((State=SetState1 or State=InputState1)and EClock='1') or State=UnlockState) else Set1 when (State=SetState3 or State=SetState2 or State=SetState0 or State=SetStateDone) else 30 when (State=WarningState or State=InputState3 or State=InputState2 or State=InputState0 or State=InputStateDone) else

25 when ((State=SetState1 or State=InputState1)and EClock='0') else

20;

Show2<=20 when (((State=SetState2 or State=InputState2)and EClock='1') or State=UnlockState) else Set2 when (State=SetState3 or State=SetState0 or State=SetState1 or State=SetStateDone) else 30 when (State=WarningState or State=InputState3 or State=InputState0 or State=InputState1 or State=InputStateDone) else

25 when ((State=SetState2 or State=InputState2)and EClock='0') else

20;

Show3<=20 when (((State=SetState3 or State=InputState3)and EClock='1') or State=UnlockState) else

14

EDA技术课程设计—电子密码锁设计

Set3 when (State=SetState0 or State=SetState2 or State=SetState1 or State=SetStateDone) else 30 when (State=WarningState or State=InputState0 or State=InputState2 or State=InputState1 or State=InputStateDone) else

25 when ((State=SetState3 or State=InputState3)and EClock='0') else

20;

Word0<=Show0;

Word1<=Show1;

Word2<=Show2;

Word3<=Show3;

Counter<=KeyCounter;

Division:process(Clock) --Clock Divsion Process

begin

if Clock'event and Clock='1' then

if DivCounter=250 then

EClock<=not EClock;

DivCounter<=0;

else

DivCounter<=DivCounter+1;

end if;

end if;

end process Division;

MAIN:process(Clock) --Main Process

begin

if Clock'event and Clock='1' then

-------Signal Sel Assignment Cycle-------

if Sel="111" then

Sel<="000";

else

Sel<=Sel+1;

end if;

KeyValue<=20; --KeyValue Initial Value Assignment case Sel is

when "000"=>LEDSegment<=Decode(Show1);

case Column is

when "1110"=>KeyValue<=0; Loose<="00000000"; --KeyValue Returned

when "1101"=>KeyValue<=6; Loose<="00000000";

when "1011"=>KeyValue<=20; Loose<="00000000";

when "0111"=>KeyValue<=16; Loose<="00000000";

when "1111"=>Loose(0)<='1';

when others=>null;

15

EDA技术课程设计—电子密码锁设计

end case;

when "001"=>LEDSegment<=Decode(Show2); case Column is when "1110"=>KeyValue<=1; Loose<="00000000"; when "1101"=>KeyValue<=7; Loose<="00000000"; when "1011"=>KeyValue<=20; Loose<="00000000"; when "0111"=>KeyValue<=20; Loose<="00000000"; when "1111"=>Loose(1)<='1'; when others=>null; end case;

when "010"=>LEDSegment<=Decode(Show3); case Column is when "1110"=>KeyValue<=2; when "1101"=>KeyValue<=20; when "1011"=>KeyValue<=12; when "0111"=>KeyValue<=20; when "1111"=>Loose(2)<='1'; when others=>null; end case;

when "011"=>LEDSegment<=x"00"; case Column is when "1110"=>KeyValue<=3; when "1101"=>KeyValue<=20; when "1011"=>KeyValue<=13; when "0111"=>KeyValue<=20; when "1111"=>Loose(3)<='1'; when others=>null; end case;

when "100"=>LEDSegment<=x"00"; case Column is when "1110"=>KeyValue<=20; when "1101"=>KeyValue<=8; when "1011"=>KeyValue<=14; when "0111"=>KeyValue<=20; when "1111"=>Loose(4)<='1'; when others=>null; end case;

when "101"=>LEDSegment<=x"00"; case Column is when "1110"=>KeyValue<=19; when "1101"=>KeyValue<=9; when "1011"=>KeyValue<=15; when "0111"=>KeyValue<=20; when "1111"=>Loose(5)<='1';

16

Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000"; Loose<="00000000";

EDA技术课程设计—电子密码锁设计

when others=>null;

end case;

when "110"=>LEDSegment<=x"00";

case Column is

when "1110"=>KeyValue<=4; Loose<="00000000";

when "1101"=>KeyValue<=10; Loose<="00000000";

when "1011"=>KeyValue<=20; Loose<="00000000";

when "0111"=>KeyValue<=20; Loose<="00000000";

when "1111"=>Loose(6)<='1';

when others=>null;

end case;

when "111"=>LEDSegment<=Decode(Show0);

case Column is

when "1110"=>KeyValue<=5; Loose<="00000000";

when "1101"=>KeyValue<=11; Loose<="00000000";

when "1011"=>KeyValue<=17; Loose<="00000000";

when "0111"=>KeyValue<=20; Loose<="00000000";

when "1111"=>Loose(7)<='1';

when others=>null;

end case;

when others=>null;

end case;

if Loose="11111111" then --Means All Keys Loosen

KeyCounter<=0;

----Input Overtime Notice Detector----

if(not (State=WarningState or State=UnlockState)) then

NoticeCounter<=NoticeCounter+1;

end if;

if (NoticeCounter=5000 and (not(State=WarningState or State=UnlockState))) then --Keyboard Input Overtime

NoticeLED<='1';

NoticeCounter<=0;

end if;

elsif (State=WarningState or State=UnlockState) then

NoticeLED<='0';

NoticeCounter<=0;

else

NoticeLED<='0';

NoticeCounter<=0;

end if;

if (not (KeyValue=20)) then

KeyCounter<=KeyCounter+1; ---A Delay For Key Pressed

17

EDA技术课程设计—电子密码锁设计

Code3=Set3) or

if KeyCounter=5 then ---Key Being Pressed Lasts 5ms case State is when InputState3=>if (KeyValue=16) then State<=SetState3; elsif (not(KeyValue=17 or KeyValue=19)) then Code3<=KeyValue; State<=InputState2; end if; when InputState2=> if KeyValue=19 then State<=InputState3; elsif (KeyValue=16) then State<=SetState3; elsif (not (KeyValue=17)) then Code2<=KeyValue; State<=InputState1; end if; when InputState1=> if KeyValue=19 then State<=InputState3; elsif (KeyValue=16) then State<=SetState3; elsif (not (KeyValue=17)) then Code1<=KeyValue; State<=InputState0; end if; when InputState0=> if KeyValue=19 then State<=InputState3; elsif (KeyValue=16) then State<=SetState3; elsif (not (KeyValue=17)) then Code0<=KeyValue; State<=InputStateDone; end if; when InputStateDone=> if KeyValue=19 then State<=InputState3; elsif (KeyValue=16) then State<=SetState3; elsif KeyValue=17 then if ((Code0=Set0 and Code1=Set1 and Code2=Set2 and 18

EDA技术课程设计—电子密码锁设计

Code3=15))

(Code0=15 and Code1=15 and Code2=15 and then --Universal Code State<=UnlockState; ErrorCounter<=0; else ErrorCounter<=ErrorCounter+1; if(ErrorCounter=2) then State<=WarningState; else State<=InputState3; end if; end if; end if; when SetState3=> if (not(KeyValue=16 or KeyValue=17 or KeyValue=19))then Set3<=KeyValue; State<=SetState2; end if; when SetState2=> if KeyValue=19 then State<=SetState3; elsif (not (KeyValue=16 or KeyValue=17))then Set2<=KeyValue; State<=SetState1; end if; when SetState1=> if KeyValue=19 then State<=SetState3; elsif (not (KeyValue=16 or KeyValue=17))then Set1<=KeyValue; State<=SetState0; end if; when SetState0=> if KeyValue=19 then State<=SetState3; elsif (not (KeyValue=16 or KeyValue=17))then Set0<=KeyValue; State<=SetStateDone; end if; when SetStateDone=> if KeyValue=19 then State<=SetState3; elsif KeyValue=17 then State<=InputState3; 19

EDA技术课程设计—电子密码锁设计

end if;

when UnlockState=>

if KeyValue=19 then

State<=InputState3;

end if;

when WarningState=>NULL; --Lock Keyboard when others => null;

end case;

end if;

end if;

end if;

end process MAIN;

end architecture bhv;

20

更多相关推荐:
电子密码锁的设计 开题报告

科学技术学院毕业设计(论文)开题报告题目:电子密码锁的设计学科部:信息学科部专业:电子信息工程班级:084电子学号:xxx姓名:xxx指导教师:胡斐填表日期:20xx年11月21日一、选题的依据及意义:单片机,…

电子密码锁开题报告

开题报告

毕业设计论文开题报告(电子密码锁)

毕业设计论文开题报告题目电子密码锁的设计研究一课题背景和意义锁是一种保安措施是人类为了保护自己私有财产而发明的一种用钥匙才能开启的装置随着人们生活水平的提高和安全意识的加强对锁的要求也越来越高既要安全可靠的防盗...

基于单片机控制的电子密码锁的设计 开题报告

枣庄学院本科生毕业设计论文开题报告题目基于单片机的电子密码锁设计姓名学号年级专业指导教师姓名高珊职称学科枣庄学院教务处制20xx年2月25日说明一开题报告前的准备毕业设计论文题目确定后学生应尽快征求导师意见讨论...

电子密码锁开题报告

1课题名称电子密码锁的设计2研究目的和意义随着社会的发展城市规模的迅速扩大城市中大量的工作机会吸引了外来人口的大量涌入使本来就复杂的城市管理更加复杂在近年来针对城市小区居民的入室盗窃和抢劫时有发生城市居民的生活...

电子密码锁设计 开题报告

毕业设计开题报告电子密码锁的设计与实现姓名院系专业年级学号指导教师职称起止时间

电子密码锁开题报告

毕业论文设计开题报告毕业论文设计题目电子密码锁的设计学生姓名学院电子信息工程学院一研究的目的和意义在人们的日常生活中锁被广泛使用人们常用锁来锁一些贵重物品乃至自己的家门目的就是为了提高安全性常见的锁有普通机械锁...

电子密码锁毕业设计中期报告

中北大学信息商务学院毕业设计论文中期报告学生姓名学院系专业论文题目指导教师秦宇学号09050641X41信息与商务学院电子信息工程基于单片机的红外遥控电子密码锁郝利华20xx年04月16日毕业设计论文中期报告

电子密码锁调研报告

本科生毕业论文设计调研报告题目基于单片机控制的电子密码锁的设计学生姓名学号20xx16030106专业班级指导教师完成时间20xx年3月20日基于单片机控制的电子密码锁的设计一主要目标任务综合运用所学知识如模拟...

红外感应电子锁开题报告

毕业设计开题报告题目名称红外感应电子密码锁报告人学号专业班级指导教师一课题背景及目的随着电子技术的飞速发展传统的锁具生产发生了变革现代的电子技术与机械技术相结合产生了一大批如声控锁磁控锁密码锁遥控锁指纹锁等先进...

基于AT89S51单片机的密码锁毕业设计开题报告

毕业设计论文开题报告课题名称基于单片机的电子密码锁设计类别毕业设计系别机电与自动化学院专业班机电一体化1002姓名赵徐评分指导教师李静华中科技大学武昌分校毕业设计开题报告撰写要求1开题报告主要内容1课题设计的目...

基于单片机的电子密码锁设计邹幼林—基于单片机的电子密码锁开题报告

毕业设计论文开题报告题目基于单片机的电子密码锁设计院电气信息学院专业电子科学与技术学生姓名邹幼林学号20xx01180226指导教师李世军20xx年6月8日开题报告填写要求1开题报告含文献综述作为毕业设计论文答...

电子密码锁开题报告(31篇)