
指纹识别模块录入程序.pdf
25页1 指纹识别模块录入程序如下: #include #include sbit relay =P2^1; //继电器引脚 sbit buzzer=P2^0; //蜂鸣器引脚 sbit led=P2^2; sbit led1=P1^0; sbit k2=P3^2; //录入一次指纹 sbit k1=P3^3; //模式识别转换 sbit k3=P3^4; //清除所有指纹(10 个指纹清除) sbit rs=P2^5; sbit lcden=P2^7; sbit wr=P2^6; //sbit ks=P1^0; //sbit er=P1^1; //sbit km=P2^2; //sbit jb=P1^3; #define Max_User 10 #define error 2 #define uint unsigned int #define uchar unsigned char unsigned char SaveNumber=0,searchnum=0; unsigned int SearchNumber=0; unsigned int clk0=0; unsigned char str[3]={0,'\0','\0'}; uchar table1[]=“Please“; uchar table2[]=“Input fingerprint“; uchar table3[]=“Then door is“; uchar table4[]=“already open“; uchar table5[]=“Error Waring “; uchar table8[]=“Door security“; //门禁系统 bit modeflag=0,clearallflag=0,changeflag=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 :根据原始图像生成指纹特征1 unsigned char code GENT1[14]={13,0X01 ,0Xff,0xff,0xff,0xff,0x01,0,4,2,1,0x00,0x08}; // 回送 12 个 //Gen Templet2 :根据原始图像生成指纹特征2 unsigned 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 个 2 //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 Note unsigned char code RDNT[14]={13,0X01 ,0Xff,0xff,0xff,0xff, 0x01, 0,4,0x19, 0, 0x00,0x1e}; //Clear Note unsigned 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 templet unsigned 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; xdata unsigned char FIFO[MAX_NUMBER+1]={0}; /*********1毫秒延时程序**********/ void delay1ms(unsigned int t) { unsigned int i,j; for(i=0;i=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]; if(checksum!=FIFO[count] //校验失败 , 置结果标志为0 else result=TURE; flag=0; break; } } } } }/////////////////////////////do的内容 ----------------结束 //////////////////////////////// while ((clk0=2)//如果不成功,再验证一次,如果两次不成功,返回失败 { return(0); } } } void Clear_All(void) //清空指纹库 { delay1ms(200); Command(DELE_all,50); //清空指纹库 } unsigned char ImgProcess(unsigned char BUFID) //发获取图像并生成特征文件,存入BUFID 中// 输入参数为缓冲区号 { if(Command(GIMG,89) } else { return 0; } } else if(BUFID==2) { if(Command(GENT2,60) } else { return 0; } } } else { return 0; } return 0; } bit Searchfinger(void)//搜索指纹 ( 发送搜索命令、以及根据返回值确定是否存在) 6 { if( Command(SEAT,60) //搜索到的页码 //MatchScore=FIFO[12]*0x100+FIFO[13] 可以在此计算得分,从而进行安全级别设 定,本程序忽略 return 1; } else { return 0; } } unsigned char search(void)//搜索用户 { unsigned char SearchBuf=0,i=0; while (i=40)//如果采集了40 次,还不成功, 直接采集失败, 直接退出enroll 函数----返回0 return(0); } } } // 采集第一个特征成功 count=0; buzzer=0; delay1ms(100); buzzer=1; delay1ms(2000);//延时 2S 开始采集下一个特征 // 开始采集第二个特征 while(1) { temp=ImgProcess(2); //生成特征2 if (temp==1)//生成特征文件2 成功 { if ( (Command(MERG,40) } else//特征文件合并生成模板,结果存于ModelBuffer { buzzer=0; delay1ms(100); buzzer=1; delay1ms(100); buzzer=0; delay1ms(100); //响两声,表示生成一个模板成功 buzzer=1; return 1; } } else { if (temp==1)//采集指纹没有成功 { count++; if (count=25) 8 return(0); } } } } /***********************/ void delay(uint x) { uint a,b; for(a=x;a0;a--) for(b=10;b0;b--); } void write_com(uchar com) // 些命令, RS=0 { wr=0; P0=com; rs=0; lcden=0; delay(10); lcden=1; delay(10); lcden=0; } void write_data(uchar dat) //写数据, RS=1 { wr=0; P0=dat; rs=1; lcde。
