指纹识别模块单

合集下载

指纹识别原理及模组介绍

指纹识别原理及模组介绍
指纹识别原理及模组介绍
指纹识别的背景知识
我们手掌及其手指、脚、脚趾内侧表面的皮肤凸凹不平产生的纹路会形成各种各样的图案。这些纹路的存 在增加了皮肤表面的摩擦力,使得我们能够用手来抓起重物。人们也注意到,包括指纹在内的这些皮肤的纹路在 图案、断点和交叉点上各不相同,也就是说,是唯一的。依靠这种唯一性,我们就可以把一个人同他的指纹对应 起来,通过对他的指纹和预先保存的指纹进行比较,就可以验证他的真实身份。这种依靠人体的身体特征来进行 身份验证的技术称为生物识别技术,指纹识别是生物识别技术的一种
的玻璃表面,反射光线由CCD去获得,反射光的数量依赖于压在玻璃表面指纹的嵴和峪的深度和皮肤与玻璃间的油 脂。光线经玻璃射到峪后(指纹线之间的凹陷部分)反射到CCD—呈现白色,而射到嵴后则不反射到CCD,图像呈现黑 色(确切的是脊上的液体、油脂影响光线的反射路径)。
光学指纹采集技术有明显的优点:价格低廉。缺点:由于要求足够长的光程,因此要求足够大的尺寸,而且过 分干燥和过分油腻的手指识别效果差。
指纹识别应用领域
指纹等生物识别技术可弥补传统的安全认证方法,提供了一个很好的解决方案。可用指纹等生物特征提高安全 性的领域举例: 涉密系统,提供高度安全防范措施 针对大规模人群身份鉴别技术 网络、数据库和关键文件等的安全控制 机密计算机的登录认证 银行ATM,POS终端等的安全认证 手机、平板、PC等使用认证等 移动支付 安全门禁、门锁
指纹识别应用趋势
手机、PAD、安防 屏幕解锁 -更安全快捷 特殊应用程序访问许可 –防止他人或打开你的特殊应用程序 数据和文件安全访问 –防止他人访问你的手机数据 移动支付 –更快捷的完成安全支付 应用程序快捷方式 –给每个手指赋予不同的指令 安防(门锁、保险柜等)

通元微指纹识别模组TFP625R 用户手册说明书

通元微指纹识别模组TFP625R 用户手册说明书

通元微指纹识别模组TFP625R用户手册厦门通元微智能科技有限公司目录1.产品规格 (1)2.Pin map (3)3. 概念解释 (3)1)资源开销 (3)2)模组参数 (4)3)指纹库 (4)4.通讯协议 (5)1)数据包格式 (5)2)命令码 (6)3)反馈码 (7)5. 命令 (8)GetImg (8)Img2Tz (9)Match (10)Search (10)RegModel (11)StoreModel (11)LoadChar (12)UpChar (13)DownChar (14)UpImage (15)DeleteChar (16)Empty (17)SetSysPara (17)ReadSysPara (18)SetPwd (19)VfyPwd (19)SetAddr (20)ReadINFPage (21)WriteNotePad (22)ReadNotePad (22)TemplateNum (23)ReadConList (23)Cancel (24)GetMinEmptyID (25)AutoEnroll (26)AutoIdentify (28)6.使用流程 (30)7.休眠与唤醒 (31)8.测试环境 (33)9.技术支持 (34)欢迎使用通元微指纹识别模组TFP625R 。

本文将为客户使用本模组进行指纹识别开发提供必要的说明信息。

本模组为单机指纹识别模组。

模组可以进行指纹注册、指纹识别、指纹验证等功能。

本模组支持UART通讯方式。

1.产品规格TFP625R具有模组自学习功能。

该功能会提升指纹识别的准确率。

匹配同一指纹,在匹配若干次后,匹配分数有所提升。

2.P in map连接器类型:FPC-0.5-6P: 6Pin 条形连接器,间距0.5mm。

3. 概念解释1)资源开销2)模组参数3) 指纹库图3-3, 模板与特征在Flash 中的对应成员0 成员1特征2N-1。

电容式指纹模块工作原理

电容式指纹模块工作原理

