基于单片机的指纹打卡机设计

摘要

在科学技术飞速发展的今天,社会对身份识别的要求越来越高,尤其是在企业管理的人员签到、工作考勤等活动中对身份识别的高效性和可靠性的需求更为迫切。而传统的个人身份识别手段,如钥匙、密码、IC卡等,由于具有可盗用、可伪造、可破译的等一系列缺点,已经难以满足信息高度机密化的现代社会的需求。但随着计算机运算能力的不断增强以及相关算法的不断完善,指纹识别技术在身份识别领域的应用越来越普遍。由于指纹具有终生不变性、唯一性和不可代替性,使得身份的确定更加可靠、准确。
因此,将指纹识别技术应用于签到考勤中,做成指纹打卡机,能够很好的满足现代社会的要求。本设计以STC12系列单片机作为主控芯片,设计一个满足基本考勤要求的指纹打卡机系统。其模块分为单片机主制模块、FM-70光学指纹模块、LCD显示模块以及按键模块。整个系统最终功能包括指纹登记、指纹签到签退、指纹信息删除以及打卡时间显示等,能够基本满足一般的考勤需要。

关键词: 指纹 打卡机 单片机

Design of Fingerprint Attendance Machine Based on Single Chip Microcomputer
Abstract In the rapid development of science and technology today, the community is increasingly demanding the identification, especially in the enterprise management personnel attendance, work attendance and other activities in the identification of the high efficiency and reliability of the more urgent. The traditional personal identification methods, such as keys, passwords, IC cards, etc., due to the theft, can be forged, can be deciphered and a series of shortcomings, has been difficult to meet the information highly confidential needs of modern society. However, with the continuous enhancement of computer computing ability and the continuous improvement of related algorithms, the application of fingerprint recognition technology in the field of identification is becoming more and more common. As the fingerprint has a lifetime of invariance, uniqueness and irreplaceability, making the identity of the more reliable and accurate.
Therefore, the fingerprint recognition technology used to sign attendance, made of fingerprint punch card machine, can be very good to meet the requirements of modern society. The design to STC12 series microcontroller as the main control chip, design a meet the basic attendance requirements of the fingerprint punch card machine system. The module is divided into single-chip main module, FM-70 optical fingerprint module, LCD display module and key module. The final function of the entire system, including fingerprint registration, fingerprint sign, fingerprint information deletion and check-in time display, etc., can basically meet the general attendance needs.
Key words Fingerprint Attendance machine Single Chip Microcomputer

目录

第1章 引言 1
1.1 指纹识别的研究意义 1
1.2 指纹识别的国内外发展现状 2
1.3 本设计的研究内容 2
第2章 系统方案的制定 6
2.1 系统功能要求 6
2.2 方案一 6
2.3 方案二 7
2.4 方案三 7
2.5 最终方案确定 8
第3章 系统硬件设计 9
3.1 系统整体设计 9
3.2 系统主控模块(STC12C5A60S2系列) 10
3.3 指纹识别模块(FM-70) 12
3.2.1 FM-70的特点 12
3.2.2 FM-70管脚功能 13
3.2.3 FM-70内部资源介绍 14
3.3.4 FM-70主要指令 14
3.4 显示模块(LCD1602) 15
3.5 独立按键模块 17
3.6 时钟模块(DS1302) 18
3.7 蜂鸣器 19
第4章 系统软件设计 21
4.1 系统主程序设计 21
4.2 指纹采集程序设计 23
4.3 指纹签到程序设计 26
4.4 指纹删除程序设计 28
4.5 开发环境介绍(Keil) 30
结 论 32
致 谢 33
参考文献 34

第1章引言

