指紋識別程序和原理圖_第1頁
指紋識別程序和原理圖_第2頁
指紋識別程序和原理圖_第3頁
指紋識別程序和原理圖_第4頁
指紋識別程序和原理圖_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

付費下載

VIP免費下載

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、#include <reg52.h>#include <intrins.h>#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

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

3、n="年"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="請按任意鍵繼續(xù) "

4、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=&qu

5、ot;清空指紋庫成功 " 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

6、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="

7、兩次輸入的密碼不"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 模塊默認波特率為57600b

8、ps TL1= 0xff; TR1= 1; /啟動定時器unsigned char Keycan(void) /按鍵掃描程序 P1.0-P1.3為行線 P1.4-P1.7為列線 unsigned char rcode, ccode; P1 = 0xF0; / 發(fā)全0行掃描碼,列線輸入 if(P1&0xF0) != 0xF0) / 若有鍵按下 delay(1);/ 延時去抖動 if(P1&0xF0) != 0xF0) rcode = 0xFE; / 逐行掃描初值 while(rcode&0x10) != 0) P1 = rcode; / 輸出行掃描碼 if(P1&

9、0xF0) != 0xF0) / 本行有鍵按下 ccode = (P1&0xF0)|0x0F; /do; while(P1&0xF0) != 0xF0); /等待鍵釋放 return (rcode) + (ccode); / 返回鍵編碼 else rcode = (rcode<<1)|0x01; / 行掃描碼左移一位 return 0; / 無鍵按下,返回值為0void KeyDeal(unsigned char Key) /unsigned char n; if(Key!=0) switch(Key) case 0x11: K=1; break; case 0x2

10、1: 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=

11、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;E

12、1=1;E1=0;/向LCD寫數(shù)據(jù)void WriteData(uchar Lcd_data)ReadBusy();RS=1;RW=0;Dbus=Lcd_data;E1=1;E1=0;/清屏函數(shù)清DDRAMvoid Clrram (void) WriteCommand(0x01);/LCD12864初始化程序void Lcd_int()WriteCommand(0x30);/30-基本指令動作WriteCommand(0x0c);/開顯示,關(guān)游標WriteCommand(0x01);/清屏,地址指針指向00HWriteCommand(0x02);/LCD12864顯示時間void playti

13、me()uchar i,n3,n4,y1,y2,r1,r2,s1,s2,f1,f2,m1,m2;WriteCommand(0x80);/指定第一行顯示位置for(i=0;i<16;i+)WriteData(text13i); /顯示LCD12864并行顯示n3=a6>>4; n4=a6&0x0f;WriteCommand(0x90);/指定第二行顯示位置WriteData(0x32);WriteData(0x30);WriteData(0x30+n3);WriteData(0x30+n4);for(i=0;i<2;i+) WriteData(niani);y1=

14、a4>>4; y2=a4&0x0f;WriteData(0x30+y1);WriteData(0x30+y2);for(i=0;i<2;i+) WriteData(yuei);r1=a3>>4; r2=a3&0x0f;WriteData(0x30+r1);WriteData(0x30+r2);for(i=0;i<2;i+)WriteData(rii); WriteCommand(0x88); /指定第三行顯示位置for(i=0;i<4;i+)WriteData(xinqii);WriteData(a5+0x30); s1=a2>&

15、gt;4;s2=a2&0x0f; f1=a1>>4;f2=a1&0x0f; m1=a0>>4;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() /讀數(shù)據(jù)ds1302u

16、char i;for(i=0;i<8;i+) B>>=1; B7 = IO; SCLK=1; SCLK=0; return B;void w1302(uchar co) / 寫ds1302 單字節(jié) 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) /尋址,寫數(shù) RST = 0; SCLK = 0; RST = 1; w1302(a); w1302(d); SCL

17、K = 1; RST = 0;uchar r(uchar a) /尋址,讀數(shù) uchar r; RST = 0; SCLK = 0; RST = 1; w1302(a); r=r1302(); SCLK = 1; RST = 0;return r;void wclo(uchar *p) /寫多字節(jié)ds1302 uchar i; w(0x8e,0x00); /寫允許 RST=0; SCLK=0; RST=1;w1302(0xbe); /寫多字節(jié)命令 for(i=0;i<8;i+)w1302(*(p+i); /寫時鐘數(shù)據(jù) w(0x00,0x50); /? 啟動定時器 SCLK=1;RST=0

18、;void rclo(uchar *p)/讀出多字節(jié)ds1302 uchar i; RST=0; SCLK=0; RST=1; w1302(0xbf); for(i=0;i<7;i+) *(p+i) = r1302(); /讀出時鐘數(shù)據(jù) 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=

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

20、 RI=0; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1<<8)+sum0; void SFG_genchar(uchar bufferID) /生成特征并存于charbuffer1/2 調(diào)用后單片機波特率變化 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);