电容式指纹模块工作原理指纹识别技术在现代生活中得到了广泛应用,电容式指纹模块是其中一种常见的指纹识别技术。

它通过利用人体电容效应来实现指纹的采集和识别。

本文将详细介绍电容式指纹模块的工作原理。

一、电容效应电容效应是指两个带电体之间由于存在电势差而产生的电场。

当两个带电体之间存在电势差时,它们之间会形成电场,电场线会从高电势的带电体流向低电势的带电体,这种电场的存在会导致两个带电体之间产生电容。

二、电容式指纹模块的构成电容式指纹模块通常由电容传感器阵列、控制电路和指纹识别算法组成。

电容传感器阵列是电容式指纹模块的核心部件,它由许多微小的电容传感器组成,每个电容传感器对应一个像素点,可以感知该点处指纹的电容变化。

三、电容式指纹模块的工作原理电容式指纹模块的工作原理可以分为两个步骤:指纹采集和指纹识别。

1. 指纹采集当手指触摸电容传感器阵列时,由于手指与传感器之间存在电势差,会导致电容传感器阵列中的电容发生变化。

这种电容变化可以通过测量电荷的积累和消散来实现。

具体而言,当手指接触到电容传感器时,电容传感器与手指之间形成了一个微小的电容,这个电容会导致电容传感器上的电荷积累。

然后,电容传感器上的电荷会通过传感器周围的电路消散。

通过测量电容传感器上电荷的积累和消散速度,可以得到手指与传感器之间的电容变化,从而获取到指纹的特征。

2. 指纹识别获取到指纹特征后,电容式指纹模块会将其与事先存储在数据库中的指纹特征进行比对。

指纹识别算法会通过比对两者之间的相似度来判断是否匹配。

如果匹配度高于设定的阈值,系统将判定为匹配成功,否则判定为匹配失败。

四、优势和应用电容式指纹模块相比其他指纹识别技术有以下几个优势:1. 高精度:电容式指纹模块可以获取到较高精度的指纹图像,有利于提高指纹识别的准确性。

2. 快速响应:电容式指纹模块的指纹识别速度较快,可以在短时间内完成指纹识别过程。

3. 高安全性:每个人的指纹特征都是独一无二的,电容式指纹模块可以通过采集和识别指纹特征来实现个人身份的识别和认证。

指纹识别命令 详解

指纹识别命令 详解

(1)打开“003 指纹识别模块用户手册.pdf”先看第2页,参数介绍。

模块工作在3.6V-6V,他的波特率出厂设定在9600 bps。

RXD、TXD兼容CMOS和TTL电平,也就是3.3V和5V都兼容。

(2)接着第3页模块接线介绍。

(3)再仔细查看第4、5页的内容。

“命令包格式”这个是主机(上位机)发送给模块的,“数据包格式”和“结束包格式”(这两个命令可以是上位机发,也可以是模块发),要注意的包的格式。

“指令应答”(指纹模块应答包格式)。

需要注意的是校验位的计算方法:“校验和是从包标识至校验和之间所有字节之和,超出2 字节的进位忽略。

”第6、7、8、9页也需要查看一下。

(4)下面我们来讲一个具体的例子---- 验证口令PS_VfyPwd这个命令,通过此命令,我们可以知道模块是不是连接正常。

这个命令在第21页从前面了解到芯片地址是FF FF FF FF 共四个字节(4bytes),默认口令为00 00 00 00共四个字节(4bytes)。

发送的命令是:EF 01 FF FF FF FF 01 00 07 13 00 00 00 00 00 1B其中命令分分别讲解如下:EF 01(两个字节的包头)FF FF FF FF(四个字节芯片地址)01(包标识)00 07 (两个字节长度,不足的用0补齐,不能不写)13 (一个字节指令码)00 00 00 00 (四个字节口令)00 1B(两个字节校验和)校验和计算方法:在第4、5页上面,这里计算就是:01(包标识开始)+00+07+13+00+00+00+00=1B,由于是两个字节校验和,所以前面补00,最好的校验和为:00 1B。

这就是发送一个命令介绍,其它的类似,请用户自己参考说明书。