1.1指纹识别的研究意义
如今,无论在生活还是工作中,越来越多的场合需要进行身份认证,而很多传统的身份认证技术在科技日益发达的现代社会,渐渐显得有些心余力拙。于是,更为高效可靠的生物识别技术应运而生。该技术不仅可以应用于隐私保护中,还可以应用在身份确认上。
生物识别技术[4]是把计算机技术、传感器技术、自动控制原理等结合起来,利用人体某些生理特性(如指纹、脸形、掌形等)或行为特征(如步态、签名、声音等)来实现身份识别的一种技术。生物特征识别技术的关键在于怎样得到这些生物特征,并且将它们转换为可编辑信息存储起来,从而生成特征库。然后利用算法将采集的生物特征与特征库里的生物特征进行匹配,进而实现人的身份认证和识别。可用于辨别人的身份的人体特征需满足以下特点:(1)唯一性;(2)稳定性;(3)普遍性;(4)易采集性;(5)可接受性。而指纹这一人体特征完全满足以上条件。
在各种各样的身份识别技术当中,指纹识别技术具有很高的可行性和实用性。所以,指纹识别成为目前社会上最流行、最被人认可的身份识别方式,己经在人们生活的各个方面得到广泛应用。这是因为指纹是独一无二的,两人之间不可能存在相同指纹,另外,指纹的样本易于采集,难以伪造,便于开发,可利用多个指纹构成多重口令,以提高系统安全性。
将指纹识别应用于打卡考勤[2]中,主要具有以下优势:1、可靠性,有效减少甚至消除身份假冒现象;2、便捷性,使用方便,不需要携带钥匙或者磁卡,同时也避免了钥匙、磁卡的丢失或者是忘记密码所带来的麻烦;3、高效性,无需在管理方面投入过多的人员,能够有效地避免人员资源的浪费。
就传统的打卡考勤方式而言,或多或少都会存在一些难以避免的漏洞。例如,在磁卡考勤系统中,有的员工把自己的IC卡交给别人代为打卡,这样不但影响到公司工作的正常进行,还会在团体中形成一种不良风气。由此可见,这种传统的打卡考勤方式效率低,管理不方便,所起到的意义微乎其微。而指纹打卡机则可以很好地解决这个问题,利用指纹的唯一性消除传统考勤中的作假现象,使的企业管理更加高效方便。
1.2指纹识别的国内外发展现状
在各种生物识别技术当中,指纹识别技术相对而言最为普遍,因其操作过程比较简单,识别准确率较高,所以在人们生活中得以广泛应用。
目前国内针对指纹识别技术的研究已经逐步进入成熟阶段。自1993年指纹识别技术进入中国市场后,迅速被引用到各个领域,尤其在2003年联网门禁方案[2]实施后更是发展迅捷。无论在社会安全、经济活动还是个人隐私方面,都会经常见到与指纹识别技术相关的研究。就目前而言,指纹识别主要应用在以下几个方面:①门禁、枪盒、保险箱等安全领域;②POS机、考勤、驾培等身份领域;③授权许可、私人会所等管理领域;④指纹支付、养老医疗领取等金融领域[4]。除此之外,还有向身份证、机动车、家居等领域发展的趋势。随着指纹识别技术越来越成熟,开发应用的难度和成本越来越低,与指纹识别技术相关的产品也越来越多地出现在我们的生活当中。与此同时,由于计算机运算能力的提高和指纹匹配算法的不断完善,有关于将指纹识别应用于打卡考勤系统的研究已经基本稳定,其涉及的相关技术也都逐渐成熟。
在国外许多大公司都设立了有关指纹识别技术研究的专门机构,以为自己的产品品牌服务,如韩国现代、IBM、Intel等。可见在国际市场中,指纹技术的发展已经相当成熟,其中有关于指纹采集以及图像的识别、处理、对比等在技术层面来说都已经很完善。在完善成熟的技术支撑下,指纹识别技术得以迅速发展并被广泛应用于各个领域,主要有金融商业、安保、信息保密等行业。该技术为这些行业提供了更为安全、可靠、高效的身份识别服务。
1.3本设计的研究内容
本课题,主要是针对传统考勤系统易作假、难管理、低效率等不足,利用指纹识别技术、单片机控制技术等手段,设计一种高效、可靠、便捷的指纹打卡机。其功能满足指纹登记、指纹考勤(签到、签退)、指纹修改和删除等。整个系统以增强型STC12系列单片机作为主控芯片,实现对指纹模块(FM-70)、显示模块(LCD1602)、按键模块等各部分的控制,从而构成一台完整独立的指纹打卡机。
该打卡机设计为脱机型打卡机[9],不需要PC的参与就可以独立完成考勤功能,实用性强。这就避免由于上层控制端(如PC机)出现故障或者不匹配而导致指纹打卡机无法正常工作的情况。另外,脱机型打卡机灵活性强,只需要提供相适应的电源,就能够在各种各样的场合使用。与联机型指纹打卡机相比,脱机型指纹打卡机不需要依靠复杂的数据库技术,系统结构简明直观,一定程度上降低了开发难度。
传统的指纹打卡机一般采用指纹图像统计方法[7]来进行指纹识别,即将采集到的指纹图像与指纹库里的指纹图像进行统计比较,计算出两者的相似度,当相似度达到设定值,则判断两幅指纹图像来自同一人,从而实现身份认证。但这种方法存在比较明显的缺点,因为采集指纹图像时,会由于指纹清洁度或手指滑动、旋转、角度等问题,导致同一根手指采集到的指纹图像相差较大,从而使得误识率和拒识率偏高。针对这点,本设计采用的是指纹图像特征对比的方法,即通过比较两幅指纹图像的特征结构,来判断两幅指纹图像是否来自同一个人。即使由于各种原因导致前后采集的两幅指纹图像差异较大,但两者之间的特征结构依然相差不大。因此,利用特征对比的方法能很好解决上述问题。
特征对比包括两个部分:特征提取、特征匹配。为了更好地降低指纹识别的误识率和拒识率,本设计采用8邻点统计提取方法[4]和点模式匹配算法[4]。
(1)特征提取
在提取特征之前,需要进行细化,步骤如下:
①从整幅指纹图像中,找出所有纹线边界点;
②判断该边界点是否该删除;
对边界点P(图2-1),顶替两个特征量nsum和tsum,他们的值分别为
nsum= (1)
tsum= (2)
如果P点的值同时满足tsum=2,nsum≠1且nsum<6,则可以将其删除(像素值置为0)。

P1 P2 P3
P4 P P5
P6 P7 P8
图1-1 8邻点分布图
③对下一个边界点进行判断,直到整幅指纹图像都没有可以删除的边界点为止。
指纹细节特征点(端点和分叉点)的提取是按照8邻点统计方法进行的。目标像素点P以及其8邻点的定义如图1-1所示,对目标像素点P,计算其nsum和tsum的值。工式(1)描述为:如果naum=1,则P为纹线端点;如果nsum=3,则P为纹线分叉点。该公式必须在指纹纹线被严格细化成单像素宽的情况下,才能正常工作。公式(2)描述为:如果tsum=2,则P为纹线端点;如果tsum=6,则P为纹线分叉点。该公式不仅适用于完全细化的图像,还适用于未完全细化的图像。
由于存在大量噪声,所以需要注意对原始细节特征点集中的伪特征进行删除。
(2)特征匹配
特征匹配又分为两种:特征对比、特征搜索。特征对比就是把待识别指纹特征文件与模块中的一个模板文件进行匹配,即1:1方式;特征搜索就是把待识别指纹文件与模块中的多个模板进行匹配,即1:N方式。
目前比较先进的匹配算法为点模式匹配算法[4]:从待识点集中选择任意一个特征点pi,再从模板点集中选择任一个特征点qk,然后把两者组成一对特征点对。分别在待识指纹图像和模板指纹图像中确定出两个距离它们最近的特征点p1、p2和q1、q2组成特征点子集。这样,分别在待识指纹图像和模板指纹图像中就形成了两个三角形(pi,p1,p2)和(qk,q1,q2),通过判断这两个三角形的相似度来确定特征点对是否匹配。
三角形相似度判断的步骤如下:①分别计算顶点pi和qk所对应的边长; ②如果,说明两个三角形所对应的一条边不等长,即两个三角形不可能相似,结束本次判断;③选择新的顶点pi和qb,以及距离它们最近的两个特征点,返回第①步;④否则,分别计算和。如果且,则两个三角形的三边近似相等,也就是两个三角形近似全等。·

