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

上传人:xin****828 文档编号:6616618 上传时间:2020-02-29 格式:DOC 页数:34 大小:233.50KB
返回 下载 相关 举报
指纹识别模块程序及原理图.doc_第1页
第1页 / 共34页
指纹识别模块程序及原理图.doc_第2页
第2页 / 共34页
指纹识别模块程序及原理图.doc_第3页
第3页 / 共34页
点击查看更多>>
资源描述
程序:#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 0x82sbit B0=B0;sbit B7=B7;sbit jidianqi=P36;sbit RS=P22; sbit RW=P21;sbit E1=P20;sbit LEDK=P34; /控制背光sbit SCLK=P23;sbit IO=P25;sbit RST=P24;uchar code ta8=0x00,0x51,0x09,0x10,0x05,0x02,0x11,0xbe;uchar data a7; / 秒 分 时 日 月 星期 年 uchar dz4; /存键输入值uchar mima7;uchar mimaID6=1,2,3,4,5,6;uchar data K;uchar data Key;uint PageID;uchar data querenma;uchar sum2;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;i125;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 = (rcode1)|0x01; / 行扫描码左移一位 return 0; / 无键按下,返回值为0void 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;/清屏函数清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;i4; n4=a6&0x0f;WriteCommand(0x90);/指定第二行显示位置WriteData(0x32);WriteData(0x30);WriteData(0x30+n3);WriteData(0x30+n4);for(i=0;i4; y2=a4&0x0f;WriteData(0x30+y1);WriteData(0x30+y2);for(i=0;i4; r2=a3&0x0f;WriteData(0x30+r1);WriteData(0x30+r2);for(i=0;i2;i+)WriteData(rii); WriteCommand(0x88); /指定第三行显示位置for(i=0;i4;s2=a2&0x0f; f1=a14;f2=a1&0x0f; m1=a04;m2=a0&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() /读数据ds1302uchar i;for(i=0;i=1; B7 = IO; SCLK=1; SCLK=0; return B;void w1302(uchar co) / 写ds1302 单字节 uchar i; B = co; for(i=0;i=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;i8;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;i7;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;i9;i+) while(RI=0); RI=0; while(RI=0); RI=0; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum18; SBUF=sum1; while(TI=0) TI=0; SBUF=sum0; while(TI=0) TI=0; for(i=0;i9;i+) while(RI=0); RI=0; while(RI=0); RI=0; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum18)+sum0; 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;i9;i+) while(RI=0); RI=0; while(RI=0); RI=0; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1=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=pageID8; SBUF=ID2; while(TI=0); TI=0; SBUF=ID1; while(TI=0); TI=0; summaf=0x0e+ID1+ID2; sum0=summaf; sum1=summaf8; SBUF=sum1; while(TI=0); TI=0; SBUF=sum0; while(TI=0); TI=0; for(i=0;i9;i+) while(RI=0); RI=0; while(RI=0); RI=0; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum18)+sum0; 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;i9;i+) while(RI=0); RI=0; while(RI=0); RI=0; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1255都会使程序卡 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; sum0=summaf; sum1=summaf8; SBUF=sum1; while(TI=0); TI=0; SBUF=sum0; while(TI=0); TI=0; for(i=0;i9;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; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum18)+sum0; /PageID=ID1; PageID=(ID18)+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;i9;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; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum18)+sum0; /PageID=ID1; PageID=(ID18; 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; sum0=summaf; sum1=summaf8; SBUF=sum1; while(TI=0); TI=0; SBUF=sum0; while(TI=0); TI=0; for(i=0;i9;i+) while(RI=0); RI=0; while(RI=0); RI=0; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum18)+sum0; 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; sum0=summaf; sum1=0; SBUF=sum1; while(TI=0); TI=0; SBUF=sum0; while(TI=0); TI=0; for(i=0;i9;i+) while(RI=0); RI=0; while(RI=0); RI=0; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum18)+sum0; 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;i9;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; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum18)+sum0; /PageID=ID1; PageID=(ID18)+ID2;void shuazhiwen() uchar i,IDs1,IDs2,IDs3;Clrram();WriteCommand(0x90);/指定第二行显示位置for(i=0;i16;i+)WriteData(text1i); /显示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;i16;i+)WriteData(text18i); /显示LCD12864并行显示指纹通过 门已开 IDs1=PageID/100;IDs2=PageID/10%10;IDs3=PageID%10;WriteCommand(0x88);/指定第三行显示位置for(i=0;i10;i+)WriteData(text17i); /显示LCD12864并行显示 编号为: WriteData(0x30+IDs1);WriteData(0x30+IDs2);WriteData(0x30+IDs3); jidianqi=0; /开门 else if(querenma=9) Clrram();WriteCommand(0x90);/指定第二行显示位置for(i=0;i16;i+)WriteData(text12i); /显示LCD12864并行显示没搜索到指纹 else Clrram();WriteCommand(0x90);/指定第二行显示位置for(i=0;i16;i+)WriteData(text16i); /显示LCD12864并行显示接收包出错 WriteCommand(0x98);/指定第四行显示位置for(i=0;i16;i+)WriteData(text4i); /显示LCD12864并行显示请按任意键继续while(Keycan()=0);void addfinger() uchar i,IDa1,IDa2,IDa3; Clrram(); WriteCommand(0x90);/指定第二行显示位置 for(i=0;i16;i+) WriteData(text1i); /显示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;i16;i+)WriteData(text19i); /显示LCD12864并行显示 该指纹已存储 WriteCommand(0x98);/指定第四行显示位置 for(i=0;i16;i+)WriteData(text4i); /显示LCD12864并行显示 请按任意键继续 while(Keycan()=0); else if(querenma=9) Clrram(); WriteCommand(0x90);/指定第二行显示位置 for(i=0;i16;i+)WriteData(text2i); /显示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;i16;i+)WriteData(text3i); /显示LCD12864并行显示 指纹采集成功 WriteCommand(0x88);/指定第三行显示位置 for(i=0;i10;i+)WriteData(text17i); /显示LCD12864并行显示 编号为:pgaeIDWriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3); else if(querenma!=0) WriteCommand(0x90);/指定第二行显示位置 for(i=0;i16;i+)WriteData(text5i); /显示LCD12864并行显示 指纹采集失败 WriteCommand(0x88);/指定第三行显示位置 for(i=0;i16;i+)WriteData(text14i); /显示LCD12864并行显示 请重新采集 WriteCommand(0x98);/指定第四行显示位置 for(i=0;i16;i+)WriteData(text4i); /显示LCD12864并行显示 请按任意键继续 while(Keycan()=0); Clrram();void deletfinger() uchar i,j=0; Clrram(); WriteCommand(0x90);/指定第二行显示位置 for(i=0;i16;i+)WriteData(text6i); /显示LCD12864并行显示 请输入删去的指纹号 for(i=0;i5;i+)dzi=0;/不输入时会默认为000 Key=Keycan(); while(Key!=queren) Key=Keycan(); KeyDeal(Key); delay(30);
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 临时分类 > 人文社科


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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