请注意,用户最好不要随意更改地址和口令,除非需要,否则不要更改,以免您记不住,或者更改错误,就需要返厂维修了(重新下载程序)。

指纹模块原理图

指纹模块原理图

指纹模块原理图
很抱歉,由于我是一个文本AI助手,无法提供原始图像或图表。

但是,我可以为您提供指纹模块的工作原理的文字说明。

指纹模块主要包含以下几个关键部分:
1. 指纹传感器:指纹传感器通过感应手指指纹区域的细节和特征,将其转化为数字信号。

传感器上通常覆盖着一层光学窗口或薄膜,用于接触和采集手指指纹。

2. 光源:指纹模块中通常会使用光源来照亮手指表面,以便传感器能够清晰地捕捉到手指指纹的细节。

常用的光源包括LED(发光二极管)或激光二极管。

3. 光学镜头:光学镜头的主要作用是将手指表面的指纹图案聚焦到传感器上,以提高图像的清晰度和质量。

4. 模拟-数字转换(ADC):传感器中采集到的模拟信号会经过模拟-数字转换芯片进行转换,将其转换为数字信号。

这些数字信号可以更方便地进行处理和存储。

5. 指纹识别算法:指纹模块中通常会包含指纹识别算法,用于对采集到的指纹图像进行特征提取和比对。

通过与注册的指纹特征进行比对,可以确定手指是否匹配,从而实现指纹识别功能。

指纹模块的工作原理是通过以上部分的协同工作来实现的。

当手指触碰到指纹传感器表面时,光源会照亮手指,光学镜头将
手指表面的指纹图案聚焦到传感器上。

传感器将采集到的指纹图像转换为数字信号后,指纹识别算法会对这些信号进行处理和比对,从而确定手指的指纹特征,并将结果输出。

通过这一过程,指纹模块能够实现对手指的指纹进行采集、识别和验证等功能,广泛应用于手机、平板电脑、门禁系统等领域。

指纹识别模块指导

指纹识别模块指导

准备实验需要的设备。

硬件: 试验箱、电源线、串口线、网线、指纹扫描模块、PC机一台。

一.软件: 虚拟机、超级终端、FTP软件。

二.连线方式将指纹识别模块安装在经典2410DVP试验箱的168扩展槽中。

三.实验原理指纹模块是面向广阔的锁具市场、保险箱(柜)、安防及工控市场, 推出的。

她是由32位高性能可编程处理器、活体指纹采集芯片和指纹识别核心固件等构成的一个独立的嵌入式指纹识别系统。

本指纹模块具有200枚以上指纹存储能力, 可扩展到上千枚, 具备1秒以内的指纹比对性能, 支持1: 1和1: N两种比对模式, 能够任意兼容各类指纹传感芯片, 允许客户内置应用程序, 减化应用方案, 节省开发成本。

本模块可提供全面的ODM定制服务, 时时刻刻、轻轻松满足您的个性化指纹产品需求。

功能用途指纹模块是嵌入式指纹产品的核心。

她面向锁具、安防和工控企业, 为他们提供一个“快速应用指纹技术”的硬件平台。

在这个平台上, 企业只需专注于原有产品, 无须关注指纹传感器的接入、指纹注册比对等远离其核心价值的技术, 从而在不增加研发成本的同时提升原有产品的应用价值。

指纹模块功能:活体指纹识别脱机指纹注册(250枚)脱机指纹比对(1: 1.1: N)可内置应用程序(固件)可接入任意指纹传感器件(光学、半导体电容、半导体温感、半导体压感、按压式、滑动式)丰富的接口支持(32位GPIO、SPI、UART、I2C.RF)指纹模块应用范围:指纹门锁指纹保险柜(箱)指纹文件柜指纹工控设备指纹遥控器指纹通关设备指纹POS机指纹IC卡读卡器指纹数码产品指纹电气开关等技术规格指纹模块一般参数:注: 指纹采集传感器选择请参考附录1。