第2章 系统方案的制定

2.1系统功能要求
本设计的基本功能要求如下:
功能1:录入功能,录入人员的指纹信息,并同时输入对应的编号,并在显示屏上显示,系统自动保存;
功能2:指纹打卡功能(包括签到、签退),人员输入指纹信息,若不存在,系统提示错误;若存在,则系统自动输出对应的人员编号信息,记录并显示打卡时间;
功能3:信息删除和修改功能,系统可以随意修改或删除人员信息。
根据功能要求,拟出三种方案。
2.2方案一
方案一的系统框图如图2-1所示。
在这里插入图片描述

图2-1 方案一系统框图
方案一以DSP作为主控芯片,其具有较高速的运算能力,可以对指纹图像信息进行实时采集并保存。相对应的,存储模块采用铁电存储器,因为其延时非常小,速度非常快,正好与DSP的高速特点相匹配。显示模块采用TFT彩屏,功能也相对其他显示屏更为丰富。该系统的交换界面比较丰富,而且稳定性较高,但是成本相对来说比较高。无论是DSP芯片还是TFT彩屏,都比其他同类产品的价格高出很多。另外,DSP的编程难度比较大,算法复杂,所需开发时间比较长。
2.3方案二
方案二系统框图如图2-2所示。
在这里插入图片描述

图2-2 方案二系统框图
方案二采用的是ARM控制芯片,它是一种32位的处理器,运算能力虽然没有DSP强,但也算比较快速一类单片机。存储模块使用的是ATMEL的AT93C56,其采用的是SPI的通讯协议。显示模块采用TFT彩屏,ARM处理器可以通过移植ucGUI函数来进行对TFT彩屏的控制。输入模块通过独立按键来实现,若是输入信息比较复杂,可以采用矩阵按键来代替。该方案成本相对方案一来说较低,但ARM处理器直接运算图像的速度比较弱,有可能导致指纹采集有误或者失败。
2.4方案三
方案三系统框图如2-3所示。·
在这里插入图片描述

图2-3 方案三系统框图
方案三采用51单片机[6]作为系统的控制芯片,该方案所选择的51单片机是STC12系列的增强型1T速率的单片机。指纹模块选择的是FM-70系列光学指纹识别模块,其内置了高速DSP处理器,在无需上位机参与的情况下,具有指纹录入、图像处理、指纹匹配和模板储存等功能。显示模块采用的是LED1602显示屏,这是一种常用液晶显示屏,控制简单,价格相对便宜。
2.5最终方案确定
从开发成本来看,方案三与其他两个方案相比较具有明显的优势。而且51单片机没有太多其他的外置电路,也就避免了多余电路的干扰,从而保证系统的稳定性。另外,51单片机功耗较低,能够通过软件设置省电模式以及空闲模式,工作在空闲模式的时候,可以在CPU不工作的情况下,保证串行口、中断系统和定时/计数器的正常运行。再者,51单片机比较经典,也就意味着书籍类资料和网上资源比较丰富,可参考例程较多,这也大大降低了开发难度。从这几个方面综合考虑,最终确定采用方案三所述系统作为本次设计的系统。

第3章 系统硬件设计

3.1系统整体设计
根据课题设计的功能要求,并综合成本、性能和开发难度等因素,最终确定好整个系统的硬件结构,其电路图、最终实物图分别如图3-1、图3-2所示。
在这里插入图片描述

图3-1 系统电路图
在这里插入图片描述

图3-2 系统实物图
系统以STC12C5A60S2单片机[8]作为控制芯片,通过P0口实现对时钟模块进行控制,P2口主要控制系统的显示模块。系统指纹模块与主控芯片的数据接收端(RXD)和数据发送端(TXD)连接,实现相互通讯。按键模块和蜂鸣器由P3口驱动。另外,电源模块设计为5V直流电输入,并附加一个LED灯作为系统通电标志。
3.2系统主控模块(STC12C5A60S2系列)
本设计的主控模块采用增强型的STC12C5A60S2系列单片机,该单片机是单时钟/机器周期(1T)的单片机,是高速、低耗、强抗干扰的新型单片机,指令代码兼容性好,而且速度比8051单片机快8~12倍。
与传统51单片机相比较,STC12C5A60S2具有以下优点:
1)片内大容量1024字节RAM。在系统数据存储量不大的情况下,可直接用片内存储空间作为系统存储空间,因此系统不需要另外设计一个独立的数据存储模块,从而使得开发设计简单化;
2)不需要外部晶振,内部集成高精度R/C时钟(0.3%)
3)超强抗干扰:a)高抗静电(ESD保护
b)在4kV脉冲干扰下也可以正常工作
c)宽电压,不怕电源抖动
d)宽温度范围(-40℃~+80℃
4)超低功耗:a)掉电模式,外部中断唤醒功耗<0.1uA
b)空闲模式,典型功耗<1mA
c)正常工作模式,4mA~6mA
5)编程和仿真都可直接在系统上完成,不需要独立的编程器和仿真器。
STC12C5A60S2单片机最小系统如图3-3所示。
在这里插入图片描述

图3-3 STC12C5A60S2最小系统
关于复位电路:本设计中采用的STC系列单片机具有内部复位功能,所以芯片的复位引脚可以悬空,系统一旦上电,芯片自动完成复位功能。
关于晶振电路:若是外部有源晶振频率大于33MHz,应该使用外部有源晶振,时钟从XTAL1脚输入,XTAL2脚悬空;若使用内部R/C振荡器时钟(温室情况下3V单片机为8MHz12MHz,5V单片机为:11MHz17MHz),XTAL1和XTAL2脚悬空。但由于有源晶振价格偏高,而且内部振荡时钟有可能因电压不稳定而造成频率变化,所以在本设计中采用标准的外部晶振电路(11.0592M)。
3.3指纹识别模块(FM-70)
指纹识别模块采用FM-70系列光学指纹模块[9],其电路图如图3-4所示。
在这里插入图片描述

