指纹识别模块单
- 格式:doc
- 大小:56.00 KB
- 文档页数:34
通元微指纹识别模组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开发环境下编写程序实现对指纹模块的完整操作。
指纹模块应用方案指纹模块是一种集成指纹采集、图像处理、特征提取和特征匹配等功能的模块。
它通过扫描和记录指纹图像,将指纹特征提取出来,并与预先存储的指纹特征进行匹配,从而实现指纹识别的功能。
指纹模块可以应用在各个领域,下面将介绍几种常见的指纹模块应用方案。
1.门禁系统应用方案:指纹模块可以应用在门禁系统中,通过与门禁控制器相连接,实现对门禁设备的指纹识别功能。
用户可以通过注册指纹信息,并将其存储在门禁控制器中,然后通过将手指放在指纹模块上,进行指纹识别验证,验证通过后门禁设备会打开。
2.安防监控系统应用方案:指纹模块可以应用在安防监控系统中,用于对监控设备进行身份识别。
例如,在一些需要限制访问权限的区域,只有特定人员的指纹信息被授权后才能进入,其他人员的指纹信息无法通过验证。
3.个人设备解锁应用方案:指纹模块可以应用在个人设备上,例如手机、平板电脑和笔记本电脑等,用于对设备进行解锁。
用户可以通过在设备上注册指纹信息,然后使用指纹进行解锁而无需输入密码或图案解锁。
这种方案不仅方便了用户,还提高了设备的安全性。
4.银行和金融领域应用方案:指纹模块可以应用在银行和金融领域,用于对用户进行身份验证。
用户在办理账户或进行交易时,可以通过指纹识别进行身份验证,确保账户的安全性和交易的合法性。
5.医疗健康领域应用方案:指纹模块可以应用在医疗健康领域,用于对患者和医务人员进行身份验证。
例如,医院可以使用指纹模块来验证医务人员的身份,以确保只有授权人员才能进入特定区域,或者通过指纹识别验证患者的身份,以确保医疗记录和处方的安全性。
除了以上几种常见的应用方案外,指纹模块还可以应用在各个领域的人员考勤、员工管理、数据加密等方面。
指纹模块的应用方案可以根据实际需求进行定制和开发,以满足不同场景下的指纹识别需求。
指纹模块分类-回复什么是指纹模块?指纹模块,也称为指纹识别模块,是一种使用生物特征技术来识别个体身份的装置。
指纹模块采用指纹传感器和图像处理技术,通过对指纹图像的扫描与比对,实现对个体身份的确认。
它被广泛应用于安全门禁、智能手机、电脑登录、银行金库等场合,取代了传统的密码和钥匙,提供了更加便捷和安全的身份验证方式。
指纹模块的分类主要有以下几种:1. 触控式指纹模块:触控式指纹模块是指通过用户的手指直接触摸指纹传感器来采集指纹图像。
这种模块使用静电感应技术或光电技术来感知指纹的模式和细节。
触控式指纹模块最常用于移动设备中,如智能手机和平板电脑,提供了便捷的指纹解锁和支付功能。
2. 非触控式指纹模块:非触控式指纹模块是通过用户将手指放在传感器上方,无需直接接触传感器即可采集指纹图像。
这种模块通常使用光学和超声波技术来捕捉指纹的细节,具有更高的采集速度和准确度。
非触控式指纹模块常用于门禁和安全监控系统中,提供了高效的识别和验证功能。
3. 二合一指纹模块:二合一指纹模块是指同时具备触控式和非触控式指纹识别功能的模块。
这种模块结合了两种技术的优点,能够适应不同的应用场景和用户需求。
二合一指纹模块常用于金库存取、重要文件保管和高端安防系统中,提供了多重验证和防护措施。
4. 指纹模块芯片:指纹模块芯片是指将指纹传感器和图像处理器集成在一个封装中的集成电路。
这种模块芯片具有更小的尺寸和低功耗的特点,广泛应用于各种小型电子设备中。
指纹模块芯片不仅具备指纹识别功能,还可以与其他传感器和处理器进行数据交互,实现更多的智能化和功能扩展。
除了以上分类,还有其他一些指纹模块的衍生产品,如指纹锁、指纹门铃等。
这些产品使用了指纹模块的识别技术,通过对指纹信息的比对和验证,实现了智能门禁和个性化设定等功能。
总结起来,指纹模块主要分为触控式、非触控式、二合一和芯片等几种类型。
每种类型都有其特定的应用场景和优势,选择适合的指纹模块可以提供更加安全、便捷和智能的身份验证体验。
指纹识别模块单片机程序#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次,如果没有一次成功,表示模块通信不正常。