模块优势可编程直接在模块的主控MCU中写入应用程序兼容性强能够兼容全球各种指纹传感芯片(光感、电容、电感、温感、压感, 滑动式和按压式)(用户可指定)指纹容量大片内可存储250枚以上指纹, 支持片外扩展注册比对性能优越指纹算法经过多年商用, 嵌入式环境下FAR、FRR性能优良服务好提供24小时技术支持和全面的ODM定制服务(只需提供规格书)四、程序分析根据如上提供的指纹操作API, 在linux开发环境下编写程序实现对指纹模块的完整操作。

FM-180指纹识别模块用户手册

GND USB_DP USB_DN Power
UART 通讯指令格式详解
FM-180是完整的指纹识别模块,不需挂接任何外围部件,模块始终处于从属地位(Slave mode),主机(Host)需要通过不同的指令让模块完成各种功能。主机的指令、模块的应答 以及数据交换都是按照规定格式的数据包来进行的。主机必须按照下述格式封装要发送的指 令或数据,也必须按下述格式解析收到的数据包。
用户记事本
在FLASH 中开辟了一个512 字节的存储区域作为用户记事本,该记事本逻辑上被分成16 页, 每页32 字节。上位机可以通过PS_WriteNotepad 指令和PS_ReadNotepad 指令访问任意一 页。注意写记事本某一页的时候,该页32 字节的内容被整体写入,原来的内容被覆盖。
应答包格式:
2bytes
4bytes
1 byte
2 bytes
1 byte
N bytes
2 bytes
0xEF01
芯片地址 包标识07
包长度
确认码
返回参数
校验和
FM-180 指纹识别模块用户手册 V1.1
确认码定义: 1. 00h:表示指令执行完毕或OK; 2. 01h:表示数据包接收错误; 3. 02h:表示传感器上没有手指; 4. 03h:表示录入指纹图像失败; 5. 04h:表示指纹图像太干、太淡而生不成特征; 6. 05h:表示指纹图像太湿、太糊而生不成特征; 7. 06h:表示指纹图像太乱而生不成特征; 8. 07h:表示指纹图像正常,但特征点太少(或面积太小)而生不成特征; 9. 08h:表示指纹不匹配; 10. 09h:表示没搜索到指纹; 11. 0ah:表示特征合并失败; 12. 0bh:表示访问指纹库时地址序号超出指纹库范围; 13. 0ch:表示从指纹库读模板出错或无效; 14. 0dh:表示上传特征失败; 15. 0eh:表示模块不能接受后续数据包; 16. 0fh:表示上传图像失败; 17. 10h:表示删除模板失败; 18. 11h:表示清空指纹库失败; 19. 12h:表示不能进入低功耗状态; 20. 13h:表示口令不正确; 21. 14h:表示系统复位失败; 22. 15H:表示缓冲区内没有有效原始图而生不成图像; 23. 16H:表示在线升级失败; 24. 17H:表示残留指纹或两次采集之间手指没有移动过; 25. 18H:表示读写FLASH 出错; 26. 0xf0:有后续数据包的指令,正确接收后用0xf0 应答; 27. 0xf1:有后续数据包的指令,命令包用0xf1 应答; 28. 0xf2:表示烧写内部FLASH 时,校验和错误; 29. 0xf3:表示烧写内部FLASH 时,包标识错误; 30. 0xf4:表示烧写内部FLASH 时,包长度错误; 31. 0xf5:表示烧写内部FLASH 时,代码长度太长; 32. 0xf6:表示烧写内部FLASH 时,烧写FLASH 失败; 33. 0x19:未定义错误; 34. 0x1a:无效寄存器号; 35. 0x1b:寄存器设定内容错误号; 36. 0x1c:记事本页码指定错误; 37. 0x1d:端口操作失败; 38. 0x1e:自动注册(enroll)失败; 39. 0x1f:指纹库满 40. 0x20—0xefh:Reserved。 指令只能由上位机下给模块,模块向上位机应答。 系统上电复位后将首先检查默认的设备握手口令是否被修改,若未被修改,则系统认为上位 机没有验证口令的需求,SOC 直接进入正常工作状态;若已被修改,则必须首先验证设备握

指纹模块应用方案

指纹模块应用方案指纹模块是一种集成指纹采集、图像处理、特征提取和特征匹配等功能的模块。

它通过扫描和记录指纹图像,将指纹特征提取出来,并与预先存储的指纹特征进行匹配,从而实现指纹识别的功能。