图3-4 指纹模块电路图
模块的数据输出引脚(TXD)与单片机的数据接收端连接,数据输入引脚(RXD)与单片机的数据发送端连接。
3.2.1 FM-70的特点
FM-70可在无上位机的情况下,完成指纹采集、图像处理[11]、特征匹配和模块存储等功能,与同类产品相比较,FM-70具有以下特点:
①采用光学传感器,成像清晰,失真率低;
②反应灵敏,环境适应能力强,在读取指纹图像的时候,无论手指干湿都能做出快速的反应和判断,得到优质的图像质量;
③采用绿的LED光源,在确保亮度的同时具有超低光衰,大大延长使用寿命;
④二次应用开发简单,可根据FM-70模块提供的控制指令,按照自身开发需求来设计指纹识别应用系统;
⑤应用广泛,无论是低端还是高端的应用系统,都适合使用。
⑥上电握手,在上电完成后,模块会自动向上位机发送一个握手标志,告诉上位机可以发出命令。
工作原理:(a)上位机发出指令,FM-70模块开始工作; (b)模块采集图像,先经过FM-70模块中的光学组件获得指纹图像,并进行相关的图像处理; (c)提取特征,通过指纹提取算法,从指纹图像中提取出特征信息。该模块所提取的指纹特征文件大小为256bytes,由每两个特征文件组成一个模板文件,并将其存储在模块当中; (d)特征匹配,先录入代验证指纹图像并经过处理、提取特征后,再与模块中已存储的模板进行对比,最后给出结果并返回上位机。
3.2.2 FM-70管脚功能
该模块与主芯片通过串口通讯连接,其接口引脚功能如表3-1所示,其对应的实物如图3-5所示。
表3-1 FM-70引脚功能
引脚号 名称 类型 功能(线色)
1 Vtouch In 触摸感应电源输入端(蓝)
2 Sout Out 感应信号输出(黄)
3 Vin In 电源输入端(红)
4 TD Out 数据输出,TTL逻辑电平(绿)
5 RD In 数据输入,TTL逻辑电平(白)
6 GND — 接地端,内部与电源地连接(黑)
在这里插入图片描述

图3-5 FM-70引脚实物图
模块的波特率默认为57600bps,可设置为9600~115200bps。而因为系统采用的是STC12C5A60S2单片机,所以要先把指纹模块的波特率设置为9600bps,以确保指纹模块与单片机之间能够正常通信。
3.2.3 FM-70内部资源介绍
a)模块缓冲区:由图像缓冲区ImageBuffer与特征文件缓冲区CharBuffer1和CharBuffer2组成,其保存的数据断电后会丢失。图像数据的存储和处理都在图像缓冲区中进行,当模块与上位机进行图像的上传或者下载时,其图像的格式为BMP。特征文件缓冲区即可用来存放实时特征文件,也可以用来存放模板文件;
b)指纹库:将指纹模板按一定的序号存放在FLASH中的某一段区域,从而组成指纹库,库内数据断电不丢失,模块对于指纹的一系列处理都是通过对指纹模板序号的操作完成的;
c)波特率设置:通过波特率控制参数N(1~12)来设置波特率,能够设置的波特率为(9600N)bps。在本次设计中把N设为1;
d)模块口令:模块的默认口令是0x00000000,该口令一般不做修改,如果改了,则必须通过了口令验证后,模块才能与上位机正常通讯。

3.3.4 FM-70主要指令
与指纹识别相关的主要指令如下:
①握手指令(GetEcho):接受到握手指令后,如果模块正常运行,则返回确认码0x55,然后才可执行其他指令。如果返回确认码不是0x55,则说明模块存在问题,不能正常共工作;
②图像采集(GenImg):如果探测到指纹,则录入指纹图像并存放在ImageBuffer当中,然后返回采集成功确认码。如果探测不到指纹,则返回采集失败确认码;
③特征提取(Img2Tz):从图像缓冲区ImageBuffer中存储的指纹图片中提取出指纹特征文件,并存放到CharBuffer1或者CharBuffer2中;
④生成模板(RegModel):把指纹特征缓冲区中的特征文件合并成指纹特征模板,并将其重新存放到CharBuffer1和CharBuffer2中;
⑤生成指纹库(Store):把指纹特征缓冲区里的特征模板信息放到模块的指纹库当中。
⑥自动登记(AutoLogin):该指令非常人性化,其中已包含了指纹采集、特征提取、生成模板、生成指纹库这四个过程,可以通过调用一个指令而完成四个功能,大大减少了开发人员的工作量。另外,该指令的输入参数为“按指时长,按指次数,指纹序号”。按指时长是指每次录入指纹时,手指保持按下的最大时长。按指次数是指录入同一个指纹时需要按下几次(该模块可以设置2或者3)。指纹序号指的是指纹模板存在指纹库中的序号。通过这几个参数可以方便地设置我们需要实现的功能,非常实用。
3.4显示模块(LCD1602)
LCD1602液晶显示屏[8]也叫1602字符型液晶显示屏,是一种点阵型液晶显示屏,主要用来显示数字、字母和符号。字符的显示是通过点阵字符位来实现的,许多的点阵字符位相互组合构成显示屏。由于字符位与字符位之间都存在着一定的间隔,所以不能很好的显示图案。1602的显示容量为162也就是显示两行,每一行显示16个字符。
其主要参数如下:①显示容量为162个字符;
②工作电压为4.5~5.5V(最佳为5.0V);
③工作电流为2.0mA(5.0V);
LCD1602显示屏的引脚功能、实物图分别如表3-2、图3-6所示。
表3-2 LCD1062引脚功能
编号 符号 功能 编号 符号 功能
1 VSS 电源地 9 D2 Data I/O
2 VDD 电源正极 10 D3 Data I/O
3 VL 偏压信号 11 D4 Data I/O
4 RS 数据/命令选择端(H/L) 12 D5 Data I/O
5 R/W 读/写选择端(H/L) 13 D6 Data I/O
6 E 使能信号(下降沿使能) 14 D7 Data I/O
7 D0 Data I/O 15 BLA 背光源正极
8 D1 Data I/O 16 BLK 背光源负极
在这里插入图片描述

