指纹识别模块程序及原理图.doc

收藏

预览图
编号:40509457    类型:共享资源    大小:243.50KB    格式:DOC    上传时间:2020-01-14 上传人:精*** IP属地:广东
28
积分
关 键 词:
指纹识别 模块 程序 原理图
资源描述:
______________________________________________________________________________________________________________ 程序: #include #include #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 0x82 sbit 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=1 TMOD= 0x20; //定时器1定时方式2 TH1= 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)); // 返回键编码 } else rcode = (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=shuazhiwen case 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; } //清屏函数清DDRAM void Clrram (void) { WriteCommand(0x01); } //LCD12864初始化程序 void Lcd_int() { WriteCommand(0x30); //30---基本指令动作 WriteCommand(0x0c); //开显示,关游标 WriteCommand(0x01); //清屏,地址指针指向00H WriteCommand(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; while(TI==0); 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; while(TI==0); 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); 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); 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); 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]; 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; 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; 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=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); 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); 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 @@@
内容简介:
-
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:指纹识别模块程序及原理图.doc
链接地址:https://www.renrendoc.com/p-40509457.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!