指纹模块可以应用在各个领域,下面将介绍几种常见的指纹模块应用方案。

1.门禁系统应用方案:指纹模块可以应用在门禁系统中,通过与门禁控制器相连接,实现对门禁设备的指纹识别功能。

用户可以通过注册指纹信息,并将其存储在门禁控制器中,然后通过将手指放在指纹模块上,进行指纹识别验证,验证通过后门禁设备会打开。

2.安防监控系统应用方案:指纹模块可以应用在安防监控系统中,用于对监控设备进行身份识别。

例如,在一些需要限制访问权限的区域,只有特定人员的指纹信息被授权后才能进入,其他人员的指纹信息无法通过验证。

3.个人设备解锁应用方案:指纹模块可以应用在个人设备上,例如手机、平板电脑和笔记本电脑等,用于对设备进行解锁。

用户可以通过在设备上注册指纹信息,然后使用指纹进行解锁而无需输入密码或图案解锁。

这种方案不仅方便了用户,还提高了设备的安全性。

4.银行和金融领域应用方案:指纹模块可以应用在银行和金融领域,用于对用户进行身份验证。

用户在办理账户或进行交易时,可以通过指纹识别进行身份验证,确保账户的安全性和交易的合法性。

5.医疗健康领域应用方案:指纹模块可以应用在医疗健康领域,用于对患者和医务人员进行身份验证。

例如,医院可以使用指纹模块来验证医务人员的身份,以确保只有授权人员才能进入特定区域,或者通过指纹识别验证患者的身份,以确保医疗记录和处方的安全性。

除了以上几种常见的应用方案外,指纹模块还可以应用在各个领域的人员考勤、员工管理、数据加密等方面。

指纹模块的应用方案可以根据实际需求进行定制和开发,以满足不同场景下的指纹识别需求。

指纹模块分类 -回复

指纹模块分类-回复什么是指纹模块?指纹模块,也称为指纹识别模块,是一种使用生物特征技术来识别个体身份的装置。

指纹模块采用指纹传感器和图像处理技术,通过对指纹图像的扫描与比对,实现对个体身份的确认。

它被广泛应用于安全门禁、智能手机、电脑登录、银行金库等场合,取代了传统的密码和钥匙,提供了更加便捷和安全的身份验证方式。

指纹模块的分类主要有以下几种:1. 触控式指纹模块:触控式指纹模块是指通过用户的手指直接触摸指纹传感器来采集指纹图像。

这种模块使用静电感应技术或光电技术来感知指纹的模式和细节。

触控式指纹模块最常用于移动设备中,如智能手机和平板电脑,提供了便捷的指纹解锁和支付功能。

2. 非触控式指纹模块:非触控式指纹模块是通过用户将手指放在传感器上方,无需直接接触传感器即可采集指纹图像。

这种模块通常使用光学和超声波技术来捕捉指纹的细节,具有更高的采集速度和准确度。

非触控式指纹模块常用于门禁和安全监控系统中,提供了高效的识别和验证功能。

3. 二合一指纹模块:二合一指纹模块是指同时具备触控式和非触控式指纹识别功能的模块。

这种模块结合了两种技术的优点,能够适应不同的应用场景和用户需求。

二合一指纹模块常用于金库存取、重要文件保管和高端安防系统中,提供了多重验证和防护措施。

4. 指纹模块芯片:指纹模块芯片是指将指纹传感器和图像处理器集成在一个封装中的集成电路。

这种模块芯片具有更小的尺寸和低功耗的特点,广泛应用于各种小型电子设备中。

指纹模块芯片不仅具备指纹识别功能,还可以与其他传感器和处理器进行数据交互,实现更多的智能化和功能扩展。

除了以上分类,还有其他一些指纹模块的衍生产品,如指纹锁、指纹门铃等。

这些产品使用了指纹模块的识别技术,通过对指纹信息的比对和验证,实现了智能门禁和个性化设定等功能。

总结起来,指纹模块主要分为触控式、非触控式、二合一和芯片等几种类型。

每种类型都有其特定的应用场景和优势,选择适合的指纹模块可以提供更加安全、便捷和智能的身份验证体验。

