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

摘要

在科学技术飞速发展的今天,社会对身份识别的要求越来越高,尤其是在企业管理的人员签到、工作考勤等活动中对身份识别的高效性和可靠性的需求更为迫切。而传统的个人身份识别手段,如钥匙、密码、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)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 reactive丢失响应式

问题 使用 reactive 构造响应式对象时&#xff0c;当对其进行重新赋值后&#xff0c;会导致原有变量失去响应式&#xff0c;页面不会发生联动更新 例如&#xff1a; 1、使用 reactive 定义一个响应式的对象变量 let data1 reactive({name: 小李,date: 2024-03-18,address: xx…

Spring炼气之路(炼气二层)

目录 一、bean的配置 1.1 bean的基础配置 1.2 bean的别名配置 1.3 bean的作用范围配置 二、bean的实例化 2.1 bean是如何创建创建的&#xff1f; 2.2 使用静态工厂实例化bean 2.3 使用实例工厂实例化bean 三、bean的生命周期 3.1 什么是bean的生命周期 3.2 bean的生…

工控机在机器人领域的应用丨工业一体机的应用

随着机器人技术的不断发展&#xff0c;机器人在制造、物流等领域得到了广泛应用。而工业控制计算机&#xff08;工控机&#xff09;作为机器人控制系统的核心设备&#xff0c;也在机器人领域发挥着越来越重要的作用。 机器人控制系统是机器人的核心部分&#xff0c;控制系统的…

C++的内存管理

目录 1. C/C内存分布 2. C语言中动态内存管理方式 3. C内存管理方式 3.1 new/delete操作内置类型 4. operator new与operator delete函数 4.1 连续开辟空间(尽力了解) 5. new和delete的实现原理 5.1 内置类型 5.2 自定义类型 6. 深入理解 6.1malloc/free和new/delete的区…

SAP CAP篇十五:写个ERP的会计系统吧,Part II

本文目录 本系列文章目标开发步骤数据库表设计初始数据初始数据&#xff1a;AccountCategories初始数据&#xff1a;AccountUsages初始数据&#xff1a;ChartOfAccounts初始数据&#xff1a;AccountSubjects Service 定义生成Fiori AppApp运行 本系列文章 SAP CAP篇一: 快速创…

适用于智能语音小家电的语音ic类型有哪些?

适用于智能语音小家电的语音ic类型有哪些&#xff1f; 1. 语音播放芯片&#xff1a;这种芯片主要用于实现语音提示和报警功能。例如&#xff0c;当按下某个按钮时&#xff0c;它可以发出语音提醒&#xff0c;或者在出现故障时发出报警声音。这种芯片的应用非常广泛&#xff0…

操作系统笔记之进程调用API中的getpid、fork、wait、exec补充

操作系统笔记之进程调用API中的getpid、fork、wait、exec补充 code review! —— 杭州 2024-03-17 夜 文章目录 操作系统笔记之进程调用API中的getpid、fork、wait、exec补充1.getpid()2.fork()3.wait()4.exec()5.通常&#xff0c;exec() 调用与 fork() 调用一起使用&#xff…

002_avoid_for_loop_in_Matlab避免使用for循环

避免使用for循环 在程序设计思想中&#xff0c;循环是一个很有力的工具。在循环中&#xff0c;计算机很轻松地重复执行相同的操作。循环是汇编之上的编程中最重要的概念之一。Matlab的循环有两个语言构造&#xff0c;一个是for循环&#xff0c;另一个是while循环。在Matlab中&…

JetBrains全家桶激活,分享 GoLand 2024 激活的方案

大家好&#xff0c;欢迎来到金榜探云手&#xff01; GoLand 公司简介 JetBrains 是一家专注于开发工具的软件公司&#xff0c;总部位于捷克。他们以提供强大的集成开发环境&#xff08;IDE&#xff09;而闻名&#xff0c;如 IntelliJ IDEA、PyCharm、和 GoLand等。这些工具被…