图3-6 LCD1062实物图
管脚功能特别说明:对于管脚3(VL),是显示器对比度调整,当其与地电源连接时对比度最高,当其与正电源连接时对比度最低。因为当对比度过高时会出现“鬼影”现象,所以要通过一个1K的电阻来调节对比度,其电路图如图3-7所示。
在这里插入图片描述

图3-7 显示模块电路图
3.5独立按键模块
因为系统仅需要进行简单的输入操作,所以选择用独立按键[6]作为输入模块。其优点在于:不需要占用过多的I/O口;简单便捷,操作容易;与矩阵按键相比较,独立按键的控制程序简单很多,可降低系统开发难度。按键模块电路图如图3-8所示。
在这里插入图片描述

图3-8 按键模块电路图
按键模块的功能需要满足“确定”、“取消”和“选择”,所以模块设定为四个按键。按键1与单片机的P3.5口连接,实现“确定”功能;按键2和按键3分别与单片机的P3.4口和P3.3口连接,实现“选择”功能;按键4与单片机的P3.2口连接,实现“取消”功能。
在使用独立按键的过程中,最重要的是消抖[8]。因为在每次按下按键之后,弹片都会不可避免的抖动,导致电路多次闭合又断开,于是会造成重复按下的错误判断,所以消抖是必不可少的。目前,消抖主要有两种方法:
①硬件消抖:在按键与主芯片之间添加一个双稳压电路或是滤波消抖电路,通过稳压或滤波,确保传输到主控芯片的信号唯一;
②软件消抖:在软件程序中加入一个延时函数,在系统接收到第一个按键信息后开始执行延时函数,等延时函数结束后在判断按键是否处在闭合状态,如果检测到主控芯片端口依然处在低电平,则说明按键成功闭合,消抖完成。在本设计中采用的就是软件消抖。
3.6时钟模块(DS1302)
系统采用DS1302时钟芯片[8]作为系统外部时钟,用以记录并存储人员签到时间,然后通过I/O口把信息传送到单片机,再由单片机控制显示屏进行显示。其电路图如图3-9所示。
在这里插入图片描述

图3-9 时钟模块DS1302电路图
与其他时钟芯片相比较,DS1302具有以下特点:
①具有强大的时钟计数功能,不仅可以对秒分时计数,还可以对年与日计数,可以设置12小时制,也可以设置24小时制,而且计数年份可达2100年。此外,它还能对闰年进行识别,当遇到闰年的时候,会自动通过补偿功能完成对闰年的计数;
②内部拥有31*8位的扩展数据寄存器,以满足更大量的时间信息的存储;
③其工作电压为2.0~5.5V,电流为320nA(2.0V),功耗较低,另外,在低电压低电流环境下工作使得损耗较低,一定程度延长了芯片的使用寿命;
④与DS1202比较,DS1302增加了双电源功能,Vcc2为主电源,Vcc1为备用电源。正常工作时,Vcc2Vcc1,当Vcc2Vcc1且Vcc2-Vcc10.2V时,系统会自动给备用电源充电;遇到异常情况时,如Vcc2Vcc1、系统掉电等,自动转换为备用电源供电,以保证芯片内数据不被丢失。
DS1302的控制指令为8位,如表3-3所示。
表3-3 DS1302控制位
bit7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
1/0 RAM/ A4 A3 A2 A1 A0 I/O
bit0控制芯片输入输出,1为输出,0为输入;bit1~5控制寄存器输入输出;bit6控制时钟寄存器的读写操作;bit7控制芯片写入操作,1为允许写入,0为禁止写入。
3.7蜂鸣器
蜂鸣器部分采用电压式蜂鸣器[5],主要是在系统中起到提示作用,使得用户直观地知道操作是否成功,让系统更加人性化。其内部主要包括振荡电路、蜂鸣片、匹配器和共鸣箱等。在本设计中采用的蜂鸣器,其工作频率是2000Hz,可直接通过单片机的PWM端口进行驱动。所以在设计软件的时候,要注意对PWM输出信号的频率进行设置。
蜂鸣器电路图如图3-10所示。
在这里插入图片描述

图3-10 蜂鸣器电路图
蜂鸣器引脚1与5V电源连接,引脚2与单片机P3.6端口连接,实现相关控制。本设计中,进行指纹录入、功能选择、功能确定等操作时,蜂鸣器响一次;在进行签到签退操作时,蜂鸣器响3次。

第4章 系统软件设计

4.1系统主程序设计
利用STC12C5A60S2作为主控芯片设计指纹打卡机,其主程序流程图如图4-1所示。
在这里插入图片描述

图4-1 系统主程序流程图
主函数设计的关键代码如下如下:
#include <intrins.h>
#include “config.h”
#include “Lcd1602.h”
#include “key.h”
#include “time.h”
#include “uart.h”
#include “buzz.h”
#include"FPM10A.h"
#include “DS1302.h”

void InitTimer1(void) //初始化定时器T1
{
TMOD&= 0x0F; //T1清零,T0保留
TMOD|= 0x10; //设置定时器T1为方式1
TH1 = 0xD4;
TL1 = 0xCD;
EA = 1; //开总中断
ET1 = 1; //开定时器T1中断
TR1 = 1; //启用定时器T1
}
void Sys_Init() //系统初始化
{
InitTimer1();
InitLcd1602();
Uart1Init(0,1,220); //初始化串口,波特率设为9600
Buzz_Init();
InitDS1302();
}
extern signed char temprx;
void main()
{
Sys_Init();
showInit();
refreshDS1302(); // 刷新显示
while(1)
{
fpm10aAction(); //指纹模块开始工作
}
}
4.2指纹采集程序设计
本设计中指纹模块采用的是以光学传感器为基础的采集系统。指纹采集通过调用指纹模块的一系列指令来完成,所以必须熟悉并掌握FM-70模块的各指令集的功能与用法,然后根据整个设计系统的要求筛选最适合的指令来实现。
经过自己的思考分析再结合各种参考资料,确定指纹采集程序框图如图4-2所示。
在这里插入图片描述