指纹模块介绍


深圳市十指科技有限公司 出品
指纹(二次)开发模块手册(M12)
版权声明
本用户手册的所有版权为深圳市十指科技有限公司所有,严禁未经深圳市十指科 技有限公司书面授权的发布,复制和修改行为,皆视为侵权行为,深圳市十指科技 有限公司保留追究其责任的权利。
注意:
本手册中所提到的模块内部采用进口高精密元件,在采集指纹时手指只要轻 轻地触碰到采集窗口,不需要用力按压指纹采集窗,模块就能快速的识别 出来。
目录
前言 ………………………………………………………………………………………3 第一部 模块介绍 ……………………………………………………………………4
1. 功能特点…………………………………………………………………………4 2. 技术参数…………………………………………………………………………4 3. 外形结构…………………………………………………………………………5 4. 接口定义…………………………………………………………………………5 5. 操作说明…………………………………………………………………………6 6. 注意事项…………………………………………………………………………6 第二部 开发协议………………………………………………………………………7 第三部 附录……………………………………………………………………………19 添加指纹流程…………………………………………………………………………19 删除指定指纹流程……………………………………………………………………20 删除全部指纹流程……………………………………………………………………20 上传特征值流程………………………………………………………………………20
型号:TF-MD-M12
2、 技术参数 电路板尺寸(mm) 采集头分辨率 指纹容量 比对时间 认假率 拒真率 动态电流 待机电流 工作电压
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指纹识别模块单片机程序#include <reg52.h>#include <intrins.h>#define TRUE 1unsigned char SaveNumber=0,searchnum=0; unsigned int S earchNumber=0;unsigned int clk0=0;sbit relay =P1^4; //继电器引脚sbit buzzer=P1^5; //蜂鸣器引脚sbit red= P2^7;//录入模式指示灯在板子靠近单片机处sbit green= P2^0;//识别模式指示灯在板子远离单片机处sbit k1=P3^3; //模式识别sbit k2=P3^4; //录入一次指纹sbit k3=P3^2; //清除所有指纹(10个指纹清除)//变量定义:unsigned char code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x f8,0x80,0x90};//表:共阳数码管0-9//数码管引脚定义:sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)//由于程序中定时器被用我们用一位数码管显示且为静太显示所以推荐大家用1602或者12864液晶bit changeflag=0,modeflag=0,clearallflag=0; //默认为识别模式,如果为1为录入指纹模式,每录入一次SaveNumber++//////////////////////////////////////常用指令定义///////////////////////////////Verify Password :验证设备握手口令unsigned char code VPWD[16]={16,0X01 ,0Xff,0xff,0xff,0xff, 0x01,0,7,0x13,0x00,0x00,0x00,0x00,0x00,0x1b};//回送12个//设置设备握手口令unsigned char code STWD[16]={16,0X01 ,0Xff,0xff,0xff,0xff, 0x01,0,7,0x12,0x00,0x00,0x00,0x00,0x00,0x1a};//回送12个//GetImage :探测手指并从传感器上读入图像unsigned char code GIMG[14]={12, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3,1,0x00,0x05}; //回送12个//Gen Templet1 :根据原始图像生成指纹特征1unsigned char code GENT1[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0,4,2,1,0x00,0x08}; //回送12个//Gen Templet2 :根据原始图像生成指纹特征2unsigned char code GENT2[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0 ,4,2,2,0x00,0x09}; //回送12个//Search Finger :以CharBufferA或CharBufferB中的特征文件搜索整个或部分指纹库unsigned char code SEAT[18]={17, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,8, 4,1,0,0, 0,0x65, 0x00,0x73}; //回送16个//Merge Templet ;将CharBufferA与CharBufferB中的特征文件合并生成模板,结果存于ModelBuffer。