总结mac下解决matplotlib中文显示问题的几种方法

一、前言&#xff1a; 使⽤matplotlib画图时&#xff0c;由于matplotlib默认没有中⽂&#xff0c;显⽰中文时会出现空⽩⼩⽅块。 二、方法&#xff1a; 2.1 matplotlib中使用SimHei字体 1&#xff09;进入终端后查看matplotlib的字体路径&#xff1a; $ python >>&g…

Linux学习-进程

目录 进程基本概念 进程相关命令 进程的创建 进程的调度 进程相关函数接口 进程的消亡 实例&#xff1a;创建九个子进程 目录 进程基本概念 进程相关命令 进程的创建 进程的调度 进程相关函数接口 进程的消亡 实例&#xff1a;创建九个子进程 exec函数…

Python脚本:用py处理PDF的五大功能

一、代码 【第三方库】3个 【Py版本】3.9 【使用前提】关闭所有的word文档 import os from datetime import datetime from docx2pdf import convert from pdf2docx import parse from PyPDF2 import PdfMerger from PyPDF2 import PdfReader,PdfWriter#将文件夹中的所有Wo…

C++语言学习(二)—— C++语言的基本知识

目录 一、面向对象的三个核心概念 二、C语言中的I/O口 三、C语言中的数据类型​​​​​​​ 3.1 逻辑类型 3.2 引用类型 3.2.1 引用作为函数参数 3.2.2 引用作为函数返回值 3.2.3 引用作为类成员 3.3 类类型 四、 C语言中的内联函数 五、 函数重载 六、 带默认形参…

四、分布式锁之自定义分布式锁

1、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多个进程可见并且互斥的锁。分布式锁的核心思想就是多线程都使用同一把锁&#xff0c;实现程序串行执行。 分布式锁需要具备的条件&#xff1a; 特性含义可见性多个线程都能感知到变化互斥性分布…

数据库系统概论-第16章 数据仓库与联机分析处理技术

概念性的介绍&#xff0c;一略而过&#xff0c;不重要。 16.1 数据仓库技术 16.2 联机分析处理技术 16.3 数据挖掘技术 16.4 大数据时代的新型数据仓库 16.5 小结

G - Find a way

题目分析 1.双重bfs,遍历两个起点求最短路再计算总和即可 2.唯一的坑点在于对于一个KFC&#xff0c;两人中可能有一个到不了&#xff0c;所以还要对到不了的点距离做处理 #include <bits/stdc.h> using namespace std; using ll long long; const int N 220;struct pos…

Linux/Ubuntu/Debian从控制台启动程序隐藏终端窗口

如果你想从终端运行应用程序但隐藏终端窗口. 你可以这样做&#xff1a; 在后台运行&#xff1a; 你只需在命令末尾添加一个与号 (&) 即可在后台运行它。 例如&#xff1a; your_command &将 your_command 替换为你要运行的命令。 这将在后台启动该命令&#xff0c…

Three.js基础入门介绍——【毕业季】Three.js动态相册

前言 岁月匆匆&#xff0c;又是一年毕业季&#xff0c;这次做个动态相册展示图片&#xff0c;放些有意思的内容&#xff0c;一起回忆下校园生活吧。 预期效果 相册展示和点选切换&#xff0c;利用相机旋转和移动来实现一个点击切图平滑过渡的效果。 实现流程 基本流程 1、搭…

【python】python汽车效能数据集—回归建模(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【学习】软件测试行业未来的发展趋势预测

近年来&#xff0c;随着中国数字经济的蓬勃发展&#xff0c;软件测试行业也迎来了新的春天。从早期的手工测试到自动化测试&#xff0c;再到持续集成和持续交付&#xff0c;中国的软件测试行业经历了快速的发展和变革。各行各业均对软件测试提出了更高的要求&#xff0c;尤其在…