指纹识别模块指导
/*****************************************************************
Get_FPNum()获得当前已注册指纹数
Command ID:0x27
协议头协议长度固定字段命令码协议尾
void User_enroll(unsigned char ucFPIdx);
/*****************************************************************
User_auth()指纹验证
Command ID:0x24
Command:0x01 0x02 0x24 0xff 0x03
2.锁具、电气控制产品同样可用
3.活体采集技术,防伪性强
(3)ATW200
ATW200
使用方式
手指滑动式
采集原理
半导体电容传感
采集点阵
192x8pixel 0.5x13mm
分辨率
500dpi
图像灰度
128级
耐用次数
100万次(10年)
工作温度
-0℃~70℃
防静电(ESD)
> 15KV
选用建议
1.滑动式传感器中感应宽度最大者,手指倾斜影响不大
注册比对性能优越 指纹算法经过多年商用,嵌入式环境下FAR、FRR性能优良
服务好 提供24小时技术支持和全面的ODM定制服务(只需提供规格书)
四、程序分析
在实验代码中我们已经提供了fingermap.c文件,其中对指纹模块的操作进行了封装,用户在使用中只需要调用其中的对应函数就可以实验对应的功能,当然也可以对API进行修改已满足自己的需求.
FPC1011
使用方式
手指按压式
采集原理
反射式电容测量法
采集点阵
152x200pixel(可调)10x14mm
分辨率
363dpi
图像灰度
256级,增强清晰
耐用次数
超强保护层100万次(10年)
工作温度
-20℃~85℃
防静电(ESD)
> 15KV
选用建议
1.产品性能世界领先,适用于高端指纹产品
2.采种较大,适用于锁具、电气控制产品,不适用于小型数码产品
User_erase()删除指纹记录
Command ID:0x22
Command:0x01 0x02 0x22 0xff 0x03
******************************************************************/
void User_erase(unsigned char ucFPIdx);
指纹模块功能:
活体指纹识别
脱机指纹注册(250枚)
脱机指纹比对(1:1、1:N)
可内置应用程序(固件)
可接入任意指纹传感器件(光学、半导体电容、半导体温感、半导体压感、按压式、滑动式)
丰富的接口支持(32位GPIO、SPI、UART、I2C、RF)
指纹模块应用范围:
指纹门锁
指纹保险柜(箱)
指纹文件柜
> 15KV
选用建议
?活体采集技术,防伪性强
(5)TAS5110
TAS5110
(Sensor) (透镜)
使用方式
手指按压式
采集原理
光学CMOS传感
采集点阵
357x293pixel(可调)
分辨率
700dpi
图像灰度
256级
耐用次数
100万次(10年)
工作温度
0℃~60℃
选用建议
1.全球用量最大的光学指纹仪URU选用
3.活体采集技术,防伪性强
(2)SW6888
SW6888
使用方式
手指滑动式
采集原理
半导体电容传感
采集点阵
192x16pixel 0.8x9.8mm
分辨率
500dpi
图像灰度
256级
耐用次数
100万次(10年)
工作温度
-20℃~70℃
防静电(ESD)
> 15KV
选用建议
1.唯一国内设计制造,性价比高,适用于小型数码产品
Set_SecuLv()设置指纹比对时的严格等级(00-04)
Command ID:0x28
协议头协议长度固定字段命令码安全级别协议尾
020401 0228MM02 01 03
******************************************************************/
本指纹模块具有200枚以上指纹存储能力,可扩展到上千枚,具备1秒以内的指纹比对性能,支持1:1和1:N两种比对模式,能够任意兼容各类指纹传感芯片,允许客户内置应用程序,减化应用方案,节省开发成本。
本模块可提供全面的ODM定制服务,时时刻刻、轻轻松满足您的个性化指纹产品需求。
功能用途
指纹模块是嵌入式指纹产品的核心。她面向锁具、安防和工控企业,为他们提供一个“快速应用指纹技术”的硬件平台。在这个平台上,企业只需专注于原有产品,无须关注指纹传感器的接入、指纹注册比对等远离其核心价值的技术,从而在不增加研发成本的同时提升原有产品的应用价值。
电源管理
正常/休眠
Flash RAM
256K
接口
32位GPIO、SPI、UART、I2C、RF
Timer
1个可用
中断
10个可用
指纹模块性能参数:
参数
参数值
参数
参数值
指纹模板大小
360byte
支持的传感器
FPC1011
指纹容量(片内)
250枚
SW6888
识假率FAR
1/10000
ATW200
拒真率FRR
/*****************************************************************
User_enroll()注册用户
Command ID:0x21
Command:0x01 0x02 0x21 0xff 0x03
******************************************************************/
一.准备实验需要的设备。
硬件:试验箱、电源线、串口线、网线、指纹扫描模块、PC机一台。
软件:虚拟机、超级终端、FTP软件。
二.连线方式
将指纹识别模块安装在经典2410DVP试验箱的168扩展槽中。
三.实验原理
指纹模块是面向广阔的锁具市场、保险箱(柜)、安防及工控市场,推出的。她是由32位高性能可编程处理器、活体指纹采集芯片和指纹识别核心固件等构成的一个独立的嵌入式指纹识别系统。
2.目前分辨率较高的指纹传感芯片
3.采集面积大,手指方向任意
4.适用锁具、工控类产品
五、实验步骤
1、测试模块
我们通过串口测试工具compt38_setup.exe对该模块进行测试;
2、双击COM Port Toolkit 3.8出现
单击com port configuration
出现下图,请按照下图配置。
我们输入【2】即可注册一个新用户。
输入【2】后又时会出现如图所示的错误,这是正常现象,多试几次就会有正常的输出。注册的时候指纹需要输入三次才能通过,就像图示一样。
指纹工控设备
指纹遥控器
指纹通关设备
指纹POS机
指纹IC卡读卡器
指纹数码产品
指纹电气开关等
技术规格
指纹模块一般参数:
参数
参数值
参数
参数值
工作电压
3.3V
CPU
32bit
工作电流
75mA / 20uA(Sleep)
内部时钟
80M
工作温度
0℃~70℃
ROM
256K
大小尺寸
35x45mm(可定制)
SRAM
256K
[/mnt/yaffs] mount -t nfs -o nolock 192.168.0.56:/arm2410s /host
[/mnt/yaffs]cd /host/usr/lyj/exp/
[/host/usr/qinguang/exp/]./fingermap
附录1
各款传感器主要参数
(1) FPC1011
020301 012702 01 03
******************************************************************/
void Get_FPNum();
/*****************************************************************
1/1000
LTTSS500
比对时间
< 1秒
TAS5110
比对方式
1:1 / 1:N
安全等级
5级(可调)
注:指纹采集传感器选择请参考附录1。
模块优势
可编程 直接在模块的主控MCU中写入应用程序
兼容性强 能够兼容全球各种指纹传感芯片(光感、电容、电感、温感、压感,滑动式和按压式)(用户可指定)
指纹容量大 片内可存储250枚以上指纹,支持片外扩展
******************************************************************/
void User_clear();
/*****************************************************************
指纹识别原理及模组介绍
指纹识别的背景知识
我们手掌及其手指、脚、脚趾内侧表面的皮肤凸凹不平产生的纹路会形成各种各样的图案。这些纹路的存 在增加了皮肤表面的摩擦力,使得我们能够用手来抓起重物。人们也注意到,包括指纹在内的这些皮肤的纹路在 图案、断点和交叉点上各不相同,也就是说,是唯一的。依靠这种唯一性,我们就可以把一个人同他的指纹对应 起来,通过对他的指纹和预先保存的指纹进行比较,就可以验证他的真实身份。这种依靠人体的身体特征来进行 身份验证的技术称为生物识别技术,指纹识别是生物识别技术的一种
的玻璃表面,反射光线由CCD去获得,反射光的数量依赖于压在玻璃表面指纹的嵴和峪的深度和皮肤与玻璃间的油 脂。光线经玻璃射到峪后(指纹线之间的凹陷部分)反射到CCD—呈现白色,而射到嵴后则不反射到CCD,图像呈现黑 色(确切的是脊上的液体、油脂影响光线的反射路径)。
光学指纹采集技术有明显的优点:价格低廉。缺点:由于要求足够长的光程,因此要求足够大的尺寸,而且过 分干燥和过分油腻的手指识别效果差。
指纹识别应用领域
指纹等生物识别技术可弥补传统的安全认证方法,提供了一个很好的解决方案。可用指纹等生物特征提高安全 性的领域举例: 涉密系统,提供高度安全防范措施 针对大规模人群身份鉴别技术 网络、数据库和关键文件等的安全控制 机密计算机的登录认证 银行ATM,POS终端等的安全认证 手机、平板、PC等使用认证等 移动支付 安全门禁、门锁
指纹识别应用趋势
手机、PAD、安防 屏幕解锁 -更安全快捷 特殊应用程序访问许可 –防止他人或打开你的特殊应用程序 数据和文件安全访问 –防止他人访问你的手机数据 移动支付 –更快捷的完成安全支付 应用程序快捷方式 –给每个手指赋予不同的指令 安防(门锁、保险柜等)
通元微指纹识别模组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。
SFM3050 指纹识别接口板用户指南说明书
BiometricInterface BoardUser Guideelectronic stepsContents1 What You Need to Get Started2 Setting Up the System3 Enroll a Fingerprint4 How to Identify a Fingerprint5 Delete a Fingerprint6 Board Schematic electronic stepsOverviewelectronic stepsThe Biometric Interface Board is a demonstration board for evaluating SFM3050 ngerprint module. Its an expansion board compatible with Microchip Explorer 16 development board.Fingerprint modules are designed to provide biometric security solution to developersand manufacturers for integration with several application, as access control, time attendance,mobile device, safes and so on. FeaturesHigh-end standalone ngerprint module equipped with RS232 interface.EER < 0.1%Enrollment time 700 msec 1:1 Veri cation time 700 msec1:1000 Identi cation time * 830 msecTemplate size 384 Bytes (reducible to 256 bytes)Template standard ISO19794-2, ANSI-378Getting StartedTo get started, an Explorer 16 Development Board is required. The Biometric Interface Board can be attached to the Explorer 16 Development Board through the K1 connector and it was speci callydesigned to be used with PIC24FJ256GB110 PIM.Pag 1Electronicsteps Presenting...1 What You Need to Get StartedAfter power up the board, wait until the presentation ends, or wait 30 seconds for the system to initialize before pressing S4.STEP1STEP2Press S4 to switch from the apresentation to the menu.STEP3If its your rst time to run the aplication, then you have to start to Enroll a nger rst.Please go to the chapter “Enroll a Fingerprint”. If you have already done the enrollment you can start to identify the same nger, by pressing S6.We provide a simple rmware to demonstrate how to Enroll, Verify and Delete a ngerprint into the SFM 3050 module.After you program the demo rmware to PIC24F256GB110 PIM, and atached the Explorer 16 board to the Biometric Interface Board, power up the Explorer 16, and you will see a quick presentation running on the LCD. Please wait until the presentation ends because the module is also initializing during this time.2 Setting Up the system- Biometric Interface Board- Microchip Explorer 16 Development Board - PIC24FJ256GB110 PIM - Demo rmware- PIC Programer to burn the demo rmware into the PIC24F256GB110 PIMelectronic stepsS3 -> Enroll S5 -> DeleteElectronicsteps Presenting...Press S6 toIdentify FingerPag 2S3 -> Enroll S5 -> DeletePlease insert FingerEnroll Fail ErrorFinger Enrolled Success3 Enroll a FingerprintPress S4 until the LCD shows a menu with S3 and S5 options.STEP1STEP2Press S3 to Enroll a ngerprint.STEP3Insert your ngerprint by pressing the sensor module with your nger .STEP4If the LCD shows the message“Finger Enrolled Success” your ngerprint was correctly enrolled in the module.T roubleshootingIf the LCD shows a Error Message, it can be due to a timeout or to a error reading the ngerprint. Go to Step 1 and try again.electronic stepsPag 3Please insert Finger4 How to Identify a FingerprintPress S4 until the LCD shows a menu with S6 option.STEP1STEP2Press S6 to Identify nger .STEP3Insert your ngerprint by pressing the sensor module with your nger .STEP4If the LCD shows the message“Finger Match Success” your ngerprint was correctly identi ed by the module.T roubleshootingIn case you received a “No match” message,it can be due to a timeout , error reading the ngerprint or the nger is diferent from the one you previously Enrolled.Go to Step 1 and try again, or if the nger is diferent you must Enroll rst.Press S6 toIdentify FingerFinger Match SuccessNo match, finger not identifiedelectronic stepsPag 45 Delete a FingerprintPress S4 until the LCD shows a menu withS5 option.STEP1STEP2Press S5 to Delete ngerprint.STEP3If the LCD shows the message “Done Deleting” your ngerprint was correctly deleted by the module.Done Deleting Successelectronic steps S3 -> EnrollS5 -> DeletePag 56 Board Schematicelectronic steps31A 0N BIO201201Pag 6DEVELOPMENT BOARDS - INTERFACE BOARDS - ELECTRONIC KITS - STARTER KITSAll rights reserved. Name and logos are trademarks of STEPTRONIC Lda. All othertrademarks and services marks are the property of theirs owners.electronic steps。
指纹识别命令 详解
(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。
这就是发送一个命令介绍,其它的类似,请用户自己参考说明书。
请注意,用户最好不要随意更改地址和口令,除非需要,否则不要更改,以免您记不住,或者更改错误,就需要返厂维修了(重新下载程序)。
指纹识别模块说明书
指纹识别模块实验注:此说明书适用于EL-EMCU-I实验箱、EXP-89S51/52/53CPU板。
一、实验目的掌握指纹模块的开发协议;掌握16C550芯片的编程方法;二、实验设备计算机,KEIL UVISION2环境,EL-EMCU-I实验箱,直连串口电缆、交叉串口电缆(针对针),导线,短接块。
三、基本原理指纹识别模块采用MCU和PC两种控制方法,供用户灵活选用。
其指纹模块采用深圳十指科技的TF-MD-M12开发模块,MCU端的外围电路由通过芯片16C550芯片进行并口到串口的转换,PC端的外围电路用MAX3232控制,模块的电源由实验箱上的接口插座提供。
下面将具体介绍一下各部分的组成及其原理。
TF-MD-M12开发模块的功能特点:◇先进的指纹识别算法(商业);◇高速算法,500人指纹只要0.43 秒;◇1:N,1:1 比对(两种可选);◇用户可分多级权限管理(1、2、3);◇多级的安全级别自主设置,可更多应用于不同场所;◇采用高精密的光学成像元件,识别准确;◇体积小,电路只有:40*58mm,易于集成;◇功能高度集成,存于DSP中,不用再加电路板;◇标准接口协议,开发简单;◇采用面光源,成像速度快;◇内部采用高级数字处理器DSP,处理速度快;◇识别率高,最高可达:0.00001% ;◇稳定性好,四年不断升级和优化;◇具低电压报警功能;◇微功耗设计适于电池供电;◇主板低频设计抗外部电磁干扰;◇主要供外销厂家和集成商,开发和集成产品;◇设计精巧适于嵌入指纹锁/小指纹门禁机/手持指纹识别设备;TF-MD-M12开发模块的主要性能指标:◇电路板尺寸(mm)58×40◇采集头分辨率500DPI◇指纹容量80 枚◇比对时间<1 秒◇认假率0.0001%◇拒真率0.01%◇动态电流<140mA◇待机电流<18µA◇工作电压5-7.5V其开发协议请用户参见随程序附带的TF-MD-M1开发协议PDF文档。
指纹识别模块指导
准备实验需要的设备。
硬件: 试验箱、电源线、串口线、网线、指纹扫描模块、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指纹识别模块用户手册
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. 电容式指纹模块的主要组成部分电容式指纹模块是通过感应和测量指纹的电容变化来实现指纹识别的。
它主要由以下几个基本组成部分组成:3.1 指纹传感器指纹传感器是电容式指纹模块的核心部件之一,它用来感应指纹的电容变化。
指纹传感器通常采用一种特殊的材料作为感应电极,这种材料能够在接触到指纹时产生电容变化。
指纹传感器的表面通常采用一层特殊的涂层,能够增加指纹与传感器之间的接触面积,提高电容变化的敏感度。
3.2 信号处理电路信号处理电路是负责接收、放大和处理指纹传感器输出的电信号的电路。
它通常包括模拟信号处理电路和数字信号处理电路两部分。
模拟信号处理电路负责对指纹传感器输出的模拟信号进行放大、滤波等处理,将其转换成适合数字信号处理电路处理的信号。
数字信号处理电路负责对模拟信号进行数字化处理,包括滤波、增强、特征提取等。
3.3 控制电路与接口控制电路与接口主要负责指纹模块与外部设备之间的通信和控制。
它通常包括微处理器、存储器、通信接口等。
指纹识别模块程序及原理图
程序:#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define Dbus P0#define buffer1ID 0x01#define buffer2ID 0x02#define queren 0x88#define tuichu 0x84#define shanchu 0x82sbit B0=B^0;sbit B7=B^7;sbit jidianqi=P3^6;sbit RS=P2^2;sbit RW=P2^1;sbit E1=P2^0;sbit LEDK=P3^4; //控制背光sbit SCLK=P2^3;sbit IO=P2^5;sbit RST=P2^4;uchar code ta[8]={0x00,0x51,0x09,0x10,0x05,0x02,0x11,0xbe}; uchar data a[7]; // 秒分时日月星期年uchar dz[4]; //存键输入值uchar mima[7];uchar mimaID[6]={1,2,3,4,5,6};uchar data K;uchar data Key;uint PageID;uchar data querenma;uchar sum[2];int summaf,summas;uchar code nian[]={"年"};uchar code yue[]={"月"};uchar code ri[]={"日"};uchar code xinqi[]={"星期"};uchar code mao=0x3a;unsigned char code text1[]={" 请按指纹"};unsigned char code text2[]={" 请再次按指纹"};unsigned char code text3[]={" 指纹采集成功"};unsigned char code text4[]={"请按任意键继续"};unsigned char code text5[]={" 指纹采集失败"};unsigned char code text6[]={"输入删去的指纹号"};unsigned char code text7[]={" 删指纹号成功"};unsigned char code text8[]={"按键一:增加指纹"};unsigned char code text9[]={"按键二:删去指纹"};unsigned char code text10[]={" 请重新按指纹"};unsigned char code text11[]={"清空指纹库成功"};unsigned char code text12[]={" 没搜索到指纹"};unsigned char code text13[]={"请先按键再刷指纹"};unsigned char code text14[]={" 请重新操作"};unsigned char code text15[]={" 删去失败"};unsigned char code text16[]={" 接收包出错"};unsigned char code text17[]={" 编号为:"};unsigned char code text18[]={"指纹已找到请进"};unsigned char code text19[]={" 该指纹已存储"};unsigned char code text20[]={" 请输入密码"};unsigned char code text21[]={" 密码错误"};unsigned char code text22[]={"按键三:更新密码"}; // @@@ unsigned char code text23[]={"请再次输入密码"};unsigned char code text24[]={"两次输入的密码不"};unsigned char code text25[]={"一致,请重新操作"};unsigned char code text26[]={" 密码更新成功"};另外:void delay(uint tt){ uchar i;while(tt--){for(i=0;i<125;i++);}}void initialize51(){SCON= 0x50; //串口方式1 //REN=1; 允许接收PCON=0x80; //SMOD=1TMOD= 0x20; //定时器1定时方式2TH1= 0xff; //11.0592MHz 模块默认波特率为57600bps TL1= 0xff;TR1= 1; //启动定时器}unsigned char Keycan(void) //按键扫描程序P1.0--P1.3为行线P1.4--P1.7为列线{unsigned char rcode, ccode;P1 = 0xF0; // 发全0行扫描码,列线输入if((P1&0xF0) != 0xF0) // 若有键按下{delay(1);// 延时去抖动if((P1&0xF0) != 0xF0){ rcode = 0xFE; // 逐行扫描初值while((rcode&0x10) != 0){P1 = rcode; // 输出行扫描码if((P1&0xF0) != 0xF0) // 本行有键按下{ccode = (P1&0xF0)|0x0F;//do{;}while((P1&0xF0) != 0xF0); //等待键释放return ((~rcode) + (~ccode)); // 返回键编码}elsercode = (rcode<<1)|0x01; // 行扫描码左移一位}}}return 0; // 无键按下,返回值为0}void KeyDeal(unsigned char Key){ //unsigned char n;if(Key!=0){switch(Key){case 0x11: K=1; break;case 0x21: K=2; break;case 0x41: K=3; break;case 0x81: break; //K=funguanliyuan;case 0x12: K=4; break;case 0x22: K=5; break;case 0x42: K=6; break;case 0x82: K=34;break; //K=funshanchu;case 0x14: K=7; break;case 0x24: K=8; break;case 0x44: K=9; break;case 0x84: break; //K=funtuichu;case 0x18: break; //K=shuazhiwencase 0x28: K=0; break;case 0x48: break;case 0x88: break; //K=funqueren;default: break;}}}//*************************************//12864//读12864忙void ReadBusy(void){unsigned char ch;cheak:Dbus=0xff;RS=0;RW=1;E1=1;ch=Dbus;E1=0;ch=ch|0x7f;if(ch!=0x7f)goto cheak;}//向LCD写命令void WriteCommand(uchar command){ReadBusy();RW=0;Dbus=command;E1=1;E1=0;}//向LCD写数据void WriteData(uchar Lcd_data){ReadBusy();RS=1;RW=0;Dbus=Lcd_data;E1=1;E1=0;}//清屏函数清DDRAMvoid Clrram (void){WriteCommand(0x01);}//LCD12864初始化程序void Lcd_int(){WriteCommand(0x30); //30---基本指令动作WriteCommand(0x0c); //开显示,关游标WriteCommand(0x01); //清屏,地址指针指向00HWriteCommand(0x02);}//LCD12864显示时间void playtime(){uchar i,n3,n4,y1,y2,r1,r2,s1,s2,f1,f2,m1,m2;WriteCommand(0x80); //指定第一行显示位置for(i=0;i<16;i++)WriteData(text13[i]); //显示LCD12864并行显示n3=a[6]>>4; n4=a[6]&0x0f;WriteCommand(0x90); //指定第二行显示位置WriteData(0x32);WriteData(0x30);WriteData(0x30+n3);WriteData(0x30+n4);for(i=0;i<2;i++) WriteData(nian[i]);y1=a[4]>>4; y2=a[4]&0x0f;WriteData(0x30+y1);WriteData(0x30+y2);for(i=0;i<2;i++) WriteData(yue[i]);r1=a[3]>>4; r2=a[3]&0x0f;WriteData(0x30+r1);WriteData(0x30+r2);for(i=0;i<2;i++)WriteData(ri[i]);WriteCommand(0x88); //指定第三行显示位置for(i=0;i<4;i++)WriteData(xinqi[i]);WriteData(a[5]+0x30);s1=a[2]>>4;s2=a[2]&0x0f; f1=a[1]>>4;f2=a[1]&0x0f; m1=a[0]>>4;m2=a[0]&0x0f;WriteCommand(0x98); //指定第四行显示位置WriteData(0x30+s1);WriteData(0x30+s2);WriteData(mao);WriteData(0x30+f1);WriteData(0x30+f2);WriteData(mao);WriteData(0x30+m1);WriteData(0x30+m2);}//*************************************//12864//*********************************//ds1302控制uchar r1302() //读数据ds1302{ uchar i;for(i=0;i<8;i++){B>>=1;B7 = IO;SCLK=1;SCLK=0;}return B;}void w1302(uchar co) // 写ds1302 单字节{uchar i;B = co;for(i=0;i<8;i++){IO = B0; //原来是使用ACC寄存器,但不行,后改使用B寄存器后才正常运行???SCLK=1;SCLK=0;B>>=1;}}void w(uchar a, uchar d) //寻址,写数{RST = 0;SCLK = 0;RST = 1;w1302(a);w1302(d);SCLK = 1;RST = 0;}uchar r(uchar a) //寻址,读数{uchar r;RST = 0;SCLK = 0;RST = 1;w1302(a);r=r1302();SCLK = 1;RST = 0;return r;}void wclo(uchar *p) //写多字节ds1302 {uchar i;w(0x8e,0x00); //写允许RST=0;SCLK=0;RST=1;w1302(0xbe); //写多字节命令for(i=0;i<8;i++)w1302(*(p+i)); //写时钟数据w(0x00,0x50); //??? 启动定时器SCLK=1;RST=0;}void rclo(uchar *p) //读出多字节ds1302 {uchar i;RST=0;SCLK=0;RST=1;w1302(0xbf);for(i=0;i<7;i++)*(p+i) = r1302(); //读出时钟数据SCLK=1;RST=0;}//***************************************//void SFG_getimage() //录入指纹图像{uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;TI=0;summaf=0x05;SBUF=summaf;while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_genchar(uchar bufferID) //生成特征并存于charbuffer1/2 调用后单片机波特率变化@@@ {uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X04;while(TI==0);TI=0;SBUF=0X02;while(TI==0);TI=0;SBUF=bufferID;while(TI==0);TI=0;summaf=0x07+bufferID; sum[0]=summaf;sum[1]=summaf>>8; SBUF=sum[1];while(TI==0)TI=0;SBUF=sum[0];while(TI==0)TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF; while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_regmodel() //合并生成模板{uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X05;while(TI==0);TI=0;SBUF=0X00;while(TI==0);summaf=0x09;SBUF=summaf; //校验和while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_storechar(uint pageID) //储存模板ID=1010也储存成功ID>=1011 querenma=0x18?@@@{uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X06;while(TI==0);TI=0;SBUF=0X06;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;ID1=pageID;ID2=pageID>>8; SBUF=ID2;while(TI==0);TI=0;SBUF=ID1;while(TI==0);TI=0;summaf=0x0e+ID1+ID2; sum[0]=summaf;sum[1]=summaf>>8;SBUF=sum[1];while(TI==0);TI=0;SBUF=sum[0];while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_empty() //清空指纹库{uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X0d;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;summaf=0x11;SBUF=summaf;while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_fastsearch(uchar bufferID) //搜索指纹返回指纹ID号sum、pagenum>255都会使程序卡@@@ {uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X08;while(TI==0);TI=0;SBUF=0X1b;while(TI==0);TI=0;SBUF=bufferID;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=180;while(TI==0);TI=0;summaf=9+0x1b+bufferID+180; sum[0]=summaf;sum[1]=summaf>>8;SBUF=sum[1];TI=0;SBUF=sum[0];while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;ID1=SBUF;while(RI==0);RI=0;ID2=SBUF; //接收到的ID号while(RI==0);RI=0;while(RI==0);RI=0;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];//PageID=ID1;PageID=(ID1<<8)+ID2;}void SFG_enroll() //自动注册模板返回存储ID =录图像+合并生成模板+储存模板{uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X10;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;summaf=0x14;SBUF=summaf; //校验和while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);querenma=SBUF;while(RI==0);RI=0;ID1=SBUF;while(RI==0);RI=0;ID2=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];//PageID=ID1;PageID=(ID1<<8)+ID2;}void SFG_deletchar(uint pageID) //删除指纹校验和在2字节的页码处应分高低字节相加{uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);SBUF=0X00;while(TI==0);TI=0;SBUF=0X07;while(TI==0);TI=0;SBUF=0X0c;while(TI==0);TI=0;ID1=pageID;ID2=pageID>>8; SBUF=ID2;while(TI==0);TI=0;SBUF=ID1;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=1;while(TI==0);TI=0;summaf=0x15+ID1+ID2; sum[0]=summaf;sum[1]=summaf>>8;SBUF=sum[1];while(TI==0);TI=0;SBUF=sum[0];while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_writereg(uchar N) //设置波特率{uchar i;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X05;while(TI==0);TI=0;SBUF=0X0e;while(TI==0);TI=0;SBUF=4;while(TI==0);TI=0;SBUF=N;while(TI==0);TI=0;summaf=0x1a;sum[0]=summaf;sum[1]=0;SBUF=sum[1];while(TI==0);TI=0;SBUF=sum[0];while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];}void SFG_identify() //自动验证指纹录图像+生成特征+搜索{uchar i,ID1,ID2;SBUF=0xef;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0XFF;while(TI==0);TI=0;SBUF=0X01;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;SBUF=0X03;while(TI==0);TI=0;SBUF=0X11;while(TI==0);TI=0;SBUF=0X00;while(TI==0);TI=0;summaf=0x15;SBUF=summaf; //校验和while(TI==0);TI=0;for(i=0;i<9;i++){while(RI==0);RI=0;}while(RI==0);RI=0;querenma=SBUF;while(RI==0);RI=0;ID1=SBUF;while(RI==0);RI=0;ID2=SBUF;while(RI==0);RI=0;while(RI==0);RI=0; //得分while(RI==0);RI=0;sum[1]=SBUF;while(RI==0);RI=0;sum[0]=SBUF;summas=(sum[1]<<8)+sum[0];//PageID=ID1;PageID=(ID1<<8)+ID2;}void shuazhiwen(){uchar i,IDs1,IDs2,IDs3;Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text1[i]); //显示LCD12864并行显示请按指纹//SFG_getimage();//SFG_genchar(1);//SFG_fastsearch(1);SFG_identify();while(querenma==2)SFG_identify();if(querenma==0){Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text18[i]); //显示LCD12864并行显示指纹通过门已开IDs1=PageID/100;IDs2=PageID/10%10;IDs3=PageID%10;WriteCommand(0x88); //指定第三行显示位置for(i=0;i<10;i++)WriteData(text17[i]); //显示LCD12864并行显示编号为:WriteData(0x30+IDs1);WriteData(0x30+IDs2);WriteData(0x30+IDs3);jidianqi=0; //开门}else if(querenma==9){Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text12[i]); //显示LCD12864并行显示没搜索到指纹}else{Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text16[i]); //显示LCD12864并行显示接收包出错}WriteCommand(0x98); //指定第四行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}void addfinger(){uchar i,IDa1,IDa2,IDa3;Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text1[i]); //显示LCD12864并行显示请按指纹SFG_getimage();while(querenma!=0)SFG_getimage();SFG_genchar(buffer1ID);initialize51();SFG_fastsearch(buffer1ID);while(querenma==1)SFG_fastsearch(buffer1ID);if(querenma==0){Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text19[i]); //显示LCD12864并行显示该指纹已存储WriteCommand(0x98); //指定第四行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}else if(querenma==9){Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text2[i]); //显示LCD12864并行显示请再次按指纹SFG_enroll();while(querenma==2)SFG_enroll();Clrram();if(querenma==0){IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text3[i]); //显示LCD12864并行显示指纹采集成功WriteCommand(0x88); //指定第三行显示位置for(i=0;i<10;i++)WriteData(text17[i]); //显示LCD12864并行显示编号为:pgaeID WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);}else if(querenma!=0){WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text5[i]); //显示LCD12864并行显示指纹采集失败WriteCommand(0x88); //指定第三行显示位置for(i=0;i<16;i++)WriteData(text14[i]); //显示LCD12864并行显示请重新采集}WriteCommand(0x98); //指定第四行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}Clrram();}void deletfinger(){uchar i,j=0;Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text6[i]); //显示LCD12864并行显示请输入删去的指纹号for(i=0;i<5;i++)dz[i]=0; //不输入时会默认为000 @@@Key=Keycan();while(Key!=queren){Key=Keycan();KeyDeal(Key);delay(30); //按键有抖动@@@if(Key==0)K=10;if((K>=0)&&(K<=9)){dz[j]=K;if(j<3){WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x30+dz[j]);}++j;if(j==4)j=3; //@@#yinhuang} //显示LCD12864并行显示if(K==34) //按了删除键{if(j==0){WriteCommand(0x88); //指定第三行显示位置WriteData(0x20);}else{--j;WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x20);}}}if(j>=2)PageID=dz[2]+dz[1]*10+dz[0]*100;if(j==1)PageID=dz[1]+dz[0]*10;if(j==0)PageID=dz[0];SFG_deletchar(PageID);if(querenma==0){Clrram();WriteCommand(0x90); //指定第二行显示位置显示删除成功for(i=0;i<16;i++)WriteData(text7[i]); //显示LCD12864并行显示}else{Clrram();WriteCommand(0x90); //指定第二行显示位置显示删除失败for(i=0;i<16;i++)WriteData(text15[i]); //显示LCD12864并行显示}WriteCommand(0x88); //指定第三行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);Clrram();}void gaimima(){uchar i,j,mima1[6],mima2[6];Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text20[i]); //显示LCD12864并行显示请输入密码for(i=0;i<6;i++)mima1[i]=0;Key=Keycan();while(Key!=queren){Key=Keycan();KeyDeal(Key);delay(30);if(Key==0)K=10;if((K>=0)&&(K<=9)){mima1[j]=K;if(j<6){WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x0f);}++j;if(j==7)j=6; //@@#yinhuang } //显示LCD12864并行显示if(K==34) //按了删除键{if(j==0){WriteCommand(0x88); //指定第三行显示位置WriteData(0x20);}else{--j;WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x20);}}}Clrram();Clrram();j=0;WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text23[i]); //显示LCD12864并行显示请再次输入密码for(i=0;i<6;i++)mima2[i]=0;Key=Keycan();while(Key!=queren){Key=Keycan();KeyDeal(Key);delay(30);if(Key==0)K=10;if((K>=0)&&(K<=9)){mima2[j]=K;if(j<6){WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x0f);}++j;if(j==7)j=6; //@@#yinhuang} //显示LCD12864并行显示if(K==34) //按了删除键{if(j==0){WriteCommand(0x88); //指定第三行显示位置WriteData(0x20);}else{--j;WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x20);}}}Clrram();if((mima1[0]==mima2[0])&&(mima1[1]==mima2[1])&&(mima1[2]==mima2[2])&&(mima1[3]==mima2[3 ])&&(mima1[4]==mima2[4])&&(mima1[5]==mima2[5])){for(i=0;i<6;i++)mimaID[i]=mima1[i];WriteCommand(0x80); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text26[i]); //显示LCD12864并行显示密码更新成功WriteCommand(0x88); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}else{WriteCommand(0x80); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text24[i]); //显示LCD12864并行显示两次输入的密码不WriteCommand(0x90); //指定第三行显示位置for(i=0;i<16;i++)WriteData(text25[i]); //显示LCD12864并行显示一致,请重新操作WriteCommand(0x88); //指定第四行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}Clrram();}void guanliyuan(){ uchar i,j;Clrram();WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text20[i]); //显示LCD12864并行显示请输入密码for(i=0;i<6;i++)mima[i]=0;Key=Keycan();while(Key!=queren){Key=Keycan();KeyDeal(Key);delay(30);if(Key==0)K=10;if((K>=0)&&(K<=9)){mima[j]=K;if(j<6){WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x0f);}++j;if(j==7)j=6; //@@#yinhuang} //显示LCD12864并行显示if(K==34) //按了删除键{if(j==0){WriteCommand(0x88); //指定第三行显示位置WriteData(0x20);}else{--j;WriteCommand(0x88+j); //指定第三行显示位置WriteData(0x20);}}}Clrram();if((mima[0]==mimaID[0])&&(mima[1]==mimaID[1])&&(mima[2]==mimaID[2])&&(mima[3]==mimaID[3])&& (mima[4]==mimaID[4])&&(mima[5]==mimaID[5])){while(Keycan()!=tuichu){WriteCommand(0x90); //指定第二行显示位置按键1:增加指纹for(i=0;i<16;i++)WriteData(text8[i]); //显示LCD12864并行显示WriteCommand(0x88); //指定第三行显示位置按键2:删除指纹for(i=0;i<16;i++)WriteData(text9[i]); //显示LCD12864并行显示WriteCommand(0x98); //指定第三行显示位置按键3:改密码for(i=0;i<16;i++)WriteData(text22[i]); //显示LCD12864并行显示KeyDeal(Keycan());switch(K){case 1: addfinger();K=6; break;case 2: deletfinger(); break;case 3: gaimima(); break;default: break;}}}else{WriteCommand(0x90); //指定第二行显示位置for(i=0;i<16;i++)WriteData(text21[i]); //显示LCD12864并行显示密码错误WriteCommand(0x88); //指定第三行显示位置for(i=0;i<16;i++)WriteData(text4[i]); //显示LCD12864并行显示请按任意键继续while(Keycan()==0);}Key=0;}void main(){initialize51();LEDK=0;Lcd_int();Clrram();wclo(ta);delay(100);//SFG_empty();///@@@@//SFG_deletchar(255);//SFG_storechar(1011);//SFG_fastsearch(1);// WriteCommand(0x90); //指定第二行显示位置// WriteData(0x30+((0xf0&querenma)>>4));WriteData(0x30+(0x0f&querenma));while(1){Key=Keycan();if(Key==0x18) //指纹刷机{Clrram();shuazhiwen();Clrram();}if(Key==0x81) //管理员操作{Clrram();guanliyuan();Clrram();}rclo(a); playtime(); delay(100); jidianqi=1; }}。
FPC1020指纹模块用户使用手册
IDWD1020指纹识别模块用户手册IDWD1020 Fingerprint Module User’s Guide(Ver 1.1)北京艾迪沃德科技发展有限公司2014年6月第二版目录(一)概述 (1)(二)通讯协议 (2)2.1通讯处理过程 (2)2.2通讯包P ACKET 的分类 (3)2.2.1命令包Command packet (3)2.2.2响应包Response packet (3)2.2.3指令/响应的数据包Data Packet (3)2.3通讯包的帧结构 (4)2.3.1通讯包Parket识别代码 (4)2.3.2命令包(Command packet )的帧结构 (4)2.3.3响应包(Response packet)的帧结构 (5)2.3.4指令数据包(Command Data Packet)的帧结构 (5)2.3.5响应数据包(Response data packet)的帧结构 (6)(三)通讯命令(COMMAND )综述 (7)3.1指纹特征模板(T EMPLATE R ECORD)的数据结构 (7)3.2命令列表(C OMMAND L IST ) (7)(四)各通讯命令(COMMAND)详细说明 (9)4.1连接测试(CMD_TEST_CONNECTION) (9)4.2设置参数(CMD_SET_PARAM) (10)4.3读取参数(CMD_GET_PARAM) (13)4.4读取设备信息(CMD_DEVICE_INFO) (14)4.5使模块进入IAP模式(CMD_ENTER_IAP_MODE) (15)4.6采集指纹图像(CMD_GET_IMAGE) (16)4.7检测手指(CMD_FINGER_DETECT) (17)4.8上传指纹图像到主机(CMD_UP_IMAGE_CODE) (18)4.9下载指纹图像到模块(CMD_DOWN_IMAGE) (20)4.10控制采集器背光灯(CMD_SLED_CTRL)开/关 (22)4.11保存指纹模板数据到模块指纹库(CMD_STORE_CHAR) (23)4.12读取指纹库中的指纹并暂存在指定的R AM B UFFER中(CMD_LOAD_CHAR) (24)4.13将暂存在R AM B UFFER中的指纹模板上传到主机(CMD_UP_CHAR) (25)4.14下载指纹模板数据到模块指定的R AM B UFFER(CMD_DOWN_CHAR) (26)4.15删除指定编号范围内的指纹(CMD_DEL_CHAR) (28)4.16获取指定编号范围内可注册的首个编号(CMD_GET_EMPTY_ID) (29)4.17检查指定的编号是否已被注册(CMD_GET_STATUS) (30)4.18检查指定编号范围内的指纹库是否有数据损坏(CMD_GET_BROKEN_ID) (31)4.19获取指定编号范围内已注册的指纹总数(CMD_GET_ENROLL_COUNT) (32)4.20从暂存在I MAGE B UFFER中的指纹图像产生模板(CMD_GENERATE) (33)4.21合成指纹模板数据用于入库(CMD_MERGE) (34)4.22指定2个R AM B UFFER之间的模板做比对(CMD_MATCH) (35)4.23指定编号范围的1:N识别(CMD_SEARCH) (36)4.24指定R AM B UFFER与指纹库中指定编号的模板比对(CMD_VERIFY) (37)4.25设置模块序列号(CMD_SET_MODULE_SN) (38)4.26读取模块序列号(CMD_GET_MODULE_SN) (40)4.27取消采集指纹(CMD_FP_CANCEL) (41)4.28获取已注册ID列表(CMD_GET_ENROLLED_ID_LIST) (42)4.29进入休眠状态(CMD_ENTER_STANDBY_STATE) (44)4.30通讯错误返回(I NCORRECT C OMMAND) (45)4.31注意事项 (45)(五)响应(RESPONSE)及错误代码表(ERROR CODE) (46)(六)登记及比对流程图 (47)6.1光学及面阵式半导体指纹采集器模块的注册流程(E NROLL P ROCESS) (47)6.2滑动采集器模块的注册流程(E NROLL P ROCESS) (48)6.3光学及面阵式半导体采集器模块的验证及识别流程(V ERIFY &I DENTIFY) (49)6.4滑动采集器模块指纹验证和识别流程(V ERIFY &I DENTIFY ) (50)(七)硬件描述 (51)7.1主处理板尺寸 (51)7.2指纹传感器尺寸图..................................... 错误!未定义书签。
