指纹识别程序和原理图.docx

上传人:牧羊曲112 文档编号:1668783 上传时间:2022-12-13 格式:DOCX 页数:34 大小:142.89KB
返回 下载 相关 举报
指纹识别程序和原理图.docx_第1页
第1页 / 共34页
指纹识别程序和原理图.docx_第2页
第2页 / 共34页
指纹识别程序和原理图.docx_第3页
第3页 / 共34页
指纹识别程序和原理图.docx_第4页
第4页 / 共34页
指纹识别程序和原理图.docx_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《指纹识别程序和原理图.docx》由会员分享,可在线阅读,更多相关《指纹识别程序和原理图.docx(34页珍藏版)》请在三一办公上搜索。

1、#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;sb

2、it 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

3、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

4、 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= 接收包出错 ;unsig

5、ned 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=

6、一致,请重新操作; 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.

7、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); /等待键

8、释放 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; c

9、ase 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;

10、 /*/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;/清屏函数清

11、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&0x0

12、f;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&

13、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; SC

14、LK=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(uch

15、ar *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 SF

16、G_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;

17、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)

18、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(T

19、I=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);

20、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;

21、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

22、=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(T

23、I=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=

24、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

25、(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; whil

26、e(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(

27、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;

28、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

29、;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(T

30、I=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; w

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号