图4-2 指纹采集程序流程图
指纹采集的相关程序代码如下:
①获取指纹图像:
void FPM10A_Cmd_Get_Img(void)
{
unsigned char i;
FPM10A_Cmd_Send_Pack_Head(); //发送通讯协议包头
for(i=0;i<6;i++) //发送命令0x1d
{
Uart_Send_Byte(FPM10A_Get_Img[i]);
}
}
②提取特征文件存放在Buffer1中:
void FINGERPRINT_Cmd_Img_To_Buffer1(void)
{
unsigned char i;
FPM10A_Cmd_Send_Pack_Head(); // 发送通讯协议包头
for(i=0;i<7;i++) //发送命令,提取特征
{
Uart_Send_Byte(FPM10A_Img_To_Buffer1[i]);
}
}
③提取特征文件存放在Buffer2中:
void FINGERPRINT_Cmd_Img_To_Buffer2(void)
{
unsigned char i;
for(i=0;i<6;i++) //发送包头
{
Uart_Send_Byte(FPM10A_Pack_Head[i]);
}
for(i=0;i<7;i++) //发送命令,提取特征
{
Uart_Send_Byte(FPM10A_Img_To_Buffer2[i]);
}
}
4.3指纹签到程序设计
在进行指纹签到时,由于需要显示签到时间(包括前后两次签到的实时时间,以及两次签到的时间间隔,也就是员工工作时长),所以要熟悉对时钟模块DS1302的相关控制操作,确定好其显示格式是12小时制还是24小时制,还要明确设定好其8位控制指令的具体值。另外,需要通过LCD1602液晶显示屏来显示签到时间,所以要明确显示屏与单片机主芯片之间通讯的引脚号以及具体操作指令。
指纹签到的程序流程图如图4-3所示。
在这里插入图片描述

