基于单片机的指纹密码锁设计 毕业论文.doc_第1页
基于单片机的指纹密码锁设计 毕业论文.doc_第2页
基于单片机的指纹密码锁设计 毕业论文.doc_第3页
基于单片机的指纹密码锁设计 毕业论文.doc_第4页
基于单片机的指纹密码锁设计 毕业论文.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的指纹密码锁设计毕业论文目录目录2第一章 概述11.1 系统设计目的及意义11.2 指纹识别原理及其前景11.3 系统设计流程2第二章 硬件系统设计42.1 硬件系统整体设计42.2 单片机最小系统设计72.3 液晶显示模块-FYD12864-0402B112.4 按键控制部分电路152.5 指纹模块192.6 存储芯片AT24C02232.7 继电器模块272.8 报警电路28第三章 系统软件的设计303.1 主程序流程图303.2键盘检测扫描程序313.3 LCD12864显示流程图323.4指纹模块通信流程图333.5 定时器的设置333.6 串口初始化353.7 按键扫描程序373.8 主程序38第四章 系统调试404.1 功能模块的测试404.2 程序的烧写434.3 蜂鸣器、继电器调试444.4 液晶的调试44i4.5 按键的调试46第五章 总结与展望47参考文献48致 谢49ii南京工程学院毕业设计说明书(论文)第一章 概述1.1 系统设计目的及意义在日常的生活和工作中,住宅、物业、单位、银行的财产以及一些重要的资料的安全都会选择用加锁的办法来保证其安全。但使用传统的机械锁,需要携带多把钥匙,而且一旦丢失、被盗或遗忘,不仅配置相当麻烦,而且可能被他人复制冒用,造成极大的安全隐患,甚至财产损失。现代社会对安全的认证方式标准是简单、快捷和高效。而生物特征识别技术具有随身携带、不易仿制等优点比之传统的方法更安全、方便和保密,恰好满足人们对防伪精度高,快捷高效的需求。目前生物特征有手形、手指静脉、指纹、脸形、视网膜、虹膜、语音等,根据这些特征,分别研究出相应的识别技术,如手形识别、指纹识别、面部识别、虹膜识别等等。但基于技术的理论和实际生产之间的差距,以及不同行业不同人群对于安全级别和使用场合的要求不同。注定有些技术不能在大范围内普及使用,例如虹膜,虽然其安全系数最高,但成本也非常高,而且识别过程复杂,所以用在政府、军事及金融等高机密领域。距离全民化还有很漫长的路要走。虽然我国在手指静脉、虹膜、视网膜等生物特征识别领域要比国外的晚一点,但指纹识别技术却差不多和国外是同一时期开始的,所以无论在技术研究还是在市场上相关产品的普及都丝毫不比国外差。指纹识别虽然成熟,但是并没有真正实现“飞入寻常百姓家”,为日常生活提供服务。而指纹技术因其自身具有的优越特点注定会受到越来越多的关注,并最终实现全民化。因此指纹识别作为一门高新且具有发展前景的热门技术,值得好好研究一下,所以本次毕业设计便选用指纹识别技术相关的课题。除此之外,此次毕业设计需要熟练掌握单片机硬件设计方面的技术和软件编程的知识,之前学习的知识都是碎片化的,没有作为一个系统来考虑系统中各个模块如何部署,如何分工协作,所以毕业设计过程也是一个知识融合、系统化、精细化的过程,对于完善知识体系和理解实际开发流程有很大帮助。1.2 指纹识别原理及其前景本次设计中比较重要的模块便是指纹传感器了,指纹识别技术的概念已经比较普遍,简单来说,是通过比较指纹上不同的细节特征点来区别不同的身份。这些细节特征点是通过对指纹图像进行算法处理后得到的,体现在手指上则是凹凸不平的纹路的起点、终点、结合点和分叉点等可视化的信息。每个人手指上的指纹就一个独一无二的“迷宫”,而每个迷宫的起点、终点、拐点都不同,正是由于这些不同的“特征点”成为区分每个人身份的重要标识。当前,主要有两种采集指纹图像数据的方式:光学识别、半导体识别。光学识别是通过光学发射器发射的光线射在手指上后再反射回机器来获取指纹图像数据,并与之前采集好存储在模板库的指纹信息自动对比看是否一致,光学识别准确度受到手指是否干净、受伤、蜕皮的影响。但是随着不断的优化,光学指纹传感器的精度已经很高,而且识别精度可以根据需求动态设定,同时价格也相对较低一点,因此本设计采用光学指纹传感器来完成。指纹传感器采集好图像之后,使用指纹算法来实现指纹特征的提取、匹配、计算之后的特征点就是指纹模板库,每次都会自动把两个指纹的模板进行对比,计算其相似度来确定是是否为同一个指纹。在应用方面,比较前沿的像华为的Mate、荣耀系列、三星、小米5、vivo、乐视、酷派等手机都有通过识别指纹来解锁的功能。国外的近日有苹果公司的Apple Pay,在2月18日正式进入中国后,和国内不少银行合作用于在线支付,掀起了一股指纹支付的热潮。由于其快捷方便而且安全系数高的特点迅速在全球蔓延开来受到年轻人的追捧。但在技术方面归根结底还是通过手机上的指纹传感器采集用户数据准确匹配后来完成支付功能的。在2016年智能手机领域指纹解锁和指纹支付将是中高端手机的标配。未来随着指纹技术的逐渐成熟,生产成本的降低,将会在智能手机领域更加普及,甚至会广泛应用于我们日常生活的方方面面,为高品质的生活提供便利服务。1.3 系统设计流程系统会在Altium Designer9开发平台上设计原理图,绘制PCB并制成单片机开发板,然后根据原理图将相关元器件焊接到开发板上。软件部分在Keil uVision4开发平台上进行相关代码的编写和调试。然后利用串口助手工具将代码下载到开发板进行运行,观察硬件各模块是否可以正常运行,以及测试结果是否能够满足需求,便于及时调整程序。课题的主要任务是设计出一个可以录入指纹,并对录入指纹提取特征信息然后与指纹模板库进行匹配最终达到开锁功能的一个系统。指纹模板库的建立需要首先采集指纹进行图像算法处理,提取特征点做成特征文件并进一步合成特征文件存储在Flash,每次开锁都会采集指纹并和存储的模板进行比对判断是否为同一个指纹以确定是否授权打开锁。同时系统也支持指纹未录入时在键盘手动输入管理员密码进行解锁的功能。本论文由五部分部分组成,其中第一部分为概述,第二三部分分别为系统硬件和软件设计过程,第四部分为系统调试测试过程,最后一部分为总结与展望。第二章 硬件系统设计2.1 硬件系统整体设计本次设计是一个单片机相关的课题,主要设计硬件部分和软件部分,而所有工作开展都必须从设计原理图开始,只有设计出正确的原理图才能保证完成一个可以正常运行的硬件设备,软件可以不断调试,但硬件一经设计制作成品便不能再改变,所以硬件设计的每一个细节都要仔细推敲,反复验证,多仔细都不为过,尤其是没有单片机设计经验的话更应该注意。而硬件设计的第一步便从新建一个工程开始,新建工程的过程比较繁复这里不做详述。2.1.1 系统框图设计根据系统需要实现的功能进行需求分析,将功能模块化成一个个单元电路,每个单元独立设计、调试,留出与其他模块接口,最后在逻辑上进行嵌套调用实现整体设计,具体的硬件系统设计框图如图2-1所示。图2-1 硬件系统设计框图2.1.2 系统原理图设计由于本次是模块化的设计,每个模块的电路分开设计,引脚之间的连接使用Place Net Label连接,即电气连接。虽然引脚没有连接在一起,但相同的Net Label则表示两个硬件是物理连接的,这样避免了大量复杂的布线导致引脚之间的对应观察起来容易混淆的问题,因此使得本次的设计看起来逻辑上更加清晰明了,出了问题排查起来也更加容易。硬件原理图的系统设计如图2-1所示。图2-2 硬件设计系统图每个模块之间使用线框分割开来,但是这个线并不是连接元器件的线Place Wire,这个线是有电气信号的不能使用,点击Utility Tools选择Place Lain,还可以设置线的颜色,宽度等等,每个模块的功能有文字旁注,使得不懂原理图的人打开之后也知道每部分是实现什么功能的,点击Utility Tools,选择Place Test String,再点击table键输入需要的内容即可,而且可以根据需要设置字体大小颜色等。2.1.3 系统PCB图设计原理图设计完成后需要编译,查看有没有输出错误信息则将原理图更新到PCB文件开始布线,PCB布线首先影响的是板子的外形是否美观,当然最重要的还是板子能够稳定高效的运行。而布线过程中需要进行相关的设置并遵守一定的规则才能达到这样的效果。本次设计主要遵循了几个最重要的规则,由于单片机的晶振频率比较慢属于低速板,电气信号之间的干扰影响比较小,所以只要不犯明显的错误画出一个性能稳定且美观的板子还是很容易的。首先走线要最短,保证走线最短就要将同一模块的元器件尽量靠近,尤其要将晶振电路靠近单片机芯片的引脚,否则板子是不能正常工作的。这是最简单也是最重要的原则,决定了系统性能的稳定;其次电源和接地信号线要粗一些,本次设计使用30mil,而且布线过程中尽量避免90度走线,应使用45度拐角;最后板子要发到加工厂进行加工,出于对成本的考虑,板子面积控制在10*10cm。本次设计的PCB是两层板,分为Top Layer层和Bottom Layer层,设计完成后布线效果如图2-3和图2-4所示。图2-3 PCB的top 层设计图图2-4 PCB的Bottom层设计图2.2 单片机最小系统设计将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,然后将应用程序下载进单片机,便构成一台简单的单片微型计算机,简称单片机。最小系统即整个系统能够启动并进行工作的最小单元,缺一不可。单片机也有自己的最小系统,分别是负责整个系统的运算和控制的单片机、为整个系统提供动力的电源电路、为整个系统提供时序节拍的晶振电路、可以使得系统随时从一个正常的初始状态开始执行的复位电路。下边开始详细介绍单片机的最小系统以及相关的外围电路工作原理及设计实现。2.2.1 STC89C52单片机STC89系列芯片是国内公司宏晶科技研发生产的一款性能比较高的8位微控制器,且功耗更低。由于STC89C52RC使用的是经典MCS-8051的内核,所以指令代码完全兼容传统51单片机,这一点可以从使用keil4软件新建工程选择STC89C52RC芯片时的输出信息“8051-based microcontroller with 6T(6-clock) High-Speed Core”中得到很好的证明。STC89C52RC的主要特性如下:工作电压:3.8V-2.0V(3V)或5.5V-3.3V(5V)8K字节FLASH(8K bytes flash ROM)512字节RAM(512 bytes data RAM)32个I/O口(32-36 I/O Lines)晶振频率范围:0到40MHz之间均可,本次设计采用11.0592M可通过USB转串口工具连接单片机的RXD/P3.0,TXD/P3.1,VCC/20脚,GND/40脚,4个引脚即可完成用户程序的直接下载,但必须同时配合stc-isp-15xx-v6.57下载工具来实现(本次设计便是采用这种方法)。下载时间长短由程序编译后的实际大小决定。集成E2PROM存储功能(On-chip E2PROM)增加看门狗功能(WDT:即Watchdog Timer)3个16位定时器/计数器T0、T1、T2(3 Timers/Counters)4个外部中断以及串口功能(UART)STC89C52RC的引脚如图2-5所示。图2-5 STC89C52RC芯片引脚及扩展插针图各引脚功能叙述如下:VCC:单片机的第40脚,电源输入端口GND:单片机的第20引脚,芯片的接地端口P0口:每一个引脚都可以作为输入输出使用。P0口在当输入输出使用时由于是开漏的必须要加一个上拉电阻,本次设计使用一个10K的排阻。P1口:每一个引脚都可以作为输入输出使用。P2口:可直接作为输入输出口使用;寻址时可作为地址总线的高8位使用。P3口:每一个引脚都可以作为输入输出使用,除此之外,还定义了复用功能。复用功能的定义如表2-1所示。表2-1 STC89C52 P3口的第二功能XTAL1:接外部晶振的一端,输入端XTAL2:接外部晶振的另一端,输出端2.2.2 外部晶振电路晶振即晶体振荡器的简称。单片机执行汇编指令时,每条指令必须在固定的机器周期内完成操作。晶振的作用就是产生时钟周期,每12个时钟周期为一个机器周期。一个完整的系统可能有成千上万条指令,所有的指令都必须按照一个时间刻度或者节拍有条不紊的执行,这个节拍就由晶振来提供。单片机通过外接晶振,即外部提供时钟源,它结合单片机内部电路产生单片机所需的时钟频率,其中晶振频率越高,单片机运算速度越快。但一般单片机的速度都比较慢,所以外部时钟源进入单片机时内部电路会进行12分频。系统的时钟源使用11.0592M的晶振来提供,外部晶振电路设计采用晶振XTAL和电容C1、C2来构成,两个电容的一端接晶振,一端接地。C1、C2和晶振构成并联谐振电路,最后通过XTAL1,XTAL2脚与单片机相连接,即可为单片机的所有指令的执行提供一个统一的时序。本系统中C1和C2选择22PF,起微调的作用同时使时钟更加稳定。晶振电路具体的接法如图2-6所示。图2-6 晶振电路原理图本次设计的晶振为11.0592M,之所以选择11.0592M是因为单片机和指纹模块通信时波特率要求必须是9600bps,同时要在寄存器设置串口控制相关位装载TH和TL的值,只有在使用11.0592M的晶振时算出来的TH和TL是整数,而当使用12M晶振则装载进定时器的值是小数,这样取整后装载会有误差率。所以为了满足本系统的要求选用11.0592M的晶振。2.2.3 复位电路的设计复位电路的基本功能是:单片机在上电启动时都需要进行复位,对CPU和各个模块的硬件进行初始化,并对一些寄存器以及存储设备装入厂商预设的值使其从初始状态进行运行。如果在程序运行过程中出现错误或者其他硬件设备的异常导致需要引导单片机从重新开始运行时可以使用复位的方式来达到。常用的复位方式有高电平复位和低电平复位,在本次设计中使用的STC8952RC芯片为高电平复位方式,即正常工作时复位引脚为低电平,按下复位按键时,复位引脚持续两个机器周期以上有效时间的高电平即可完成复位操作。本次设计采用的复位电路为:在单片机的复位引脚RESET上外接电阻R1和电容C3,以及一个独立的按键Sal来完成设计,连接方便,成本低廉,具体实现如图2-7所示。图2-7 复位模块原理图本复位电路可实现上电复位和按键复位两种复位。1 上电复位:STC89系列单片机是通过高电平完成复位。在VCC和GND之间串联一个电容和电阻,然后将复位引脚RSTET连接到电容和电阻之间,上电瞬间电容还未充电两端电压为0,相当于短路,RESET直接与VCC相连,复位操作只需要持续高电平两个机器周期的的有效时间就能完成复位,机器周期T=12/11.0592M(单位:s),小数点后保留三位为0.001s。两个机器周期约为0.002s,而电容充电需要t=R1*C3=0.1s,远远大于复位时间,即在电容充电未完成之前复位已经完成。2 按键复位:按键复位就是当复位开关被按下时,按键将与之并联的电容短路,直接将RESET与VCC接通,因此RESET被拉为高电平,同时电容C3沿回路放电,松开按钮开关,电容充电,延时后RESET为低电平,从而完成复位操作。在本系统的复位电路中电容选10uF、电阻选10K。2.3 液晶显示模块-FYD12864-0402B液晶就是液晶显示器的简称。液晶显示器的原理主要是通过电流控制液晶分子按照一定的规则排列,同时配合背光来新实现我们需要显示的内容及画面。液晶的一大优点就是显示效果好,而且功耗低,使用起来简单又方便所以成为电子设计人员显示功能的首选。本次设计采用FYD12864-0402B型号的液晶,这款液晶的显示方案同类型的点阵液晶屏相比,接口程序编写起来简单方便,价格也比较便宜。FYD12864-0402B有串行和并行4位8位等多种通讯方式供使用者按照需求灵活选择,内部自带中文字库和简单的图形字符可以让我们的显示内容更加的丰富,设计出更加友好的人机交互体验。每行最多可以显示8个汉字,4行共32个汉字,通过简单的电路设计和接口进行编程即可实现图形显示界面。2.3.1 12864系列液晶的引脚功能本次设计使用的显示器件为LCD12864,之所以选择除了它可以显示汉字之外,最重要的是它可以显示的内容更多,这也是本次设计没有选择使用更加方便、接口更加简单的LCD1602的原因。LCD12864共有20个引脚,各引脚说明如表2-2所示。表2-2 接口信号说明本次设计中单片机和LCD之间数据的交换使用的是串口方式,所以D0D7的引脚是悬空的,复位采用高电平,所以17脚也是悬空的,去除本身未定义的两个空脚16和18,剩下的本次设计都会用到。2.3.2 控制器接口说明RS/RW的四种工作模式如表2-3。表2-3 RS/RW的四种工作模式2.3.3 指令说明当单片机向模块发送指令前,必须先检测模块此时是否正在执行其他命令,即确认模块当前处于空闲状态。通过读取BF标志位来判断,当BF=0,说明模块处于非忙碌状态可以接受指令,当BF=1,说明模块处于忙碌状态,需要延时等待。由于实际中液晶的反应要比单片机的快,可以不用延时,不过为了可靠期间,还是规范操作,即检测是否出于忙碌状态或者进行延时。通过设置RE可以选择到底使用基本指令集还是扩充指令集,设置好RE的状态后,如果之后使用同一种指令集时,就不用再去修改RE的值了。具体指令介绍如表2-4所示。 表2-4 LCD常用指令介绍2.3.4 12864与单片机连接图12864与单片机的连接比较简单,其中引脚3和引脚19之间的电位器用来调节LCD12864的背光亮度,RS、RW、EN用来和单片机进行通讯时选择通讯方式(并行还是串行,本次设计使用串行通讯)以及读写命令和数据操作,集体设计图如图2-8所示。图2-8 LCD12864电路原理图2.4 按键控制部分电路按键处于闭合还是断开状态可以通过检测电平来判断,具体高低电平到底对应哪种开关状态完全可以自行定义,本次设计中使用“0”表示闭合(即按键被按下),“1”表示断开状态。微动开关实物图如图2-9所示。图2-9 微动开关实物图微动开关封装尺寸及其引脚之间的关系如图2-10所示。图2-10 引脚封装尺寸图 但是由于矩阵键盘的设计采用的是微动开关,按键按下之后并不会锁死。所以微小的振动则可能使按键的开关在极短时间内闭合而造成干扰,微动开关的内部构造如图2-11所示。图 2-11 按键与触点示意图为了排除单片机每次检测到反应按键闭合状态的电平都实实在在有被按下的,即有效电平,而不会是其他的抖动或者干扰造成的,需要对检测到的按键状态进行延时处理,即第一次检测到按键按下时,延时等待一段时间再次进行检测,如果按键状态依然是闭合,则说明按键的确是被按下,是有效的。这种方法叫延时去抖,本次设计次用软件延时去抖来排除干扰因素。按键按下时电平的抖动状态如图2-12所示。 图2-12 按键闭合及断开前后的电压按键设计应用场合不同分为两种,分别是独立式按键和矩阵式按键。本次设计两种都有使用到,独立式用在手动复位电路,而矩阵式用在用户输入密码上。2.4.1 独立按键独立式按键每个键各占用一个引脚,只要检测该引脚的电平就可以判断按键的状态。这种设计方法每个按键需占用单片机的一个引脚,本次复位电路中用到的正是这种设计方法。需要说明的是尽管微动开关有四个引脚,但是在实际原理图设计过程中只要连接其中上下任何一个即可使得开关正常工作。因此原理图库中开关的原理图只有两个引脚,这一点可以从矩阵键盘电路中看到。2.4.2 矩阵按键本次设计的数字及字母按键数量较多,至少需要13个,也就是说如果采用独立按键的方式需要占用单片机13个引脚,浪费大量I/O资源,而其他的模块也需要适应I/O,这样会导致I/O不够用的情况,因此采用了4*4的矩阵式键盘设计方法来解决这个问题。矩阵式键盘的每个按键都有两个脚,一个脚接行线,另一个脚接列线,同一行的脚连在一个行线上,同一列的脚连在一个列线上,4*4的键盘则需要8根线,即占用单片机的8个引脚。行线和列线相交处就是按键的位置。当键被按下时,相交的行线和列线上的电平发生线与关系,线与其实就是相交的行线和列线上的电平进行逻辑与操作。单片机通过检测行或列线上的电平变化可以确定哪个按键被按下。线与的规则如下,其中1表示高电平,0表示低电平。00=0; 01=0;10=0; 11=1矩阵键盘的检测方法有行列扫描、反转扫描、中断扫描等多种方式。本次设计中采用第一种方式实现按键检测,其中行线P1.0-P1.3,列线P1.4-P1.7。完整步骤如下:1 检测是否有按键按下。让键盘的所有行线为输出线,即信号从单片机输出且全部设置为0;然后让4条列线为输入线,将列线上的电平信号输入到单片机,只要单片机检测到列线上有0电平,则说明有键按下,而且肯定是该列线上4个按键的其中一个。2 判断被按下按键所在的具体位置。因为在1步骤中已经知道按键在哪一列,究竟是该列的哪一行按键被按下,具体方法是依次将每根行线设置为输出线,并设置为0,剩余的行线都设置为1,然后将4根列线也置1,不断检测列线如果有0出现,则住说明被按下的按键的位置就在该列线与设置为0的行线相交的地方。3 确认按键具体位置后,就需要给按下的键进行编码,即每一个键被按下都有一个确定的值与这个件唯一对应,然后再将这个编码值转换为我们自己定义的键值,如1、2、3、a、b、c等。矩阵按键的与单片机的连接方式如图2-13所示。图2-13 矩阵式键盘电路图2.5 指纹模块2.5.1 指纹模块简介指纹模块里面主要是以高性能高速DSP处理器为核心,结合光学指纹传感器,上电之后自动与单片机建立连接,指纹模块会自动检测是否有手指放在光学采集窗口,当采集到有手指存在时自动采集指纹图像,对图像进行算法处理,提取特征信息做成特征文件,合成模板并存储至指纹库,每次采集指纹后会自动在模板库中搜索并比对特征信息。指纹模块具体的工作过程为:1 指纹采集:通过光学组件可以清晰获得手指的指纹图像,像照相机给手指指纹拍照一样。如图2-14所示:图2-14 指纹图2 特征生成:根据指纹的生物特征(纹路、断点、交叉的不同),通过指纹算法进行模糊处理提取这种特征,转换为0和1序列,做成特征文件。FM-70的每个特征文件大小是256 Bytes,3 模板存储:两个特征文件会合成一个指纹模板,大小为512 Bytes。然后将模板存储到指纹模块的Flash中作为模板库使用。后续的指纹对比和指纹搜索都是基于存储在flash中的指纹模板进行的。比如指纹识别的过程:先采集一次指纹,提取特征文件后会和指纹模板进行匹配,成功则会返回该指纹模板对应的编号,单片机以此来判断指纹是否为授权的指纹,进而决定是否打开密码锁。本次设计指纹模块型号是FM-70,其主要技术指标为。 2.5.2 指纹模块引脚接法指纹模块和处理器的通讯采用串口完成。接口引脚功能如表2-5所示。表2-5指纹模块引脚定义注:in:表示输入到模块, out:表示从模块输出。指纹模块的硬件接口电路如图2-15所示。图2-15 指纹模块接口图2.5.3 指纹模块命令指纹模块和单片机的通讯过程通过串口RXD和TXD引脚进行,单片机和指纹模块建立正确的连接后通过TXD引脚发送命令给指纹模块的RXD引脚,指纹模块将命令执行后的返回码通过TXD引脚回传给单片机的RXD进行判断。上电时自动与指纹模块建立连接,确保可以正常通讯。命令如下。验证口令和应答包的格式如表2-6和2-7所示。表2-6 验证指令包格式表2-7应答包格式1 指纹生成要经历四个步骤:指纹采集、特征生成、模板合成、模板存储。指纹图像采集指令和应答的包格式如表2-8和2-9所示。表2-8 指令包格式表2-9 应答包格式2 特征生成指令Img2Tz和应答的包格式如表2-10和2-11所示。表2-10 指令包格式表2-11 应答包格式3 模板合成指令RegMode1和应答的包格式如表2-12和2-13所示: 功能说明:将两个缓冲区CharBuffer1与CharBuffer2中的特征文件合成一 个模板文件。表2-12 指令包格式表2-13 应答包格式4 存储模板指令Store和应答的包格式如表2-14和2-15所示。表2-14 指令包格式表2-15应答包格式通过上述的步骤可以完成一个指纹从采集、处理到存储的整个流程,按照次步骤,依次录入需要授权的指纹到指纹库。指纹识别和采集不在一个模式下进行,所以进行识别时要切换到识别模式,该模式下会自动检测指纹采集窗口是否有手指存在,如果有则采集指纹并与模板库里的指纹信息进行匹配,如果匹配上则返回该指纹对应的编号。指纹模块会自动检测是否有指纹存在,如果有则发送Search指令。搜索指纹指令Search和应答的包格式如表2-16和2-17所示。表2-16 指令包格式表2-17应答包格式2.6 存储芯片AT24C02 AT24C02是一个2K串行CMOS EEPROM,具有非易失性,即断电不丢失。内部含有256个8位字节。可以用来存储一些需要长久保存的数据,本次设计用来保存管理员用户进入后台模式的密码,在管理员每次输入密码时都会从AT24C02中读取这个预设的初始密码进行对比。2.6.1 AT24C02工作原理24C02芯片的管脚配置如图2-16所示。图2-16 AT24C02管教配置图其中:A0、A1、A2代表器件的选择地址,比如一个IIC总线上挂载了多个24C02器件,单片机在读取数据的时候就需要选择究竟从哪个24C02设备上去读取,选择的方法正是通过A0、A1、A2的值来判断。每个引脚都有0和1两种值,三个引脚组合就有8种可能,也就是说IIC总线上可以同时挂在8个24C02这样的存储设备,如下2-17所示。图2-17 IIC挂载多个AT24C02器件图当只有一个24C02器件被IIC总线寻址时,这三个地址输入脚A0、A1、A2可以选择悬空也可以全部接入到GND。本次设计中AT24C02硬件电路与单片机的具体的连接如下2-18所示:图2-18 AT24C02电路图2-17中各个引脚的功能为。GND:接地VCC:电源电压WP:写保护。WP=1:写保护打开,只读;WP=0:写保护关闭,可读可写。SCL:串行时钟SDA:串行数据/地址2.6.2 AT24C02通信过程AT24C02通过IIC总线与单片机进行通信。但是单片机并没有在硬件上实现IIC总线协议,所以是不支持IIC通信的。本次设计中使用I/O来模拟实现IIC功能。在单片机与AT24C02通讯的过程中首先单片机作为一个主设备会通过发送一个起始信号来启动数据发送过程,然后发送从器件的地址,发送的地址格式是一个8位的数据,如图2-19所示。 图2-19 从器件的地址位图其中高四位为生产厂商预设的固定值1010,接下来的三位(A2、A1、A0)为从器件的地址位,用来定义哪个器件以及从器件的哪个地址开始访问数据,从器件的第8位作为最低位,表示读写控制位,“1”表示进行读操作,“0”表示进行写操作。单片机会发送一个起始信号和地址到总线上,总线上的从器件会把单片机发送的地址和自己的地址想比较,如果确认为同一地址则响应一个应答信号到总线上,与此同时判断R/W位来进行相应的读/写操作。单片机和从器件进行通讯时需要发送起始信号,当然通讯结束也需要终止信号,这两种信号的时序如图2-20所示。图2-20 启动信号和终止信号时序图以上所有操作操作只是为主从设备之间的通讯做准备工作,真正的通讯最终还是涉及到具体的读写操作,24C02设备的读写操作比较灵活,有多种方式可以选择,例如写操作有字节写和页写,读操作有立即地址读,选择性读和连续读,本次设计的读写操作使用选择性读和字节写。选择性读就是单片机可以对从器件的任意字节进行读操作,单片机会发送一个起始信号、从器件地址及需要读取的数据所在地址给从设备,在从设备应答之后重新发送起始信号和从器件地址,此时R/W位置为1,从设备应答会后输出一个8位字节的数据,这样主设备就从从设备中读取到了数据。整个过程可以从图2-21选择性读操作的时序中看出,编写代码时应该严格按照时序图来规范操作。图2-21 选择性读操作时序图 在进行字节写操作时,单片机发送起始命令和从器件地址信息给24C02,24C02给予应答后,单片机发送24C02的字节地址,从器件给予一个应答信号之后,单片机再发送数据发到刚才的这个字节地址,从器件再次应答。这样数据就会被写入到24C02的指定地址中。结束时单片机发送一个终止信号并不需要从器件进行应答即可主动终止本次写入操作。具体的写操作时序如图2-22所示。图2-22 字节写操作时序图2.7 继电器模块2.7.1 继电器工作原理继电器由一个线圈、动触点。常开触点、常闭触点组成。内部构造如图2-23所示,具体工作过程为线圈通电时基于电磁感应定律会在线圈的一端产生磁场,在磁场的作用下,衔铁被吸合,此时常闭触点断开连接而常开触点被接通;线圈断电时衔铁在处于拉伸状态的弹簧的作用下被剥离线圈,此时常开触点断开连接,常闭触点处于闭合状态。图2-23 继电器内部构造图注:1、2是线圈;3是动触点;4是常闭触点;5是常开触点 2.7.2 继电器与单片机的连接图本次设计中使用继电器的吸合来模拟电子锁的开关效果,同时使用了集线端子作为外部扩展接口可以连接真实的电子锁设备,使得设计效果更加逼真,但出于设计成本的考虑,实际演示依然使用继电器模拟。具体的硬件设计如图2-24所示。图2-24 继电器模拟开关电路设计中的继电器使用一个三极管Q2来驱动,三极管使用PNP型,型号9012。三极管在电路中的作用有三个,分别是信号放大、电平转换和开关作用,其中信号放大一般用在模拟电路中,电平转换和开关作用在数字电路尤其是单片机电路中用的比较频繁,本次设计便是利用了三极管的开关作用,由于三极管是一个压控流型的器件,所以基极通过一个电阻把电流转换成电压,当基极电压低于集电极电压时,三极管被导通。基极被接在单片机的P36引脚上,单片机通过发送一个高低电平即可控制三极管的截止与导通,进而控制了继电器的断开与吸合状态。2.8 报警电路2.8.1 蜂鸣器的工作原理蜂鸣器是一个有源器件,这里的源不是指电源,而是指振荡源。接通电源后,电流通过线圈后产生磁场,使得振动膜片有规律的振动从而发出声音。2.8.2 报警电路的设计与实现本次设计采用蜂蜜器作为报警电路,当用户输入密码错误次数超过设定值时会启动蜂蜜器进行报警。蜂鸣器依然采用PNP三极管来驱动,驱动的原理在继电器电路中已经详细介绍过,这里不再赘述。具体的硬件电路设计如图2-25所示。图2-25 报警电路图第三章 系统软件的设计在本次设计的电路板中,单片机是作为控制器,主要向LCD12864及指纹模块发送命令和写入数据,同时接受这两个模块返还的应答或采集的数据,因此软件部分应用程序的设计主要针对LCD12864、按键程序进行开发。开发的方式为对硬件电路中设计到的每个模块功能进行细化,抽象成程序化的逻辑封装成一个个函数,然后通过函数之间的相互调用完成功能。由于设计到的模块较多,直接开始编程会导致无从下手,或者导致代码逻辑不清晰的问题,因此本次设计会梳理整个程序的执行流程和逻辑关系,通过流程图来体现出来,然后根据流程图开始逐步编写,填充代码框架。软件开发环境为单片机软件keil 4,编程语言选用标准C 51,本次设计功能模块较多,使用一个源文件会给编程带来困难,因此采用多文件方式开发,即建立多个源文件和头文件,添加到一个工程文件中,代码编写结束后进行链接、编译、生成后缀名为.hex的可执行文件,下载到单片机开始执行。3.1 主程序流程图对系统功能分析后,制定如图3-1的主程序流程图。 图3-1 主程序流程图程序执行的流程为:首先对各模块硬件功能包括液晶显示、键盘扫描、指纹模块通信、串口、定时器等进行初始化,然后检测是否有手指按在指纹传感器的采集窗口上,或者是否有按键被按下,使得程序在这里出现两个分支。根据实际情况调用相应的功能函数。3.2键盘检测扫描程序键盘模块属于外围设备主要工作是与用户进行交互操作,通过用户的输入来灵活控制程序的执行流程。单片机的工作就是扫描是否有按键被按下,并判断是哪个按键被按下进而定义每个按键的作用执行相应的功能。按键检测流程如图3-2所示:图3-2 键盘检测流程图3.3 LCD12864显示流程图显示模块主要是完成与用户的实时交互操作。将每一步执行的结果动态输出在显示屏,用户根据显示信息决定下一步的操作,显示模块流程图如图3-3所示:图3-3 显示模块流程图3.4指纹模块通信流程图指纹模块与单片机之间的通讯方式选择的是串口方式,串口通讯过程中涉及到数据的发送和接收,具体流程见图3-4:图3-4 串口通信流程图3.5 定时器的设置在本次设计中有报警电路,当用户在输入密码错误次数累计超过三次时发出警车声音,这个声音的频率是变化的,所以需要不断累加频率值,这个工作工作定时器来完成。定时器的使用又涉及到中断系统。中断是指CPU在处理事件A的时候,收到了事件B的请求(中断请求),CPU转而去处理事件B,完成后返回中断点继续执行事件A。定时器的工作过程如下:1 打开总中断,如表3-1所示。表3-1 IE中断允许控制寄存器 EA:中断允许总开关,无论哪种类型的开关使用之前都必需打开总中断2 设置定时器工作方式,如表3-2所示。表3-2 TMOD寄存器 M1M0:工作方式设置位。定时计数器有四种工作方式如表3-3所示。表3-3 定时器工作方式 GATE=0:由TR0/TR1置位启动定时器T0/T1.其中高低四位对应T1、T0 C/T:定时计数选择位。C/T=0:定时器;C/T=1:计数器3 给定时器赋初值4 打开定时器中断,如表3-4所示。表3-4 TCON定时器控制位 TF1(TF0)定时器中断 TR1(TR0)定时器开关5 打开定时器6 编写中断服务子程序中断服务函数没有返回值也不用申明,更不用调用,而是由系统自动调用的,编写时必须使用关键字interrupt和中断号,即中断的入口地址。定时器实现定时的相关核心代码如下。定时器初始化时没有对TH0,TL0赋值,这个操作主要放在中断服务子程序中进行。3.6 串口初始化单片机在和模块通信时使用串口方式,因此要提前设置好串口的波特率、数据包格式、工作方式、接收/发送控制以及状态标志等。在51单片机中只要特殊功能寄存器的地址能够被8整除则可以直接对寄存器的位进行操作,而在串口相关的设置中便可通过此种方式来完成。SCON地址位如表3-5所示。表3-5 SCON寄存器地址位 SM2=1:通过设置的RB8来决定是否激活RI,即当RB8=0时,不激活RI,接受到的数据丢弃: RB8=1时,接受到的数据送到SBUF,并激活RISM2=0:忽略RB8的值(RB8=1),有数据收到就送往SBUF,并激活RIREN=1:启动串口;REN=0:禁止串口TB8:方式1中不用,用在方式2/3TI/RI分别是发送/接受中断标志位,当数据发送/接受完成时,会激活TI/RI位等于1,并向CPU发送中断申请。(硬件置1,软件清0)串口通讯的方式有四种,通过SM0、SM1设置,其中方式0和方式2的波特率是固定的,而方式1和方式3可以根据需要自行设置,本次设计选择方式1,具体工作方式如表3-6所示。表3-6 串行口工作方式 设置好串口的工作方式后还要设置通信的波特率,波特率的计算方法为:方式1的波特率 =(2SMOD/32)(T1溢出率)T1 溢出率 = fosc /12256 (TH1)其中SMOD位在特殊功能寄存器PCON中设置,PCON寄存器如表3-7所示。表3-7 PCON寄存器SMOD:波特率倍增位。串口在方式1/2/3时:若SMOD=1,波特率翻倍)。指纹模块和单片机进行数据交换时的波特率要求等于9600bps,所以需要对寄存器的相关位进行设置使得波特率和指纹模块波特率一样才能正常通讯。具体的做法为:1 设置串口的工作方式和相关控制(SCON)2 选择定时器并设置定时器工作方式3 计算定时器初值并载入TH、TL4 启动定时器5 打开总中断下面是串口初始化程序。3.7 按键扫描程序行列扫描按键是否被按下,如果检测有键按下则延时去抖重新检测后如果为有效按下,则对键值进行编码,将编好的码值作为返回值由后续函数做进一步处理,核心代码语句做了相关注释具体如下。编码之后的值虽然相对每一个按键都是唯一的,即根据码值可以唯一确定一个按键的位置,但是在实现稍微复杂一点的功能时如果每次使用到一个按键时都要返回查看码值表来确定,这样相当麻烦,而且代码编写好之后如果有BUG会给调试带来很大的不便,即便没有BUG出现,过一段时间再回头看源代码,会非常吃力,严重降低了代码的可读性。因此本设计中会对编写好的码值重新定义以方便后续代码的编写和调用,具体的代码如下。3.8 主程序主程序作为所有函数执行的入口,里边的程序不要写得太长,需要实现的功能单独封装成函数作为接口程序供主函数调用,主函数主要是完成硬件各模块的初始化工作,如供提供显示功能的液晶LCD12864、掉电存储的AT24C02、定时器及串口的初始化,保证各模块处于可正常运行状态。初始化完成之后,开始执行程序,主函数中主要是完成整个系统执行的逻辑控制,所以在一个死循环中时刻等待检测用户的操作,调用相应的函数实现相应功能并实时将执行结果反馈回来,然后在一个循环中检测用户的操作,具体代码如下。第四章 系统调试本章主要是建立在第二章和第三章的基础上,即硬件设计已经全部完成,由于本系统的原理图设计完成之后,并没有进行仿真测试,所以必须保证原理图没有任何问题。即对原理图的每个模块进行反复检查。最终将PCB文件发往厂家制成板子,然后开始焊接元器件进行测试硬件各功能模块的电路是否可以正常工作,测试完毕没有问题则可开始继续调试软件部分的代码,观察运行效果是否满足本次设计的需求。所以本章的调试工作主要集中在对硬件部分和软件部分的调试。4.1 功能模块的测试PCB中布线完成之后,使用软件可以进行编译检查是否有错误,但这种错误只能限于语法或者规则上的错误,无法再逻辑上进行判别。本次PCB设计结束正是遇到这样的问题。在继电器电路中,原理图设计本身没有没有问题但在生成PCB文件后引脚的连接则和元路图的对应不一致。原理图如图4-1所示。图4-1 继电器模块设计图生成的PCB文件引脚连接如图4-2所示,仔细观察发现引脚连接不对。为了排查问题,重新新建继电器模块原理图文件,然后生成PCB文件进行观察,如图4-2所示:发现问题依然存在,猜测应该是元器件的引脚和封装引脚对应不一致图4-2 错误的继电器模块PCB图在PCB对引脚重新编辑之后发现连接正常,正确的连接图如图4-3所示。图4-3 正确的继电器模块PCB图印刷出来的PCB板如图4-4所示。图4-4 印制成功的PCB板焊接好的PCB如图4-5所示。 图4-5 焊接好的PCB然后开始对报警电路蜂鸣器进行测试,测试程序如下。#include sbit Bell=P20;void delay();void main() while(1) delay();Bell=1;delay();Bell=0;4.2 程序的烧写测试程序已经写好,接下来便是程序的下载,使用STC-ISP单片机程序下载软件进行烧录。经过简单的设置即可完成程序下载。如图4-6所示。图4-6 单片机程序下载图打开程序文件,选择生成的*.hex文件,点击下载,然后按下开发板电源的开关,在上电的一瞬间即可完成程序的下载,大概需要几秒钟,程序越小时间越短。4.3 蜂鸣器、继电器调试蜂鸣器的测试程序在4.1中已经写好,下载进开发板上电之后并没有发现蜂鸣器的滴答声,为了验证是程序问题还是硬件问题,首先对程序的引脚重新定义之后下载到另一块开发板蜂鸣器可以发出声音,说明程序没有问题。查看硬件原理图也没有问题,蜂鸣器是使用三极管来驱动的,猜测可能是基极的电阻值选取有问题,去除电阻(因为本次设计的电容电阻均采用贴片式,所以去除时比较方便),重新焊接合适阻值的电阻之后下载程序,运行发现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论