21、 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; sum0=summaf; sum1=summaf>>8; SBUF=sum1; while(TI=0)

22、 TI=0; SBUF=sum0; 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; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1<<8)+sum0; void SFG_regmodel() /合并生成模板 uchar i; SBUF=0xef; while(TI=0); TI=0; SBUF=0X01; while(TI=0); TI=0; SBUF=0

23、XFF; 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

24、(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; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1<<8)+sum0; void SFG_storechar(uint pageID) /儲存模板ID1010也儲存成功 ID>=1011 querenma=0x18? uchar i,ID1,ID2; SBUF=0xef; while(TI=0); TI=0; SB

25、UF=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; ID

26、1=pageID;ID2=pageID>>8; SBUF=ID2; while(TI=0); TI=0; SBUF=ID1; while(TI=0); TI=0; summaf=0x0e+ID1+ID2; sum0=summaf; sum1=summaf>>8; SBUF=sum1; while(TI=0); TI=0; SBUF=sum0; 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; sum1=

27、SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1<<8)+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)

28、; 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; sum1=SBUF; while(RI=0); RI=0; sum0=S

29、BUF; summas=(sum1<<8)+sum0; 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); T

30、I=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+18

31、0; sum0=summaf; sum1=summaf>>8; SBUF=sum1; while(TI=0); TI=0; SBUF=sum0; 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; sum1=S

32、BUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1<<8)+sum0; /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;

33、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);

34、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=(sum1<<8)+sum0; /PageID=ID1; PageID=(ID1<<8)+ID2;void SFG_deletchar(uint pageID) /刪除指紋 校驗和在2字節(jié)的頁碼處應分高低字節(jié)相加 uchar i,ID1,ID2; SBUF=0xef; while(T

35、I=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=pag

36、eID>>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; sum0=summaf; sum1=summaf>>8; SBUF=sum1; while(TI=0); TI=0; SBUF=sum0; while(TI=0); TI=0; for(i=0;i<9;i+) while(RI=0); RI=0; while(RI=0); RI=0

37、; querenma=SBUF; while(RI=0); RI=0; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1<<8)+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; S

38、BUF=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

39、(i=0;i<9;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<<8)+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

40、=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=

41、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; sum1=SBUF; while(RI=0); RI=0; sum0=SBUF; summas=(sum1<<8)+sum0; /PageID=ID1; PageID=(ID1<<8)+ID2;void s

42、huazhiwen() uchar i,IDs1,IDs2,IDs3;Clrram();WriteCommand(0x90);/指定第二行顯示位置for(i=0;i<16;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;i<16

43、;i+)WriteData(text18i); /顯示LCD12864并行顯示指紋通過 門已開 IDs1=PageID/100;IDs2=PageID/10%10;IDs3=PageID%10;WriteCommand(0x88);/指定第三行顯示位置for(i=0;i<10;i+)WriteData(text17i); /顯示LCD12864并行顯示 編號為: WriteData(0x30+IDs1);WriteData(0x30+IDs2);WriteData(0x30+IDs3); jidianqi=0; /開門 else if(querenma=9) Clrram();Write

44、Command(0x90);/指定第二行顯示位置for(i=0;i<16;i+)WriteData(text12i); /顯示LCD12864并行顯示沒搜索到指紋 else Clrram();WriteCommand(0x90);/指定第二行顯示位置for(i=0;i<16;i+)WriteData(text16i); /顯示LCD12864并行顯示接收包出錯 WriteCommand(0x98);/指定第四行顯示位置for(i=0;i<16;i+)WriteData(text4i); /顯示LCD12864并行顯示請按任意鍵繼續(xù)while(Keycan()=0);void addfinger() uchar i,IDa1,IDa2,IDa3; Clrram(); WriteCommand(0x90);/指定第二行顯示位置 for(i=0;i<16;i+) WriteData(tex

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論