图4-3 指纹签到程序流程图
指纹签到的主要部分为指纹匹配,其主要程序如下:
if(FPM10A_RECEICE_BUFFER[9]==0x0) //指纹模块接受到匹配指令
{
Lcd1602FullClear();
FPM10A_RECEICE_BUFFER[9]=‘A’;
Lcd1602ShowStr(0,0,“Found fingerprint”); //显示屏显示寻找模式,也就是签到模式
flagdooroper=1;
Lcd1602FullClear();
tempbla=FPM10A_RECEICE_BUFFER[10]*0x100+FPM10A_RECEICE_BUFFER[11]; //寻找到匹配的位置
str[0] = tempbla % 10000 / 1000+ 0x30;
str[1] = tempbla % 1000 / 100+ 0x30;
str[2] = tempbla % 100 / 10+ 0x30;
str[3] = tempbla % 10+0x30;
str[4] = ‘\0’;
Lcd1602ShowStr(0,1,str); //显示人员编号
GetRealTime(&CurTime); //获取当前时间
4.4指纹删除程序设计
在进行指纹删除程序设计时,由于指纹模块FM-70中没有选择性删除的相关指令,只有指纹库清空类指令,也就是每一次删除都是删除指纹库里的所有指纹。
指纹删除程序流程图如图4-4所示。
在这里插入图片描述

图4-4 指纹删除程序流程图
主要程序代码如下:
void FPM10A_Delete_All_Fingerprint() //调用指纹模块的删除指令
{
unsigned char i=0;
Lcd1602FullClear();
Lcd1602ShowStr(0,0,"Delet All… "); //询问是否删除所有指纹
do
{
if(KEY_OK0)
{
while(KEY_OK
0); //按键确认
Lcd1602ShowStr(0,0,"Deleting… ");
Delay_Ms(300);
for(i=0;i<8;i++)
{
Delay_Ms(200);
}
FINGERPRINT_Cmd_Delete_All_Model();
FPM10A_Receive_Data(12); //接收到的确认码无误
Lcd1602ShowStr(0,0,"Delet Seccess "); //显示删除成功
Buzz_Times(3); //蜂鸣器响3次
break;
}
}while(KEY_CANCEL==1);
}
4.5开发环境介绍(Keil)
本设计中采用Keil软件来进行程序开发,它是美国Keil Software公司研制的适用于单片机程序开发的一个开发系统,不仅支持汇编语言,还支持C语言编程。其特点有:系统界面人性化,工具栏有很多便捷实用的选项图标,便于开发者在编程过程中直接直接选用;具有强大的程序调试工具,例如单步运行、断点设置等,方便开发者进行程序调试;操作简单,容易上手,自带库里也提供了许多参考例程,便于使用者查阅。
其开发环境界面如图4-5所示。
在这里插入图片描述

图4-5 Keil开发环境

结 论

在设计过程中遇到了各种问题,例如刚开始打算先通过Protues仿真调试好再下载到硬件电路,但后来发现Protues系统里并没有与指纹相关的模块。虽然网上说可以选择一个串口通信的模块代替指纹模块,但这样一来用仿真电路来调试的便捷优势就无法体现出来,所以最后决定只用开发板来进行调试;另外,在程序设计时,由于对FM-70指纹模块的操作指令不够熟悉,导致程序经常报错。尤其是相关指令里包含的参数以及其意义必须先弄明白,才能有效地进行程序开发。同时,要善于运用程序开发软件里的调试工具,如单步运行、断点设置等;还有就是用于按键消抖的延时函数的延时时长要控制好,过短会导致消抖失败,过长会导致单片机cpu效率大大降低;除此之外,在后期硬件电路焊接时,因为焊接技术有限,经常会出现虚焊现象,从而导致系统电路多处出现短路。不过后来通过万用表一一排查出来并重新焊接成功。
根据设计要求,本系统已基本实现以下功能:①人员指纹登录,系统上电后,各模块初始化,通过按键选择指纹登录功能,系统进入指纹登录模式,人员可以把自己的指纹信息存入到系统当中并进行编号;②人员考勤签到,通过按键选择指纹签到模式,签到模式又分为签到与签退,第一次指纹打卡为签到,系统将签到人的指纹信息与指纹库中的指纹模板进行匹配,若指纹符合,则签到成功,液晶屏显示签到时间和签到人员的编号。若指纹不符合,则液晶屏不显示;第二次指纹打卡为签退,系统将签退人的指纹信息与指纹库中的指纹模板进行匹配,若指纹符合,则签退成功,液晶屏同时显示签到签退时间;③指纹信息删除,通过按键选择指纹删除模式,系统清除指纹库里的所有指纹模板。
虽然该系统基本满足指纹打卡需求,但功能相对简单,而且还有很多需要完善的地方,如指纹存储容量不够大,显示信息不够详细,删除功能并没做到真正的随意删除和修改等。在以后的学习当中,我会对系统作进一步改进。

致 谢

在本次设计当中,我发现要完完整整完成一个电子设计,不仅仅要有大量理论知识的积累,还需要有较强的动手能力。另外,还有一个特别重要的就是外部力量的支撑。一个人的知识储备、思考能力总是有限的,怎样去整合周边的可调用资源,寻求有效帮助,对于做好一个设计或者是其他任何一件事至关重要。
在这里我要特别感谢那些在设计中给予我许多帮助的人,是他们让我能够顺利地完成此次设计。每当遇到某个难题或是有想不明白地方,如果在网络资源中找不到我想要的解决方法,我会请教我的指导老师、同学或者电子论坛里认识的一些朋友,他们往往都能够给我意想不到的启发。例如做程序设计时,很多不明白的函数调用方法,同学会耐心给我讲解,也许有时大家意见不同,但总能给予我很多有用信息。另外,虽然和指导老师的见面次数不多,但在整个设计过程当中,老师总会耐心地督促我的进度,适合时给予我各种各样的建议,在我有疑问的时候也会不厌其烦地为我解答。所以在这里再次感谢我的毕业设计指导老师。

参考文献

[1]李军英.基于指纹特征的考生身份识别系统[M].北京:清华大学出版社,2009
[2]李振汕.指纹识别技术在身份认证中的应用于研究[J].信息网络安全,2011(03):11~15
[3]陈芳林,周杰.指纹特征提取与多特征识别[M].北京:国防工业出版社,2016.10
[4]杨小冬.自动指纹识别原理与实现[M].北京:科学出版社,2013
[5]戴仙金.51单片机C语言程序开发实例[M].北京:清华大学出版社,2008
[6]李华.MCS-51系列单片机实用接口技术.北京:北京航空航天大学出版社,1998
[7]于秀霞.指纹识别技术及其应用[J].长春大学学报,2005.02
[8]何立民.51单片机应用系统[M].北京:北京航空航天大学出版社,1990
[9]刘旭.自动指纹识别算法在嵌入式系统的实现[J].计算机工程与应用,2002
[10]简兵.基于脊线跟踪的指纹图细节提取算法[J].电路与系统学报,2001
[11]林小竹,何薇.数字图像处理[M].北京:北京理工大学出版社,2002
[12]黄子中,王志英.指纹自动识别系统中的预处理技术[J].计算机研究与发展,1997,34(12)
[13]汪庆宝,胡健.指纹自动识别中的中心点搜索和特征分块抽取方法[J].北京工业大学学报,1996,22(4)
[15]林国清,李见为.指纹图像预处理方法的研究[J].光电工程,2002,29(5)
[16]田捷,杨鑫.生物特征识别技术理论与应用[M].北京:电子工业出版社,2005
[17] Lin Hong, Yifei Wan, Anil Jain. Fingerprint Image Enhancement: Algorithm and Performance Evaluation[J].IEEE Trans.On Pattern Analysis. and Machine Intelligence. 1998, 20(8)
[18] Isenor D K, Zaky S G. Fingerprint Identification Using Graph matching [J], Pattern Recognition, 1986, 19(2): 113-122.
[19] Huang K. 《Fingerprint verification based on wavelet subbands》. Biometric technology for human identification, 2004
[20] N.K.Ratha, S.Chen, A.K.Jain.Adaptive flow directional-based feature extraction in fingerprint images.Pattern Recognition. 1995,28(11)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/460352.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解TCP:序列号、确认号和自动ACK的艺术

深入理解TCP&#xff1a;序列号、确认号和自动ACK的艺术 在计算机网络的世界里&#xff0c;TCP&#xff08;传输控制协议&#xff09;扮演着至关重要的角色。它确保了数据在不可靠的网络环境中可靠地、按顺序地传输。TCP的设计充满智慧&#xff0c;其中序列号&#xff08;Seq&a…

续上篇 qiankun 微前端配置

上篇文章地址&#xff1a;微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】-CSDN博客 主应用&#xff1a; src/main.js 配置&#xff1a; import Vue from vue import App from ./App.vue import router from ./router import { registerMicroApps, start } …

Jenkins内部使用Docker

修改docker.sock文件权限 路径在&#xff1a;/var/run/docker.sock 进入/var/run目录下 修改docker.sock文件权限&#xff0c;且让其他用户也可以读写。 cd /var/run chown root:root docker.sock chmod orw docker.sock 修改数据卷映射 切换到你Jenkins的docker-compose.…

Verdaccio部署及基础使用

1. Verdaccio 简介 Verdaccio&#xff0c;是一个轻量级的 npm 私有仓库的开源解决方案。npm是一个基于http的协议&#xff0c;用来存放软件包并且维护版本和依赖&#xff0c;利用 http 提供的 url路径 来对软件包进行增删改查。所以 Verdaccio 这款软件的核心就是实现 npm协议…

淘宝商品销量数据接口,淘宝API接口

淘宝商品销量数据接口是淘宝开放平台提供的一种API接口&#xff0c;通过该接口&#xff0c;商家可以获取到淘宝平台上的商品销量数据。 淘宝商品销量数据接口可以用于获取特定商品的销量数据、特定店铺的销量数据、特定类目的销量数据等。商家可以根据自己的需求来调用该接口&…

Gitlab部署及使用

1. 简介 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。Gitlab是目前被广泛使用的基于 git 的开源代码管理平台&#xff0c;基于Ruby on Rails构建&#xff0c;主要针对软件开发过程中产生的代码…

phpcms头像上传漏洞引发的故事

目录 关键代码 第一次防御 第一次绕过 第二次防御 第二次绕过 第三次防御 第三次绕过 如何构造一个出错的压缩包 第四次防御 第四次绕过 本篇文章是参考某位大佬与开发人员对于文件包含漏洞的较量记录下的故事&#xff0c;因为要学习文件包含漏洞&#xff0c;就将大佬…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridItem)

网格容器中单项内容容器。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。仅支持作为Grid组件的子组件使用。 子组件 可以包含单个子组件。 接口 GridItem GridItem(value?: GridItemOptions)…

【AI+办公】利用AI软件制作PPT提升工作效率

最近看了很多AI相关信息的输入&#xff0c;很多使用AI软件赚钱的文章或付费课程&#xff0c;思路多多少少自己了解不少&#xff0c;后面有时间分享下。本篇主题是&#xff0c;利用AI软件制作PPT提升工作效率。对于上班族来说&#xff0c;提升工作效率也是一种节省个人时间的方式…

最佳实践:Swagger 自动生成 Api 文档

自动生成 API 文档的好处不言而喻&#xff0c;它可以提供给你的团队或者外部协作者&#xff0c;方便 API 使用者准确地调用到你的 API。为了降低手动编写文档带来的错误&#xff0c;很多 API 开发者会偏向于寻找一些好的方法来自动生成 API 文档。本文将会介绍一些常用的文档生…

express+mysql+vue,从零搭建一个商城管理系统14--快递查询(对接快递鸟)

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、安装md5&#xff0c;axios&#xff0c;qs二、新建config/logistics.js三、修改routes/order.js四、添加商品到购物车总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service部分 快递鸟…

AI人工智能培训讲师ChatGPT讲师叶梓培训简历及提纲ChatGPT等AI技术在医疗领域的应用

叶梓&#xff0c;上海交通大学计算机专业博士毕业&#xff0c;高级工程师。主研方向&#xff1a;数据挖掘、机器学习、人工智能。历任国内知名上市IT企业的AI技术总监、资深技术专家&#xff0c;市级行业大数据平台技术负责人。 长期负责城市信息化智能平台的建设工作&#xff…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ListItemGroup)

该组件用来展示列表item分组&#xff0c;宽度默认充满List组件&#xff0c;必须配合List组件来使用。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件的父组件只能是List。 使用说明 当List…

云与云计算:从传统到云端的IT资源变革

云&#xff1a;从分散到集约&#xff0c;资源服务化的新模式 让我们先通过一个生活化的场景来理解“云”这一概念。几十年前&#xff0c;诸如农村地区的居民需要自给自足&#xff0c;比如在自家院子里打井取水&#xff0c;冬季烧煤取暖&#xff0c;一切满足自己生活需要的都要…

SwiftUI组件 - AsyncImage

SwiftUI组件-AsyncImage import SwiftUIstruct AsyncImageBootcamp: View {let url URL(string: "https://picsum.photos/200")var body: some View {/// Mark - iOS15 以后才有的方法ScrollView {AsyncImage(url: url, content: { returnImage inreturnImage.resiz…

STM32F103 CubeMX 使用USB生成鼠标设备

STM32F103 CubeMX 使用USB生成鼠标设备 1 配置cubeMX1.1配置外部晶振&#xff0c;配置debug口1.2 配置USB1.3 配置芯片的时钟1.4 生成工程 2. 编写代码2.1 添加申明2.2 main函数代码 1 配置cubeMX 1.1配置外部晶振&#xff0c;配置debug口 1.2 配置USB 1.3 配置芯片的时钟 需…

uniapp 开发出现这个 Error in onLoad hook: “SyntaxError: Unexpected end of JSON input“

uniapp 开发出现这个 Error in onLoad hook: “SyntaxError: Unexpected end of JSON input“,这个问题如何解决。 原因&#xff1a; 由于JSON.parse无法识别某些url中的特殊字符比如&等特殊符号造成的。 解决办法&#xff1a; 页面A&#xff08;JSON.stringify传参&a…

YOLOV5 部署:基于web网页的目标检测(本地、云端均可)

1、前言 YOLOV5推理的代码很复杂,大多数都是要通过命令行传入参数进行推理,不仅麻烦而且小白不便使用。 本章介绍的web推理,仅仅需要十几行代码就能实现本地推理,并且只需要更改单个参数就可以很方便的部署云端,外网也可以随时的使用 之前文章介绍了QT的可视化推理界面,…

Flutter Inspector 视图调试工具突然不能用了

The embedded browser failed to load. Error: JCEF is not supported in this env or failed to initialize 1、在 Android Studio 的 Help 菜单中&#xff0c;找到 Find Action 2、搜索 boot runtime&#xff0c;找到「Choose Boot Java Runtime for the IDE」选项 3、在「…

计算机毕业设计-基于大数据技术下的高校舆情监测与分析

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、研究背景与意义1.1背景与意义1.2 研究内容 二、舆情监测与分析的关键技术2.1 robot协议对本设计的影响2.2 爬虫2.2.1 工作原理2.2.2 工作流程2.2.3 抓取策略2.3 scrapy架构2.3.1 scrapy&#xff1a;开源爬虫架…