【《基于ARM平台的指纹门禁系统设计》15000字(论文)】_第1页
【《基于ARM平台的指纹门禁系统设计》15000字(论文)】_第2页
【《基于ARM平台的指纹门禁系统设计》15000字(论文)】_第3页
【《基于ARM平台的指纹门禁系统设计》15000字(论文)】_第4页
【《基于ARM平台的指纹门禁系统设计》15000字(论文)】_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

基于ARM平台的指纹门禁系统设计目录摘要 页摘要:人类在文明发展的过程中学会了使用锁,来保证自己的财产安全,而在现代社会中,充斥着各种各样的门禁设施及防盗锁。但随着科学技术和网络技术的不断发展,旧的门禁方式在鉴别方式、速度和安全方面越来越无法满足人们的需求,例如射频卡、数字密码等方式,其安全性不够高。在新的方式开发的过程中,由于人的身体特点具有不可复制性,所以人们把目光转移到这上面来,开始了生物识别的门禁系统的开发。指纹识别作为生物特征识别来说,它是独特的,它的特点是不易伪造,它的这些特点目前已被广泛应用于安全访问。对于企业来说,办公楼的安全性和规范性就显得尤为重要,对于进入楼内的人员需要严格的管理,并且需要保密的楼层也需要限制人员的进入。指纹识别技术正好可以解决这个问题,每个人的指纹就相当于每个人的身份标识,对指纹的识别和管理,就能够实现对人员的管理。本文设计的系统是基于单片机的指纹识别门禁系统,它是在指纹识别技术的基础上加以开发扩展得来的,主要目的是加强人员的出入管理和提高门禁的安全性。整个门禁系统主要包括上位机和下位机两部分,在下位机设计中,以单片机作为系统核心,加入指纹识别模块、液晶显示模块、网络模块、继电器和蜂鸣器等子系统模块;在上位机设计中,主要负责用户信息的管理,并且通过网络模块,对多个下位机行进远距离控制。本文基于ARM平台下对利用指纹识别技术,构架了整个门禁系统总体框架,详细介绍各子模块的硬件和软件资源。论文首先分析了指纹门禁系统的可行性,其次详细介绍了系统中各硬件模块的指令及接口,然后以系统软件架构为中心阐述了指纹门禁系统的性能及使用方法,最后给出了系统实际使用的功能测试分析。关键词:ARM平台;指纹识别;门禁;单片机本课题研究的背景与意义研究背景21世纪,随着世界科学技术的进步,计算机技术的飞速发展,信息技术,电子技术的改进程度越来越高,越来越融入人们的生活。与此同时,技术发展带来的安全技术也越来越受到人们的重视。如何提高安全技术成了当前时代的首要问题,相对于安全问题来讲,首先要解决的是生活中的安全问题。人类的财产安全问题历来都是人类最重视的,而依靠传统的门锁和防盗锁技术在科技水平较高的今天是无法满足的。各种各样的门禁系统随着人类文明发展的需要不断出现,比如数字密码、射频卡标签蓝牙,人脸识别等。这些门禁系统各有其自己的优点,但很多不能同时实现既安全又方便,比如说老旧的数字密码锁,锁的密码容易忘记,并且容易被人盗取。生物识别技术是一种以人体的特征进行识别的技术,这种技术指出人体带有独特性。每个人的生物特征都是不一样的,因此在门禁方面生物识别技术有很大的优势。而在人体特征中,指纹特征具有独特性,在一亿个人里找不出第二个相同特征的人,同时指纹覆盖与人体皮肤,去除外部因素导致皮肤变形,具有长久不变的特征,难以伪造。故而可以用指纹来做门禁锁,人们也可以不再苦恼因时间长导致遗忘密码的问题,指纹识别技术凭的安全性和方便性在门禁系统的开发中占有重要的地位,这也是该技术迅速崛起的原因。研究意义在各式各样的生物识别方法中,与其他的识别技术相比较起来,指纹识别技术具有以下几个特点:(1)安全性:人类的手指纹路是与生俱来的,并且在没有受到创伤的情况下,可以保持永久不变形,最重要的是每个人的指纹都是不相同的,这就保证了用指纹来做门禁解锁是十分安全可靠的。(2)特征数据化效率高:在指纹识别技术中通过采集人体指纹特征,生成数据模板来进行数据比对,而在一般情况下门禁解锁系统通常对数据比对模板库的要求较小,这使得指纹数据也可以进行远距离数据传输,极大提高了指纹在门禁系统中应用的效率。(3)提高生活效率:将指纹技术用于门禁系统的,人们就可以不用再记忆密码,同时提高安全性,解锁迅速,不需要人们携带钥匙,极大提高了人们的生活效率。鉴于指纹识别技术具有以上的优点,所以利用人的指纹特征进行人身识别是十分优秀的,并且在各个领域都有广阔的应用前景和无比巨大的市场潜力,值得去进行开发。研究现状在我国的古代,手指纹路就被用于标识个人身份,每当有正式的交易,或需要签字画押时,就会摁手印,这表示在古代人们就已经开始重视数据的唯一性于独特性了,也说明古人对于生物特征有了一定的认知水平。而在近现代,科学技术水平的迅速发展,生物学的不断突破,有关人体的秘密不断被挖掘出来,比如说:1.对于指纹纹脊,每个人的纹脊的形状都不相同;2.人体的手指指纹不会随着年龄的增长而变化,也就说会一直保持不变。这两个特点就是经常说的指纹的唯一性和不变性,正是因为这两个特点,使得在许多犯罪的案件中,罪犯所留下的指纹被用作识别犯人的证据,指纹得以正式应用。与国外相比,国内的指纹识别技术起步是比较晚的,但发展的速度却是很快,到目前指纹识别技术已经很成熟。特别是北京大学的两位院士(程民德和石青云)在这方面取得了很高的成就,在国内具有很高的知名度和影响。目前市场上的出售的指纹模块种类有很多,比如半导体电容式指纹模块、光学指纹模块、射频真皮识别指纹模块、刮擦式真皮识别指纹模块等等。在指纹识别算法方面,不断地被优化,以及硬件平台的不断升级,使指纹识别技术相应的造价不断降低,应用方面越来越广。指纹识别技术不在只用在警用领域,而是进入到人们的日常生活中来。因为指纹识别在门禁方面的前景十分的广阔,利润高,这使得很多的公司和研究机构都投入了大量的人力去开发,使得指纹识别门禁的发展空前迅速,而且这些产品已经在各个领域被应用。目前广泛应用的指纹识别都是基于单片机的,而单片机技术又在飞速发展,这就支撑着指纹识别技术在越来越多的领域中飞速发展。总而言之,指纹识别技术的具有十分广阔的发展前景。研究目的与内容1.41研究目的本文研究的目的在于改善用户的安防设施,提升用户的生活水平。同时磨炼自身的个人技术。在多样化的世界中,如何识别一个人的身份,变得尤为重要。指纹识别在人类的身份识别中又占有重要的地位。所以研究指纹识别,可以迎合世界发展趋势,体现个人价值。1.42研究内容本文的研究内容大致分为系统可行性分析,软硬件系统架构,arm内核单片机模块沟通系统各硬件的过程,指纹识别指令,以及各电子元件的性能和接口分析。首先,结合指纹识别的技术,构建门禁系统的雏形,设计基本电路,确定系统各模块功能及任务,同时规划系统软件结构及流程。其次,规划指纹门禁系统的各接口数据通信格式,设计各硬件接口引脚及驱动方式。简化系统电路,以产品规格为目标,设计PCB电路原理图,完成设计成品。最后,测试系统实际运行性能,消除系统Bug,简化代码,优化系统。可行性分析技术可行性本文依据指纹识别技术,设计基于arm内核的单片机指纹识别门禁系统,主要系统编程语言是C语言,系统开发环境为keiluvision5(单片机开发工具),基于市面上经济价值不高的零散电路元器件设计电路。用户可通过本系统,完成指纹识别解锁的功能,用户可提前录好指纹信息,然后即可通过指纹识别模块,与录入的指纹信息进行数据比对,沟通arm内核单片机,控制电磁锁模块,完成解锁的效果。技术技术可行性方面不存在问题。经济可行性本文采用的硬件有:STC89C52核心处理器,AS608指纹识别模块,LCD12864液晶显示模块,继电器模块,蜂鸣器模块,按键模块,所需费用如下表所示(数据来源于淘宝网店):表1硬件成本表10UF电解电容C112.5元30PF瓷片电容C2,C323.5元黄色LED灯D211.0元红色LED灯D311.0元1N4007二极管D4,D521.5元继电器HK410K113.5元微动开关KEY1~KEY17176.4元DC-002电源插座P115.0元DC-005电源插座P215.0元LCD12864液晶显示屏Q1118.5元蜂鸣器Q213.5元S8550三极管Q3,Q422.5元10K色环电阻R113.5元10K电位器R2112.5元10k排阻R512.5元1K色环电阻R6,R7,R8,R942.5元双掷开关SW113.5元STC89C52单片机U1128.5元接线柱U213.6元AS608指纹模块U3172.5元AT24C02存储芯片U5133.5元2pi插针U615.6元11.0592MHZ晶振Y118.6元本文的软件及人工费用约合计为200元,故总设计所需费用500元。法律可行性本产品采用的均是开源资源,所以除了在软件、硬件上有成本支出外,没有任何法律风险。操作可行性系统主要通过指纹识别模块,对用户进行识别,进而控制门锁的开闭。用户只需通过按键进行调节,依据自己所需功能,进行相应按键操作即可。系统需求分析功能分析本次的基于单片机的指纹识别门禁系统需要完成一系列复杂的任务,包括图像采集、图像处理、图像对比等,以及控制外围器件等工作。所以要实现这样一个复杂的任务,需要处理器具有比较强的计算能力和控制能力,并且储存器资源要大。本文的指纹识别系统,就是利用指纹识别技术,通过单片机的硬件和软件管理实现对门禁的控制。所以整个系统需要满足:(1)体积小,便于安装。所以在选择硬件时就要考虑硬件的体积问题。(2)用户界面要简单,便于操作。(3)处理速度要快,指纹的辨识率要高。所以在处理的选择和指纹识别模块的选择上,要注重其性能。性能分析基于整体设计方案,确定系统的模块组成,再根据各个模块需要实现的功能,确定各模块硬件的选择和使用。对于指纹识别模块需要有高辨识率、处理速度要快、准确率高,所以确定使用AS608光学指纹采集仪。液晶显示模块有LCD1602和LCD12864,但LCD12864能够显示4*8汉字,且界面清晰,所以采用LCD12864,来文字显示录入模式、识别模式转换。单片机需要快速计算和控制,以及较大存储空间,所以选择STC89C52。按键采用独立式按键,便于用户记忆按键的操作流程及操作功能。总体设计根据指纹识别技术,设计基于单片机的指纹识别门禁系统,实现用户通过按键交互的方式,控制系统指纹模块,进行指纹录入,指纹识别,指纹删除等操作。所以系统主要单片机核心模块和各子系统分模块,单片机作为主要的控制部分,串口通信及引脚驱动的方式对多个模块进行控制,并且实现用户身份识别的设定。用户通过指纹识别模块,对用户进行识别,进而控制电磁门锁的开闭。整体框架可以为如下图所示:图1整体框图整个系统的入口模块为指纹识别电路,在指纹数据录入后,单片机将指纹数据存于AT24C02模块中。然后处于循环等待模式,在检测到,指纹模块发来的指纹识别指令后,开始控制引脚电平,驱动指纹模块,进行指纹采集,并将采集的指纹数据与存入的指纹数据相比对,在相似度达到要求后,分情况控制蜂鸣器与电磁锁模块。蜂鸣器模块在指纹不匹配时被激活,报警提醒用户。电磁锁与门直接相连的部分,通过指纹识别模块对用户的指纹进行识别,并将结果传输给单片机,单片机再进一步控制液晶显示结果,并通过蜂鸣器发出声音提示,用户还能够进行按键调节。各个子模块的具体硬件选择和使用方法在后面具体介绍。详细设计根据前面得到的硬件具体规划,下面就对各个模块进行逐个介绍。包括核心处理器、指纹识别模块、液晶显示模块等等,下面将对各个子模块进行介绍。系统硬件模块设计系统硬件可通过Proteus仿真软件,提前搭建好仿真模拟环境,这款软件集中了市面上流通的大部分电子元器件,同时还支持多种编程工具,极大的提高了系统的开发效率,减小技术难度。系统硬件及电路连线如下图所示:图2系统硬件仿真图STC89C52核心处理器1.主要性能STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、非常有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。2.引脚介绍STC89C52的引脚结构图如下所示:图4STC89C52引脚图各个引脚功能介绍:(1)电源引脚VCC:电源电压VSS:接地(2)输入输*引脚P0P1P2P3总共4*8=32个引脚,这些引脚主要用作I/O输入输出,控制一些外接器件,例如LED灯、开关等等。其中P3口有特殊用途,可用于串口传输以及中断和定时器,本次的设计主要用到P3口。具体功能如下所示:表2P3口第二功能端口第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外部0中断)P3.3INT1(外部1中断)P3.4T0(定时器0)P3.5T1(定时器1)(3)控制引脚RST:复位输入。这个引脚用来使单片机复位,令单片机初始化。EA:当有外部RAM时,需要访问外部的存储器,就需要EA引脚来控制是否选择外部存储器。(4)时钟引脚XTAL1:外部振荡器的时钟输入的第一个引脚。XTAL2:外部振荡器的时钟输入的第二个引脚。3.外围电路STC89C52作为单片机,想要运行起来,就需要最基本的一些外围电路的支持,比如供电模块、时钟模块。本设计使用5V电源供电,时钟信号采用12MHZ晶振。电源电路首:先要将220V城市交流供电转换成5V的直流供电,需要经过变压、整流、滤波过程,再传输给单片机。原理图如下所示:图55V电源电路电源电路左端接入220V交流市电,经过变压器降压,将电压降下来。在经过一个由四个二极管组成的整流桥式电路,将交流电转换成为直流电。转换之后得到的直流电电压波动比较大,不够稳定。所以并联一个电解电容,起到滤波的作用,是电流进一步稳定。进过滤波之后的电流仍然稳定度不够,所以再接上一个三端稳压器,其内部由三极管和电阻构成,能够实现随着所加电压的波动而电阻发生变化,这样在稳压器的右边,电压就可以保持稳定。在稳压器之后再接电容,起到进一步滤波的作用。电源电路的右端,接一个开关,来控制电流的接通,即电源开关。二极管起到保护作用。VCC端便得到一个5V直流电源,可以接到单片机VCC引脚上面供电。时钟电路:时钟电路是单片机的心脏,是动力源,控制着单片机的工作,单片机就是通过时钟信号来给其他的部件发送信号,推动者单片机整体的运行。晶振电路如下:图6晶振电路本设计采用12MHZ的外部晶振来供给单片机时钟信号,晶振连接到单片机的XTAL1和XTAL2上面,在并联两个电容C1和C2,这两个电容可以使频率降低波动,还有助于起振。起到以为晶振为12MHZ,所以时钟周期为1/12M=1/12us,机器周期为12*时钟周期=1us。AS608指纹识别模块AS608亮背景光学头指纹识别设备采用光学指纹传感器,由高性能DSP处理器和FLASH等芯片构成,具有指纹图像处理、模板提取、模板匹配、指纹搜索和模板存储等项功能。采集到的指纹直接存储到传感器内部存储区中,AS608传感器最大可以存储120枚指纹,每个指纹模板占用512字节。AS608指纹传感器采用串口的方式与单片机进行数据传输,所以只需要将指纹模块接入到单片机串口引脚上,通过串口就可以进行控制指纹传感器了。由于指纹传感器的工作电压是3.3V而单片机系统电源电压是5V,所以在电源引脚上加入D4和D5两个二极管进行降压到3.3V左右给指纹传感器供电,利用了每个二极管大概压降0.7到1V左右的压降的原理,原理图如下图指纹识别模块与单片机的引脚连接如下所示:图3指纹识别模块与单片机的连接指纹识别模块的VCC端接到5V电源,GCD端接地,RXD串行数据输入接到单片机的P3.0口(TXD),TXD串行数据输出端接到单片机的P3.1口(RXD)。模块与单片机需要通信,通信方式采用串行通讯,从单片机发送指令,指令以字节为单位从串行口发送出去,模块接收指令,在运行指令,实现功能。单片机的指令、模块的应答和指纹数据的传输都要满足模块的规定包的格式。(1)指令包/数据包。指令包和数据包共分为三类:命令包,包标头=01;数据包,且有后续包,包标头=02;数据结束包,包标头=08。数据包都需要添加前置的标头,标头都是0xEF01。(2)应答包。模块在接收到单片机的指令后,就根据指令开始工作,当任务完成后,就需要向单片机返回指令执行的结果,这时就需要应答包,应答包有自己的格式和相应的确认码的定义。(3)通讯波特率。指纹识别模块的波特率为9600bps,与单片机进行串口通信,单片机的波特率也要相应设置为9600bps。(4)指令集。指纹识别模块具有自己完整的指令集,通过这些指令集,可以完成所有的功能。指纹识别模块的指令集、应答包以及数据包在后面软件设计的部分作详细介绍。3.2.3LCD12864液晶显示模块液晶显示模块是面向用户界面的,所以需要充分显示所要表达的内容,还要简洁,所以本系统采用的液晶显示模块为QC12864B,这个模块带有中文字库,不需要用户自己定义,只需要定义好位置显示即可,能够显示的汉字有32个,一个汉字相当于两个字符,所以,字符可以显示64个。LCD12864液晶显示模块共有20个引脚,通讯方式有串口和并口两种,串行可以用SID口通讯,并口是有8个数据口,实现8位并口传输。单片机与液晶模块连接如下所示:图4液晶模块也单片机的连接并行传输主要涉及7到14引脚,并行数据口DB0~DB7连接到P0.0~P0.7,串行数据口5连到P11,串行时钟6连接到P12,串并行的方式选择引脚15连接到P16。2.LCD12864是完整的模块,在它的内部有自己的RAM和ROM,如下所示:(1)字型产生ROM:屏幕是由很多个小的晶体管组合显示的,通过控制一部分小的晶体管的开关,就能够构成很多形状的字符。(2)显示数据RAM:内部数据存储的是需要显示的字符的编码内容,对于有字库的,只需要把代码放到里面就能够显示出来(3)字型产生RAM:如果想要显示图像,中文库里面没有图像的代码,这时就可以通过字形产生的RAM,把需要显示的图形的编码放到上面,之后再放到显示数据RAM中去,就可以显示到屏幕上去。3.指令控制LCD12864模块的提供两种指令来控制芯片,基本指令和扩充指令,单片机在让模块实现功能的时候,就需要根据模块的指令的格式,来向模块发送指令,实现功能。在单片机项目模块发送指令之前,为了防止出现冲突的问题,就需要先判断模块是否处于空闲的状态,只有当模块处于空闲状态下才能够接受新的指令;如果想要在发送指令之前不去检查标志位,就需要在发送新的指令之前,延时足够长的一段时间,来保证前一个指令能够确实执行完成,这样才能够实现不判断忙也能够不冲突的发送指令。模块使用基本指令还是扩充指令,是由RE来决定的,RE的数值就代表使用哪一种指令,要想改用另一种指令,就需要来改变RE的数值,这样才能够实现。4.串行通信图5串行时序图本次设计采用单片机与液晶模块串行通信的方式,引脚主要用到4、5、6三个引脚,来实现片选(4)、同步时钟(6)和串行数据口(7)。串口控制—格式11111ABC,其中后面三位用于控制,A用来表示数据往哪里传,高电平表示从模块向单片机;B表示数据类型,高电平表示传输的是数据,低电平表示传输的是指令;C固定为0。串行发送数据时,需要按照这样的格式才能够实现正确的数据和指令发送。继电器模块门禁的门体部分,用电控锁来控制门的开闭,电控锁实际上是由一个电磁铁来控制,电磁铁则可以用继电器来控制电流的开闭,继电器选用HK410。图6继电器部分继电器部分的控制端连接到P14,P14连接到PNP型的三极管的基极上面,当P14处于高电平时,三极管不导通,继电器处于打开状态,指示灯灭;当P14处于低电平时,三极管导通,指示灯亮,电磁铁通电,使开关打开,继电器处于闭合工作状态。利用软件编程,控制P14引脚的电平高低变化,来实现继电器的控制。蜂鸣器模块门禁控制系统在与用户交互时,需要声音提示,声音提示选用蜂鸣器,模式切换时响一声,指纹录入成功和匹配成功时响两声,指纹录入失败和匹配失败时响三声。蜂鸣器的驱动采用直流驱动,只需要利用一个三极管,将电源、引脚和蜂鸣器连接,就可以通过控制引脚电平,来实现控制蜂鸣器驱动电压的控制。驱动电路如下图所示:图7蜂鸣器部分蜂鸣器通过一个PNP型的三极管连接到P15引脚上去,单片机复位后引脚都是高电平,所以用PNP型三极管。若用NPN型三极管,在单片机复位之后就会处于导通状态,蜂鸣器就会发出声音,为了避免这种情况,就采用PNP型三极管。当P15引脚处于高电平时,三极管不导通,蜂鸣器不响;当P15引脚处于低电平时,三极管导通,蜂鸣器工作,发出声音。按键模块门禁系统的人机交互界面,需要实现用户的按键设置,能够实现模式转换,指纹识别等的按键设置。在本系统中,只需要采用多个独立式的按键即可。图8按键部分4*4矩阵键盘的16个按键对应的功能表如下表所示:表2矩阵键盘对应功能表123进入管理456选择上一项789选择下一项退格0确定返回系统软件设计指纹识别模块的程序设计AS608采用串口通讯协议与单片机进行通讯,用户可以通过发送对应的数据包控制指纹模块完成对应的功能。在控制AS608指纹模块搜索指纹的时候先发送采集指纹信息,然后等待采集完成后再发送指纹匹配指令,如果指纹匹配成功则返回成功,否则返回失败。1.指纹录入过程。指纹录入过程的流程图如下所示:图9纹录入过程指纹录入过程,用于新用户的注册,当有新用户需要注册时,就先在指纹头处获取用户的指纹图像,在将之生成指纹特征模板,在储存起来,这样就完成了新用户的注册。AS608是完整的指纹识别模块,不需挂接任何外围部件,模块始终处于从属地位(Slavemode),主机(Host)需要通过不同的指令让模块完成各种功能。主机的指令、模块的应答以及数据交换都是按照规定格式的数据包来进行的。主机必须按照下述格式封装要发送的指令或数据,也必须按下述格式解析收到的数据包。指令/数据包共分为三类:1.包标识=01命令包;2.包标识=02数据包,且有后续包;3.包标识=08最后一个数据包,即结束包。所有的数据包都要加包头:0xEF01。2.指纹识别过程。指纹识别过程的流程图如下所示:图10纹识别过程液晶显示模块的程序设计LCD12864的显示只需要严格的按照厂家的时序要求进行编程就可以完成显示。LCD12864的液晶显示首先需要将需要显示地方的地址通过命令写入,然后将数据按顺序的进行写入即可。在写入地址后显示第一个内容后地址会自动加一。函数名LCD12864_display_string(ucharx,uchary,uchar*s),参数为x,y,*s,其中的x,y表示在液晶显示屏上的位置坐标,*s是需要显示的字符数组。软件根据输入需要显示的位置坐标计算出地址。显示函数流程图如图所示:图11液晶模块使用流程LCD12864模块提供两套指令系统来应对各种情况,分别为基本指令和扩展指令,当RE=0时,调用的为基本指令,当RE=1时,调用的是扩展指令。模块的通信方式为8位并行方式和串行方式,本次选择串行方式。通常所说的LCD12864显示块是所说的点阵液晶显示模块,就是由128*64个液晶显示点组成的一个128列*64行的阵列,所以也就叫成了12864。每个显示点都对应着有一位二进制数,0表示灭,1表示亮。存储这些点阵信息的RAM被称为显示数据存储器。如果要显示某个图形或汉字就是将相应的点阵信息写入到对应的存储单元中。图形或汉字的点阵信息是由自己设计,这时候问题的关键是显示点在液晶屏上的位置与其在存储器中的地址之间的关系。显示点在64*64液晶屏上的位置由列号(line,0~63)与行号(line,0~63)确定。512*8bitsRAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8个液晶点的显示信息。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。(少数厂商为了简化用户设计,在模块中增加译码电路,使得128*64液晶屏就是一个整屏,只需一个片选信号。)如如果点亮12864的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。这是为了为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。(需要注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括列地址(Yaddress,0~63)和页地址(Xpage,0~7)。LCD12864操作时序图如图所示:图12液晶模块使用流程向模块发送指令时,只需要按照上述指令规则,给模块发送指令即可,例如液晶初始化时需要发送一些指令。指纹模块需要显示一些汉字内容,如在指纹录入模式时,需要显示“指纹录入模式”,还需要显示“录入成功”和“录入失败”;在指纹识别模式时,需要显示“指纹识别模式”和“指纹号”等。单片机的程序设计单片机采用STC89C52,单片机的主程序主要是完成指纹数据比对,以及控制各模块响应,首先要将波特率设置为9600bps(与模块相对应),然后在根据模块的指令包格式,来发送命令。软件使用KeilC51版本,主程序采用c语言编写。单片机对指纹识别模块发送命令,得到识别结果,在根据这个结果来控制显示模块、蜂鸣器模块和电子锁模块。程序的主流程图如下所示:图13单片机部分程序流程单片机的初始化主要包括波特率的设置、定时的设置以及中断的设置。完成单片机的初始化后,根据按键来触发子程序,比如按键选择指纹录入,就调用采集指纹子程序,再调用生成特征文件的子程序,再调用储存指纹子程序,这样一连串下来便完成了整个的指纹录入过程;如果按键选择指纹识别,就先调用采集指纹子程序,进而调用特征文件生成子程序,最后调用指纹对比子程序,返回对比结果,完成指纹识别功能;如果按键选择删除功能,就调用删除子程序,并返回删除结果。AS608指纹搜索子函数的设计AS608采用串口通讯协议与单片机进行通讯,用户可以通过发送对应的数据包控制指纹模块完成对应的功能。在控制AS608指纹模块搜索指纹的时候先发送采集指纹信息,然后等待采集完成后再发送指纹匹配指令,如果指纹匹配成功则返回成功,否则返回失败,指纹搜索子函数流程图如图所示:图14搜索指纹子函数流程图按键检测函数设计具体的矩阵键盘在程序上的检测方法如下(流程图中Key代表P1口)。(1)先将键盘中的全部行线P1.0~P1.3置低,然后通过检测列线P1.4~P1.7中是否有出现低电平的现象,如果有一列出现低电平,那么就证明那一列中的四个按键中有一个是被按下的。若没有列线中都没有出现低电平的现象,则没有按键按下。(2)在确定有按键被按键的时候,将进一步的确定具体为那一个按键按下。方法是:依次将四个行线P1.0~P1.3置低电平,即在某一根行线为低电平时,其它行线仍然保持高电平状态。然后通过确认在某一根行线为低电平的时候如果在第一步中得出的列为低电平就能够判断该行线与第一步得出的列线相交的按键就是所按下的那个按键。矩阵键盘检测函数流程图如图所示:图16系统按键检测函数流程图系统主函数设计主函数voidmain()是程序的入口函数,一个完整的程序必须要包含该函数。在该函数的开头一般都是先对单片机和一些外围器件需要进行初始化才能正常使用的器件进行初始化和重新赋值一些变量,初始化完后进去死循环,如果不进入死循环程序运行一次就会退出,如果加入死循环程序就会不断地进行循环达到实时检测执行的目的。在主程序的设计中需要注意的是主函数中不宜放过多的代码,具体的代码一般都是采用函数进行封装然后在主函数进行调用,这样也可以方便阅读修改。具体流程图如下图所示:图17系统主函数流程图系统测试与分析前面几章对系统的整体设计方案做出了介绍,包括硬件系统的架构设计以及软件系统的设计,下面就对系统进行实际测试。根据之前的设计,在STC89C52开发板上面搭建平台,进行测试,测试主要内容有:测试指纹录入功能、测试指纹识别功能。平台如下所示:图18系统平台实物图功能测试黑盒测试当有新用户需要注册时,就按模式切换键,将模式切换到指纹录入模式。按开始录入键,将手指放到指纹头处,等待几秒,录入两次,蜂鸣器响,液晶屏上显示录入结果。

图19录入模式液晶显示当切换到录入模式时,液晶显示如上图所示。再按开始录入按键,录入指纹,成功后,指纹号处就显示录入的指纹的排序号。当用户需要开锁时,系统处于指纹识别模式,将手指放到指纹头上面,等待几秒,若匹配成功,液晶显示成功,并打开继电器。若失败,只提示失败,继电器不打开。图20识别模式液晶显示当切换到指纹识别模式时,开始识别指纹,如果识别成功,就显示相应的指纹号,并打开继电器。白盒测试测试所需的工具:KEIL软件、系统硬件、PL2303下载器等。系统的软件方面通过KEIL软件进行编写,将编写好的程序生成.HEX文件后通过PL2303下载器下载到单片机中。通过观察整个系统运行的状态,然后进行反复的修改调试程序,最终得到一个完善的程序。在系统软件调试上主要遇到以下几个问题:(1)LCD12864显示出现花屏。解决方法:在本设计中用到了LCD12864字库显示和绘图显示,刚开始以为字库显示的内容和绘图显示的内容只要显示其中一个另一个就会自动被清除掉,结果并不是这样,在显示字库内容后没有进行清屏显示上绘图内容就会出现重叠导致花屏的现象。通过查液晶手册发现,字库显示和绘图显示的方式不一样,后面对程序上进行修改在操作字库显示时就对绘图显示进行先清除,反过来一样,重新下载程序后就没出现花屏的现象。(2)矩阵键盘的按键读取方法有了,在程序上需要将读取的每一个键值对应到每一个按键上并赋予特定的功能,如果直接进行人工计算键值的话显得工作量会比较大,并且可能会计算错误造成大量的时间浪费在调试上。解决方法:由于本设计上有显示器件,所以可以将获取的键值直接在显示器件上进行显示出来,这样在按下每一个按键的时候显示器上显示一个对应的键值码,然后依次记录下来后在统一进行给每一个按键设计功能。这样大量的节省了时间,也确保正确性。结果分析通过开发板搭建系统进行测试,先后对多人的指纹进行了测试,并且通过液晶显示和按键,实现了人机交互。测试过程中,系统的启动和初始化正常,各个模块的启动也正常,工作状态稳定。对具体功能进行测试,系统能够很好地录入指纹并且正确的识别指纹,速度快,效率高。系统能够实现相应的功能,并且稳定工作,这表明系统的设计是符合要求的。总结指纹门禁系统的前景十分广阔,而其中的指纹识别技术,由于其的特性,在门禁方面应用广泛,它的开发十分受欢迎。而现在指纹识别的模块,功能十分的广泛,本次的设计就是基于单片机,利用指纹识别模块,设计指纹识别门禁系统。1.设计的主要工作:本次设计利用STC89C52、FM-180、LCD12864、ZLSN3000以及继电器和蜂鸣器等,组合开发指纹识别门禁系统,能够对整栋大楼的所有门禁进行总体控制和用户权限等级设定。整个系统采用模块方式,便于维护。论文分章对各个模块的软硬件进行了阐述,重点研究了指纹识别模块、单片机和液晶显示的硬件实现和软件实现。2.需要进一步研究的工作:本文所设计的方案需要进一步的优化,LCD12864显示屏可以进一步优化为触屏;核心处理器可以进一步采用更先进的ARM处理器,来提高运算速度;指纹识别模块可以进一步选用更大储存空间的模块,来提高指纹储存数量;上位机的软件,还能够进一步优化,开发更多的功能以及优化界面等。参考文献[1]赵丽芬,张学超,陈文娟,“传感器技术及其应用”课程教学改革,铜仁学院大数据学院,2017.09.[2]马须敬,朱义彪,传感器的研究现状与发展趋势,青岛科技大学材料科学与工程学院,2017.08.[3]李军,韩波,李振杰,传感器技术实践教学改革与实践,阜阳师范学院计算机与信息学院,2017.05.[4]郭玉霞,李志杰,基于ADS1256和STM32的数据采集装置设计,甘肃工业职业技术学院电信学院,2018.12.[5]吴忠伟,何显,山岳彤,基于51单片机的无线防丢器的设计研究,吉林建筑大学城建学院,2018.12.[6]张幼麟,简介51单片机的定时器/计数器,乐山师范学院物理与电子信息系,2018.12.[7]王昱言,基于单片机的智能窗帘系统设计,江苏省淮阴中学,2018.12.[8]张皓博,基于GSM技术的家用防盗硬件系统设计,黑龙江工业学院电气与信息工程系,2018.12.[9]王冠龙,崔靓,朱学军,基于数字PID算法的温度控制系统设计,宁夏大学机械工程学院,2018.12.[10]李雪等,智能温度模糊控制PID系统设计,大连民族大学信息与通信工程学院,2018.11.[11]王莹,黄梅王等,基于GSM技术的病房环境监测系统设计,河南理工大学医学院,2018.12.[12]潘言全,智能手环的设计与制作,湖北师范大学物理与电子信息科学学院,2018.12.[13]徐越,徐志龙,陈萱,基于AT89C52的多功能数字钟设计,华北理工大学电气工程学院,2018.12.[14]王维佳,基于单片机的温度控制系统设计,郑州大学物理工程学院,2018.12.[15]张欢欢,王冰玲,智能停车收费管理系统设计,安徽三联学院,2018.12.[16]刘佳乐,基于单片机的电子密码锁设计,兰州工业学院电气工程学院,2018.12.[17]许雪梅等,基于单片机的交通灯控制系统设计,甘肃农业大学信息科学技术学院,2018.12.[18]吴玉玉等,基于单片机的电子万年历设计,甘肃农业大学信息科学技术学院,2018.12.[19]张娟等,基于51单片机的智能电风扇设计,太原工业学院工程训练中心,2018.11.[20]彭建英,刘雨丽,郭杰荣,一款单片机智能烟雾报警系统的设计,湖南文理学院物理与电子科学学院,2018.11.[21]谈敏,温湿度监控系统设计,江阴职业技术学院电子信息工程系,2018.11.[22]王松林,基于单片机的防酒驾控制系统设计,安徽商贸职业技术学院电子信息工程系,2018.11.[23]王沁等,一种智能门禁管家系统的设计,西安工业大学机电工程学院,2018.11.[24]周皓冉,基于K60的汽车内环境监测与报警系统设计,湖南科技大学物理与电子科学学院学院,2018.11.[25]杨秋贤,基于单片机的汽车倒车测距系统设计,吉林化工学院,2018.12.[26]成晋军,基于热释电技术的家庭防盗报警器设计,办公自动化,2018年21期.[27]马须敬,徐磊,气体传感器的研究现状与发展趋势,青岛科技大学材料科学与工程学院,2018.06.[28]李志瑞,申庆超,智能家用PM2.5环境检测仪设计,安阳工学院电子信息与电气工程学院,2017.09.[29]李鑫,自动气象监测系统设计控制软件设计,东南大学,2016.05.[30]马玉琼,基于单片机的气压检测系统的设计,沧州师范学院机械与电气工程学院,2018.03.[31]屠彬彬等,轮胎气压表性能检测装置的研制,浙江省计量科学研究院,2014.04.[32]韩焱,张艳花,王康谊.电子技术基础.北京:电子工业出版社,2009.6.[33]Zaliva,V.,Franchetti,F.,BarometricandGPSaltitudesensorfusion,Acoustics,SpeechandSignalProcessing(ICASSP),2014IEEEInternationalConferenceon,2014.[34]Minh-Dung,N.,Takahashi,H.,Matsumoto,K.,Shimoyama,I.,Barometricpressurechangemeasurement,Solid-StateSensors,ActuatorsandMicrosystemsConference(TRANSDUCERS),201116thInternational,2010.[35]Tanigawa,M.,Luinge,H.,Schipper,L.,Slycke,P.,Drift-freedynamicheightsensorusingMEMSIMUaidedbyMEMSpressuresensor,Positioning,NavigationandCommunication,2008.WPNC2008.5thWorkshopon,1996.[36]Leuenberger,K.,Gassert,R.,Low-powersensormoduleforlong-termactivitymonitoring,EngineeringinMedicineandBiologySociety,EMBC,2011AnnualInternationalConferenceoftheIEEE,2011.附录附录:系统整机电路原理图及代码 =1\*GB2⑴系统main函数源代码voidmain(){ uchari; LCD12864_init(); //初始化LCD12864 UartInit(); //串口初始化 T2_init(); //定时器2初始化 low_mima=AT24C02_read_date(200); //读取存储在AT24C02的密码 low_mima=low_mima*100+AT24C02_read_date(201); low_mima=low_mima*100+AT24C02_read_date(202); diaplay_mode0();//显示初始界面 while(1) { i++; a=keycan(); //矩阵键盘检测 chuli(); //矩阵键盘处理 if(mode==1) display_guanli(); //显示管理界面 else if(mode==2) //录入指纹 { if(zhiwen_f==1) cunchu(); //录入指纹 } else if(mode==3) //注销指纹 { if(zhiwen_f==1) shanchu(); //注销指纹 } else if(mode==0&&in_f==0)//正常解锁界面 { if(i>=150) { i=0; xunzhiwen();//指纹解锁 } } }}=2\*GB2⑵延时函数voiddelayms(uintms){ unsignedchari=100,j; for(;ms;ms--) { while(--i) { j=10; while(--j); } }}=3\*GB2⑶蜂鸣器驱动函数voiddidi(uchari){ ucharj; for(j=0;j<i;j++)//循环i次,LED、蜂鸣器鸣叫几次 { led=0; //开启LED、蜂鸣器 buzz=0; delayms(20); led=1; //关闭LED、蜂鸣器 buzz=1; delayms(15); }}=4\*GB2⑷显示密码锁主界面voiddiaplay_mode0(){ LCD12864_display_string(1,1,"指纹密码锁"); LCD12864_display_string(0,2,"编号:"); LCD12864_display_string(0,3,"状态:");}=5\*GB2⑸指纹查找voidxunzhiwen(){ searchnum=search();//搜索指纹 if((searchnum>=1&&searchnum<=MAX)||searchnum==255)//最多MAX个指纹 { if(searchnum>=1&&searchnum<=MAX)//指纹识别成功 { temp[0]=searchnum%1000/100+0x30; temp[1]=searchnum%100/10+0x30; temp[2]=searchnum%10+0x30; temp[3]=''; LCD12864_display_string(3,2,temp);//显示指纹编号 LCD12864_display_string(3,3,"指纹解锁"); LCD12864_display_string(1,4,""); in_mima=0; //清除以输入的密码 num=0; //清除以输入的密码位数 input_f=0; //清除输入密码标志 jdq=0; //继电器吸合,打开电磁锁 T2_num=0; //开启重新开始计时 TR2=1; } else//不正确的指纹 { LCD12864_display_string(3,3,"无效指纹"); didi(3); //报警三次 } delay1ms(500); //延时后自动清除显示内容 LCD12864_display_string(3,2,""); LCD12864_display_string(3,3,""); } }=6\*GB2⑹指纹存储voidcunchu(){ LCD12864_display_string(0,3,"状态:"); if(ID>0&&ID<=MAX)//输入的存储指纹位置正确 { if(enroll()==1)//采集两次,生成1个指纹模板成功 { if(savefingure(ID)==1)//保存指纹成功 { LCD12864_display_string(3,3,"录入成功"); } else //保存指纹失败 LCD12864_display_string(3,3,"存储失败"); } else //采集指纹失败 LCD12864_display_string(3,3,"采集失败"); } else //输入指纹编号错误 LCD12864_display_string(3,3,"编号错误"); n=0; //清除输入编号位数 ID=0; //清除输入编号 zhiwen_f=0;//关闭指纹采集}=7\*GB2⑺删除指纹voidshanchu(){ LCD12864_display_string(0,3,"状态:"); if(ID>0&&ID<=MAX) //输入的存储指纹位置正确 { if(dellfingure(ID)==1)//删除指纹成功 { LCD12864_display_string(3,3,"删除成功"); } else //删除指纹失败 LCD12864_display_string(3,3,"删除失败"); } else { if(ID==999) //如果输入的是999表示清空指纹 { if(Clear_All()==1)//清空指纹成功 LCD12864_display_string(3,3,"清空指纹"); else //清空指纹失败 LCD12864_display_string(3,3,"清空失败"); } else //输入的是其它错误编号 LCD12864_display_string(3,3,"编号错误"); } n=0; //清除输入编号位数 ID=0; //清除输入编号 zhiwen_f=0;//关闭指纹采集 }=8\*GB2⑻显示管理界面voiddisplay_guanli(){ LCD12864_display_string(0,1,"管理系统界面"); LCD12864_display_string(0,2,"录入指纹"); LCD12864_display_string(0,3,"删除指纹"); LCD12864_display_string(0,4,"修改密码"); switch(mode_num) { case0:LCD12864_display_string(0,2,">>");break; case1:LCD12864_display_string(0,3,">>");break; case2:LCD12864_display_string(0,4,">>");break; default:break; }}=9\*GB2⑼按键响应voidchuli(){ if(key_f==1) //先判断是否有按键按下 { if((mode==2||mode==3)&&a<10)//如果输入ID状态,并且按下的是数字键 { if(n<ID_MAX)//判断是否为输入状态,并且输入未满最大整数位数,才可以继续输入 { if(n==0)//判断为编号第1位 { LCD12864_display_string(3,2,""); LCD12864_display_string(0,3,""); } LCD12864_display_char(3+n,2,a+0x30);//显示出输入的数字ASCII[a] ID=ID*10+a;//编号计算 n++; //编号输入位数+1 } } if((mode==0||mode==4)&&input_f==0&&a<10)//如果在in_f=1(输入密码状态),并且按下的是数字键 { if(in_f==1||mode==4) { if(num==0)//清除显示后、显示输入新密码 LCD12864_display_string(1,3,""); if(reset_f==1&&reset_num>1) //在重置密码时候输入新密码阶段 LCD12864_display_char(num+1,2,a+0x30);//显示输入的数字 else //其它情况下输入密码显示* LCD12864_display_char(num+1,2,'*');//显示“*” } else LCD12864_display_char(num+1,4,'*');//显示“*” in_mima=in_mima*10+a;//读入密码 num++; //密码输入次数加一 if(num==6) //六位密码输入完成 input_f=1; //标记六位密码输入完成 } if(a==10) //进入管理界面 { if(mode==0&&in_f==0)//输入密码 { num=0; //清0输入密码位数 in_f=1; //标记输入密码 in_mima=0; //清0输入的密码 input_f=0;//清除密码输入完成标志 write_com(0x01);//清除显示 LCD12864_display_string(0,1,"请输入管理密码:");//显示输入密码 } } if(a==15)//返回上一级菜单 { if(mode>1) //在管理操作中 { reset_f=0; reset_num=0; write_com(0x01);//清除显示 mode=1; //回到管理选择界面 } else //非管理界面 { if(mode!=0||in_f==1)//如果在输入密码阶段 { write_com(0x01);//清除显示 mode=0; diaplay_mode0();//显示主界面 in_f=0; num=0; input_f=0; //清除密码输入完成标志 } } if(jdq==0) //如果电磁锁打开,按下该按键,手动关门 { jdq=1; //关闭继电器 T2_num=0; //清除计时 TR2=0; //关闭定时器 } } if(a==11)//选择上一项 { if(mode==1)//选择上一项管理 { if(mode_num==0) mode_num=2; else mode_num--; } } if(a==12)//选择下一项 { if(mode==1)//选择下一项管理 { if(mode_num>=2) mode_num=0; else mode_num++; } } if(a==13)//退格 { if(mode==0||mode==4)//在输入密码状态 { if(num!=0) //当前已经有输入了 { num--;//输入密码个数减1 if(in_f==1||mode==4) LCD12864_display_char(num+1,2,''); else LCD12864_display_char(num+1,4,''); in_mima=in_mima/10; input_f=0; } } if(mode==2||mode==3)//在ID编号输入状态 { if(n!=0) //当前已经有输入了 { LCD12864_display_char(2+n,2,''); n--; ID=ID/10; zhiwen_f=0; } } } if(a==14)//确定 { if(mode==1) //确定选择管理操作 { write_com(0x01);//清除显示 mode=mode_num+2; n=0; ID=0; zhiwen_f=0; input_f=0;//清除确定标志 num=0; in_mima=0; new_mima=0; switch(mode_num) {

温馨提示

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

评论

0/150

提交评论