电子密码锁设计课程设计.docx
《电子密码锁设计课程设计.docx》由会员分享,可在线阅读,更多相关《电子密码锁设计课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
电子密码锁设计课程设计
唐山学院
EDA技术课程设计
题目电子密码锁设计
系(部)信息工程系
班级
姓名
学号
指导教师
2012年12月24日至12月28日共1周
EDA技术课程设计任务书
一、设计题目、内容及要求
设计题目:
电子密码锁设计
内容及要求:
(1)设计一个电子密码锁,实现密码的输入、更改、上锁等功能;
(2)密码输入:
开锁代码为二进制数,当输入的密码时,显示器上将显示该数值;
(3)密码上锁:
当按下上锁键后,密码锁将被上锁;
(4)密码更改:
当按下密码更改键后,密码锁将被重置为新密码;
(5)密码解除:
当按下解锁键后,如果密码正确,密码锁将被打开。
设计要求:
(1)根据任务要求确定电路各功能模块;
(2)写出设计程序;
(3)分析时序仿真结果;
(4)提交设计总结。
二、设计原始资料
QuartusⅡ软件;EDA实验箱;计算机一台;
三、要求的设计成果(课程设计说明书、设计实物、图纸等)
课程设计说明书1份,不少于2000字,应包含设计原理分析、相关软件介绍、仿真波形分析,实验箱下载验证等。
四、进程安排
周1-周3:
查阅资料,上机编写并调试设计程序;
周4:
整理、撰写说明书;
周5:
课程设计答辩并提交设计说明书。
五、主要参考资料
[1].VokneiA.Pedroni.《VHDL数字电路设计教程》.电子工业出版社,2008.5
[2].潘松,黄继业.《EDA技术实用教程》(第二版).科学出版社,2005.2
[3].焦素敏.《EDA应用技术》.清华大学出版社,2002.4
指导教师(签名):
教研室主任(签名):
课程设计成绩评定表
出勤
情况
出勤天数
缺勤天数
成
绩
评
定
出勤情况及设计过程表现(20分)
课设答辩(20分)
设计成果(60分)
总成绩(100分)
提问
(答辩)
问题
情况
综
合
评
定
指导教师签名:
年月日
1引言
1.1设计背景
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着社会的发展和人们生活水平的提高,人们的安全意识也逐步加强。
传统的机械锁由于其构造的简单,失效的事件屡见不鲜,如何实现保密防盗这一问题变的尤其的突出,密码锁以其安全性高、成本低、功耗低、易操作等优点受到越来越多人的欢迎。
在数字技术网络技术飞速发展的今天,电子密码锁技术得到了迅猛的发展。
它早已超越了单纯的门道及钥匙管理,逐渐发展成为一套完整的出入管理系统。
它在工作环境安全、人事考勤管理等行政管理工作中发挥着巨大的作用。
在该系统的基础上增加相应的辅助设备可以进行电梯控制、车辆进出控制,物业消防监控、餐饮收费、私家车库管理等,真正实现区域内一卡智能管理。
基于EDA技术设计的电子密码锁。
以其价格便宜、使用方便、安全性高、成本低、功耗低、易操作等优点,受到了人们的普遍关注。
而以可编程逻辑器件(FPGA)为设计载体,以硬件描述语言(VHDL)为主要表达方式,以QuartusⅡ5.1开发软件等为设计工具设计的电子密码锁,由于其能够实现密码输入、密码校验、密码设置和更改等功能,因此,能够满足社会对安全防盗的需求。
本设计的各个模块由相应的VHDL程序具体实现,并在QuartusⅡ5.1环境下进行了整体电路的模拟仿真,最终实现“密码锁控制器设计”的要求。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。
在实际应用中,由于程序容易跑飞,系统的可靠性能较差。
基于VHDL语言的电子密码锁已经是现代生活中经常用到的工具之一,用于各类保险柜、房门、防盗门等等。
用电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点。
同时基于VHDL语言的电子密码锁是新型现代化安全管理系统,它集微机自动识别技术和现代安全管理措施为一体,它涉及电子,机械,计算机技术,通讯技术,生物技术等诸多新技术。
它是解决重要部门出入口实现安全防范管理的有效措施,适用各种场合,如银行、宾馆、机房、军械库、机要室、办公间、智能化小区、工厂、家庭等。
1.2设计任务与要求
1.2.1内容及要求
1.设计一个电子密码锁,实现密码的输入、更改、上锁等功能;
2.密码输入:
开锁代码为二进制数,当输入的密码时,显示器上将显示该数值;
3.密码上锁:
当按下上锁键后,密码锁将被上锁;
4.密码更改:
当按下密码更改键后,密码锁将被重置为新密码;
5.密码解除:
当按下解锁键后,如果密码正确,密码锁将被打开。
1.2.2设计要求
1.根据任务要求确定电路各功能模块;
2.写出设计程序;
3.分析时序仿真结果;
4.提交设计总结。
2总体方案设计
2.1方案设计
密码锁控制器是硬件与软件的结合。
根据设计要求,决定以FPGA芯片和VHDL语言设计此电子密码锁。
用一片FPGA芯片实现,从而大大简化了系统结构,降低了成本,提高了系统的保密性和可靠性。
这种设计不仅简化了系统结构,降低了成本,更提高了系统的可靠性和保密性。
另外,采用可编程逻辑器件开发的数字系统,方便地升级和改进。
2.系统总框图
本系统的硬件部分主要由密码锁控制电路、密码锁显示电路、LED显示电路、报警电路、密码更改与设置电路组成。
整体系统框图如下图2.1所示。
图2.1密码锁控制器系统总框图
2.3.1密码锁内部结构
密码锁控制器由密码锁主体部分和外部指示电路组成。
其中密码锁主要作用是接收输入的密码并进行密码的验证操作;外部指示电路的主要作用是用LED数码管显示输入的密码以及根据密码验证的结果给出不同的LED指示灯和数码管显示;当连续输入三次次错误密码时,启动报警装置,报警装置则采用扬声器。
2.3.2密码锁功能介绍
1、输入密码时,七段码管从右至左显示按键对应的数值,每按键一次,显示左移一次,6次密码输入结束后系统开始校验,校验结束后,七段码管全灭。
也就是显示部分维持的时间就是按键6次的时间和校验的时间。
2、密码输入连续三次错误开始报警,报警声要求为高声2.5KHz,低声1.25KHz交替报警,交替周期为1s(1Hz时钟,需要对系统时钟进行10K分频)。
3、用LED模块的LED1指示键盘状态,如果有按键按下,LED1亮起,直到松开该按键;用LED2指示门的状态,也就是密码校验结果,如果密码校验正确,LED2亮起,否则如果密码校验错误LED2闪烁4次,然后熄灭,表明密码错误。
4、具有密码设置和更改的功能。
输入密码正确后5秒内按*号键输入要设置和更改的密码,按#号键确认密码设置与更改,连续输入两次,则密码设置成功。
3密码锁的内部结构及单元主要功能
3.1密码显示电路
七段数码管是电子开发过程中常用的输出显示设备。
在本设计中使用的是8个四位一体、共阴极型七段数码管。
其单个静态数码管如下图3.6所示。
由于七段数码管公共端连接到GND(共阴极型),当数码管的中的一个段被输入高电平,则相应的这一段被点亮。
反之则不亮。
共阳极性的数码管与之相反。
四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。
八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。
在键盘获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。
键盘扫描与7段数码管显示示意图如下图3.1所示。
图3.1单个数码管管脚示意图
3.2密码锁控制电路
3.2.1软键盘的实现
通常在一个键盘中使用了一个瞬时接触开关,并且用如图2.3所示的简单电路,微处理器可以容易地检测到闭合。
当开关打开时,通过处理器的I/O口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O口的输入将被拉低得到逻辑0。
图3.3简单键盘电路
但是开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。
尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。
当触点闭合时,其弹起就像一个球。
弹起效果将产生如图3.4所示的好几个脉冲。
弹起的持续时间通常将维持在5ms∼30ms之间。
如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。
然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。
图3.4按键抖动
键盘上阵列这些开关最有效的方法(当需要5个以上的键时)就形成了一个如图3.5所示的二维矩阵。
当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O端被连接的时候)。
一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。
矩阵所需的键的数目显然根据应用程序
而不同。
每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。
图3.5矩阵键盘
3.2.2键盘扫描
键盘扫描过程:
对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。
同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
本实验箱上的4×4矩阵键盘的电路原理如图3.6所示。
与FPGA的管脚连接如表3-1所示。
图3.64×4矩阵键盘电路原理图
表3-14×4矩阵键与FPGA的管脚连接表
信号名称
对应FPGA管脚名
说明
KEY_C0
F8
矩阵键盘的第1列选择
KEY_C1
A14
矩阵键盘的第2列选择
KEY_C2
F10
矩阵键盘的第3列选择
KEY_C3
B16
矩阵键盘的第4列选择
KEY_R0
F12
矩阵键盘的第1行选择
KEY_R1
B17
矩阵键盘的第2行选择
KEY_R2
F15
矩阵键盘的第3行选择
KEY_R3
B18
矩阵键盘的第4行选择
密码锁控制电路是整个系统的控制中心,当有按键按下时,系统根据译码所得数字,判断出按下的是功能键还是数字键,如果是功能键(*或#),则执行相应键的功能(‘*’表示可以输入需要设置和更改的密码;‘#’表示设置密码完成);如果是数字键,则作为密码。
控制电路的硬件由一片EP2C35F484C8实现,控制功能由软件实现。
以下是EP2C35F484C8的简单介绍:
Altera公司发布的第二代CycloneFPGA,与第一代相比,加入了硬件乘法器,同时内部存储单元数量也得到了进一步的提升,EP2C35核心板上采用的FPGA是Altera公司CycloneII系列芯片EP2C35F484C8。
下面介绍EP2C35核心板的有关特性。
表3-2列出了EP2C35的有关资源特性,更详细的特性请参阅其数据手册。
表3-2EP2C35F484C8资源列表
特性
EP2C35
逻辑单元Les
33,216
M4KMemoryBlocks
105
所有RAMBits
483,840
18×18硬件乘法器
35
PLLs
4
用户可用I/O
322
基本串行主动配置器件
EPCS4
图3.7EP2C35F484C8芯片管脚示意图
如图3.7所示BGA封装的FPGA(EP2C35)的管脚名称用行、列合在一起来表示。
行用英文字母表示,列用数字来表示。
通过行列的组合来确定是哪一个管脚。
如A2表示A行2列的管脚。
F3表示F行3列的管脚。
表3-3LED灯与FPGA的管脚连接列表
端口名
使用模块信号
对应FPGA管脚
说明
CLK
数字信号源
L2
时钟为10KHZ
RST
复位按键
B3
复位信号
KEY-STATE
LED灯D1
E9
LED指示
部分
DOOR
LED灯D12
B20
3.3LED显示电路
用LED显示电路状态模块中的LED1指示键盘状态,如果有按键按下,LED1亮起,直到松开该按键;用LED2指示门的状态,也就是密码校验结果,如果密码校验正确,LED2亮起,否则如果密码校验错误LED2闪烁4次,然后熄灭,表明密码错误。
3.4报警电路
根据设计要求,当密码输入连续三次错误,则报警电路连通,其中报警声要求为高声2.5KHz,低声1.25KHz交替报警,交替周期为1s(1Hz时钟,需要对系统时钟进行10K分频)。
在整个试验平台的下方有两组跳线,位于左边的一组跳线用来选取喇叭的声源信号。
当跳线位于左边的时候喇叭的声源来自FPGA,位于右边时声源来自AIC23模块的输入信号。
位于右边的一组跳线用来控制喇叭的开关,当跳线位于左边时喇叭为开的状态,位于右边时为关的状态。
要使喇叭发声请确认喇叭处于开的状态,并且声源是信号输入。
扬声器(喇叭)电路图如图3.8所示:
图3.8扬声器电路图
3.5密码更改与设置电路
该电路的的具体功能是:
输入密码正确后5秒内按*号键输入要设置和更改的密码,按#号键确认密码设置与更改,连续输入两次,则密码设置成功。
按要求,该部分要用到I2C总线E2PROM器件AT24C08。
它的容量为1024×8(8Kbytes),支持2.7V~5.5V工作电压。
当工作电压为5V的时候,其接口速度可以达到400kHz。
实验箱上的供电为3.3V,所以其接口速度最高只能达到100kHz。
AT24C08与外部的I/O接口引脚连接电路如图3.9所示。
在本系统中I2CSCL、I2CSDA分别与FPGA连接。
图3.9AT24C08与外部的I/O接口引脚连接电路
4VHDL程序设计
4.1密码锁显示模块
当输入密码时,七段码管从右至左显示按键对应的数值,每按键(0~9)一次,显示左移一次,6次密码输入结束后系统开始校验,校验结束后,七段码管全灭。
也就是显示部分维持的时间就是按键6次的时间和校验的时间。
表4-2显示模块的管脚分配表
端口名
使用模块信号
对应FPGA管脚
说明
CLK
数字信号源
L2
时钟为10KHZ
RST
复位按键
B3
复位信号
DOOR
LED灯D12
B20
DISPLAY0
数码管A段
G6
时间显示
DISPLAY1
数码管B段
G7
DISPLAY2
数码管C段
H3
DISPLAY3
数码管D段
H4
DISPLAY4
数码管E段
H5
DISPLAY5
数码管F段
H6
DISPLAY6
数码管G段
J4
SEG-SEL0
位选DEL0
G5
SEG-SEL1
位选DEL1
G3
SEG-SEL2
位选DEL2
F4
process(Clk1KHz,Rst)--显示右移
begin
if(Rst='0'orpush_num=0)then--复位时,全灭
buff1<=15;
buff2<=15;
buff3<=15;
buff4<=15;
buff5<=15;
elsif(Clk1KHz'eventandClk1KHz='1')then
if(kflag1='1'andkflag2='0'and(((keyr="0111"orkeyr="1101")andkeyc/="1110")orkeyr="1011"))then
buff1<=buff2;
buff2<=buff3;
buff3<=buff4;
buff4<=buff5;
buff5<=buff6;
endif;
endif;
endprocess;
process(Clk1KHz,Rst)--获取键值
begin
if(Rst='0'orpush_num=6)then--全灭
buff6<=15;
elsif(Clk1KHz'eventandClk1KHz='1')then
if(kflag1='1'andkflag2='0')then
if(keyr="0111")then
casekeycis
when"0111"=>buff6<=1;
when"1011"=>buff6<=4;
when"1101"=>buff6<=7;
whenothers=>buff6<=buff6;--nochange
endcase;
elsif(keyr="1011")then
casekeycis
when"0111"=>buff6<=2;
when"1011"=>buff6<=5;
when"1101"=>buff6<=8;
when"1110"=>buff6<=0;
whenothers=>buff6<=buff6;--nochange
endcase;
elsif(keyr="1101")then
casekeycis
when"0111"=>buff6<=3;
when"1011"=>buff6<=6;
when"1101"=>buff6<=9;
whenothers=>buff6<=buff6;--nochange
endcase;
endif;
endif;
endif;
endprocess;
process(SEG_SEL)
begin
case(SEG_SEL+1)is
when"000"=>Disp_Temp<=10;--'-'
when"001"=>Disp_Temp<=buff1;
when"010"=>Disp_Temp<=buff2;
when"011"=>Disp_Temp<=buff3;
when"100"=>Disp_Temp<=buff4;
when"101"=>Disp_Temp<=buff5;
when"110"=>Disp_Temp<=buff6;
when"111"=>Disp_Temp<=10;--'1'
endcase;
endprocess;
process(Clk)
begin
if(Clk'eventandClk='1')then--扫描累加
SEG_SEL<=SEG_SEL+1;
Display<=Disp_Decode;
endif;
endprocess;
process(Disp_Temp)--显示转换
begin
caseDisp_Tempis
when0=>Disp_Decode<="";--'0'
when1=>Disp_Decode<="";--'1'
when2=>Disp_Decode<="";--'2'
when3=>Disp_Decode<="";--'3'
when4=>Disp_Decode<="";--'4'
when5=>Disp_Decode<="";--'5'
when6=>Disp_Decode<="";--'6'
when7=>Disp_Decode<="";--'7'
when8=>Disp_Decode<="";--'8'
when9=>Disp_Decode<="";--'9'
when10=>Disp_Decode<="";--'-'
whenothers=>Disp_Decode<="";--全灭
endcase;
endprocess;
endbehave;
4.2键盘扫描模块
程序中,我们用kr表示矩阵键盘的行信号,kc表示矩阵键盘的列信号,KEY-State表示输入数据是否有效。
具体端口管脚分配及其与FPGA芯片的具体连接表如下表4-3所示:
表4-3键盘扫描程序的管脚分配表
端口名
使用模块信号
对应FPGA管脚
说明
CLK
数字信号源
L2
时钟为10KHZ
RST
复位按键
B3
复位信号
KR0
4*4矩阵键盘R0
F12
矩阵键盘行信号
KR1
4*4矩阵键盘R1
B17
KR2
4*4矩阵键盘R2
F15
KR3
4*4矩阵键盘R3
B18
KC0
4*4矩阵键盘C0
F8
矩阵键盘列信号
KC1
4*4矩阵键盘C1
A14
KC2
4*4矩阵键盘C2
F10
KC3
4*4矩阵键盘C3
B16
KEY-STATE
LED灯D1
E9
键盘扫描部分分程序如下:
process(Clk1KHz)--键盘扫描
begin
if(Clk1KHz'eventandClk1KHz='1')then
if(Kr="1111")then
kflag1<='0';
kcount<=kcount+1;
if(kcount=0)then
kc<="1110";
elsif(kcount=1)then
kc<="1101";
elsif(kcount=2)then
kc<="1011";
else
kc<="0111";
endif;
else
kflag1<='1';
keyr<=Kr;
keyc<=Kc;
endif;
kflag2<=kflag1;
endif;
endprocess;
KEY_State<=kflag1;
4.3时钟分频程序设计
根据要求取FPGA的系统时钟为10KHz,因为系统中还需要有别的频率,如:
1Hz(1S)、0.2Hz(5S),因此必须对其进行分频处理。
对10KHz进行10分频即可得到1KHz的频率;对10KHz进行10K分频即可得到1Hz的频率;对10KHz进行50K分频即可得到0.2Hz的频率。
时钟分频部分源程序如下:
process(Clk);--对系统时钟进行10分频,得到1KHz的频率
begin
if(Clk'eventandClk='1')then--检测时钟上升沿
if(Clk_Count1<10)then
Clk_Count1<=Clk_Count1+1;
elseClk_Count1<="0001";
endif;
endif;
endprocess;
Clk1KHz<=Clk_Count1
(2);
process(Clk1KHz);
--对频率为1KHz的时钟进行1K