unsigned char code MERG[14]={12, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3,5 ,0x00,0x09};//回送12个//Store Templet :将ModelBuffer中的文件储存到flash指纹库中unsigned char code STOR[16]={15, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,6,6,2, 0x00,0x00, 0x00,0x0f}; //回送12个//Read Noteunsigned char code RDNT[14]={13,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,4,0x19, 0, 0x00,0x1e};//Clear Noteunsigned char code DENT[46]={45,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,36,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0x00,0x3d};//DEL one templetunsigned char code DELE_one[16]={16, 0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,7,0x0c,0x00,0x00, 0,1, 0x00,0x15};//DEL templet ;清空指纹库unsigned char code DELE_all[12]={12,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,3, 0x0d,0x00,0x11};////////////////常用指令定义-------结束////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////宏定义//////////////////////////////////////////////////////////////////////// #define FALSE 0#define TURE 1//状态定义表#define on 1#define off 0#define MAX_NUMBER 63#define _Nop() _nop_()//////////////////////////////////////宏定义------------结束////////////////////////////////////////////////////////unsigned char FifoNumber=0;unsigned char FIFO[MAX_NUMBER+1]={0};/*********1毫秒延时程序**********/void delay1ms(unsigned int t){unsigned int i,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}void TxdByte(unsigned char dat)//串口发送信息,通过查询方式发送一个字符{TI = 0; //让TI=0SBUF = dat; //读入数据while(!TI); //等待发送完毕TI = 0; //清零}bit Command(unsigned char *p,unsigned char MaxTime) //命令解析,给模块发送一个命令{u nsigned char count=0,tmpdat=0,temp=0,i=0,package=0,flag=0 ,checksum=0;bit result=0, start=0,stop=0;T xdByte(0xef);//数据包包头识别码TxdByte(0x01);//数据包包头识别码i=*p; //数组的第“0”个元素、里面存放了本数组的长度,把这个长度给变量i,方便进行操作p++;p++;f or (count=i-1; count!=1;count--) //Sent command String{temp=*p++; //取第个“1”个元素的内容,然后发送T xdByte(temp);//将数据发送出去}r esult=TURE;//发送完成,结果为真(真为1)F ifoNumber=0;f or (count=MAX_NUMBER+1; count!=0; count--)//清空所有FIFO[]数组里面的内容,写入0X00FIFO[count-1]=0x00;i f (result){result=FALSE;start =FALSE;stop =FALSE;count=0;clk0=0; //清零CL0计数do /////////////////////////////do的内容////////////////////////////////{restart0:if (RI==1)//如果接收到数据{tmpdat=SBUF;//先把接收到的数据放到tmpdat中RI=0;if((tmpdat==0xef)&&(start==FALSE))//这个数据为第一个传回来的数据,也就是“指令应答”的第一个字节{count=0;F IFO[0]=tmpdat;//读入第一个应答字节(0XEF),存在第“0”个元素中flag=1;gotorestart0;//可以用中断方式进行}if(flag==1)//第一个字节已经回来,所以flag==1成立{if(tmpdat!=0x01) //接收数据错误,将重新从缓冲区接收数据{flag=0;//接收应答失败result=FALSE;start =FALSE;stop=FALSE;count=0;gotorestart0;}//如果成功接收到0xef01,可以开始接收数据flag=2;//flag=2;表示应答成功,可以开始接收数据了count++;//现在count=1;FIFO[count]=tmpdat;//读入第二个应答字节(0X01),存在第“1”个元素中start=TURE; //应答成功可以开始接收数据gotorestart0;}if((flag==2)&&(start==TURE))//flag=2;表示应答成功,可以开始接收数据了{count++; //数据元素下标++FIFO[count]=tmpdat;//存入数据if(count>=6){checksum=FIFO[count]+checksum; //计算校验和}if(count==8){package=FIFO[7]*0X100+FIFO[8]; //计算包长度stop= TURE;}if(stop){if(count==package+8){checksum=checksum-FIFO[count-1] - FIFO[count];if(checksum != (FIFO[count]&0xff))result=FALSE; //校验失败,置结果标志为0elseresult=TURE;flag=0;break;}}}}}/////////////////////////////do的内容----------------结束////////////////////////////////while ((clk0 <= MaxTime) && (count <= MAX_NUMBER) && (changeflag==0)); //由定时器以及最大接收数据来控制,保证不会在此一直循环FifoNumber=count; //保存接收到的数据个数}return (result);}bit VefPSW(void)//验证设备握手口令,成功返回1{unsigned char count=0;while (1){if(Command(VPWD,20) && (FifoNumber==11) && (FIFO[9]==0x00))return(1);count++;i f (count>=2)//如果不成功,再验证一次,如果两次不成功,返回失败{return(0);}}}void Clear_All(void) //清空指纹库{delay1ms(200);Command(DELE_all,50); //清空指纹库}unsigned char ImgProcess(unsigned char BUFID) //发获取图像并生成特征文件,存入BUFID中//输入参数为缓冲区号{if(Command(GIMG,89) && (FifoNumber==11) && (FIFO[9]==0x00)) {if(BUFID==1){if(Command(GENT1,60) && (FifoNumber==11) && (FIFO[9]==0x00)){return 1;}else{return 0;}}else if(BUFID==2){i f(Command(GENT2,60) &&(FifoNumber==11) && (FIFO[9]==0x00)){return 1;}else{return 0;}}}else{return 0;}return 0;}bit Searchfinger(void)//搜索指纹(发送搜索命令、以及根据返回值确定是否存在){if(Command(SEAT,60) && (FifoNumber==15) && (FIFO[9]==0x00) )SearchNumber=FIFO[10]*0x100+FIFO[11];//搜索到的页码//MatchScore=FIFO[12]*0x100+FIFO[13] 可以在此计算得分,从而进行安全级别设定,本程序忽略return 1;}else{return 0;}}unsigned char search(void)//搜索指纹{unsigned char SearchBuf=0,i=0;w hile (i<20){if (ImgProcess(1)==1)//首先读入一次指{SearchBuf=Searchfinger();//进行指纹比对,如果搜索到,返回搜索到的指纹序号if(SearchBuf==1){return SearchNumber;}else{return 255;//表示搜索到的指纹不正确}}i++;}return 0;}bit savefingure(unsigned char ID)//保存指纹{unsigned char i=0;//现在开始进行存储指纹模板的操作for (i=0;i<16;i++) //保存指纹信息{FIFO[i]=STOR[i];}FIFO[12]=ID; //把指纹模板存放的PAGE_ID也就是FLASH的位置FIFO[14]=FIFO[14]+ID; //校验和if (Command(FIFO,70)==1)//此处进行存放指纹模板的命令{return(1);}else{return(0);//不成功返回0}}unsigned char enroll(void) //采集两次指纹,生成1个指纹模板{unsigned char temp=0,count=0;w hile(1){temp=ImgProcess(1); //生成特征1if (temp==1)//生成特征文件成功{//采集第一个特征成功count=0;b uzzer=0;delay1ms(100);buzzer=1;break;}else{if (temp==0)//采集指纹没有成功{count++;if (count>=40)//如果采集了40次,还不成功,直接采集失败,直接退出enroll函数----返回0return(0);}}}delay1ms(2000);//延时2S开始采集下一个特征//开始采集第二个特征while(1){temp=ImgProcess(2); //生成特征2if (temp==1)//生成特征文件2成功{if ( (Command(MERG,40)&& (FifoNumber==11) && (FIFO[9]==0x00))==1 ) //合并成功返回1{buzzer=0;delay1ms(100);buzzer=1;delay1ms(100);buzzer=0;delay1ms(100); //响两声,表示生成一个模板成功buzzer=1;return(1);}else{return(0);}}else{if (temp==1)//采集指纹没有成功{count++;if (count>=25)return(0);}}}}void main(void)//主函数{unsigned char i=0;ET0=1; //定时器0开中断TL0=0x97; //17ms的初值TH0=0xBD;//串口初始化SCON=0x50; //UART方式1:8位UART; REN=1:允许接收PCON=0x00; //SMOD=0:波特率不加倍TMOD=0x21; //T1方式2,用于UART波特率TH1=0xFD;TL1=0xFD; //UART波特率设置:9600TR1=1;TR0=1;// 开定时器0IT0=0;//中断0低电平中断IT1=1;//中断1低电平中断EX0=1;//开中断0EX1=1;//开中断1EA=1;SMG_g = 0;P0 = tab[0];//显示0for(i=0;i<6;i++)//开始握手6次,如果没有一次成功,表示模块通信不正常。

相关文档
最新文档