版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
#include<reg52.h>#include<intriiis.h>#defineTRUE1unsignedchar SaveNumbei=0,searclmum=0;unsignediiitSeaicliNumber=O;unsignediiitclk0=0;sbitrelay=P1A4;〃繼電器引腳sbitbuzzei-=PlA5;〃蜂鳴器引腳sbitred= P2T;//sbitgreen=P2P;//識別模式指示燈在板子遠(yuǎn)離單片機(jī)處sbitkl=P3T;〃模式識別sbitk2=P3A4;//錄入一次指紋sbitk3=P3-2;//?W除所有指紋(10個(gè)指紋清除)〃變量定義:unsignedcharcodetab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//表:共陽數(shù)碼管0-9〃數(shù)碼管引腳定義:sbitSMG_gP1A3; 〃定義數(shù)碼管陽級控制腳(個(gè)位)〃由于程序中定時(shí)器被用我們用一位數(shù)碼管顯示且為靜太顯示所以推薦人家用1602或者12864液晶bitchangefiag=0jiiodeflag=0,cleaiallflag=0;〃默認(rèn)為識別模式,如果為1為錄入指紋模式,每錄入_次SaveNumber++7/////////////////常用指令定義〃〃///////////////////////////VerifyPassword:驗(yàn)證設(shè)備握手「I令unsigned char code VPWD[16]={16,0X01 .OXff.Oxff.Oxff.Oxff,OxOLOJ,0x13.0x00.0x00.0x00,0x00.0x00,Oxlb};〃回送12個(gè)〃設(shè)置設(shè)備握手口令unsigned chai code STWD[16]={16.0X01 .OXff.Oxff.Oxff.Oxff,OxOLOJ,0x12.0x00.0x00.0x00,0x00.0x00,0x13};〃回送12個(gè)//Getlinage :探測手指并從傳感器上讀入圖像unsignedcharcodeGEvIG[14]={12,0X01.0Xff,0xff,0xff,0xff,0x01,0、30x00,0x05};〃回送12個(gè)//GenTempletl 1unsignedcharcodeGENT1[14]={13,0X01.0Xff.0xff.0xff.0xff.0x01^4,2,1.0x00.0x08};//回送12個(gè)//GenTemplet2 2unsignedcharcodeGENT2[14]={13,0X01.OXff.Oxff.Oxff.Oxff,0x01,0,4.2,2,0x00,0x09};//回送12個(gè)//SearchFmgerChaiBufferA或CharBufferB中的特征文件搜索整個(gè)或部分指紋庫unsignedcodeSEAT[18]={17,0X01.OXff^OxffOxffOxff.0x01,0,8,4,1.0,0,0.0x65,0x00,0x73};〃回送16個(gè)//MergeTempletChaiBufferA與CharEuffbrE中的特征文件合并生成模板,結(jié)果存于ModelBufferounsignedcharcodeMERG[14]={12,0X01.OXff,Oxff,Oxff,Oxff.0x01,0,3,5、0x00,0x09};//回送12個(gè)//StoreTemplet:將ModelBuffer中的文件儲存到flash指紋庫中unsignedchaicodeSTOR[16]={15,0X01,OXff,Oxff,OxffOxff.0x01,066,2、0x00,OxOf};//回送12個(gè)ReadNoteunsignedcharcodeRDNT[14]={13,0X01,0Xff,0xff,0xff,0xff,0x01,0.4,0x19,0.0x00,Oxle};//ChaiNoteunsignedchaicodeDENT[46]={45,0X01,OXff,Oxff,OxffOxff.0x01、36xl&0Q0Q0O0Q0O0Q0g0Q0Q0Q0Q0O0Q0O0O0Q0x0(X0x3d};
0x00,0x00,//DELonetempletunsignedcharcodeDELE_one[16]={16.0X01,OXff,Oxff,Oxff,Oxff,0x01,0,7,0x0c,0x00,0x00,0丄0x00,0x15};//DELtemplet
;清空指紋庫unsignedcharcodeDELE_all[12]={12,0X01.0Xff0xff.0xff.0xff,0x01,0,3,0x0d.0x00.0xll};////////////////常用指令定義結(jié)束/〃//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////宏定義/////////////////////////////////////////////////////////////////////〃/#defineFALSE0#defineTCRE1〃狀態(tài)定義表#defineon 1#defineoff0#defineMAX_NUMEER63#define_Nop()_nop_()////////
7/////////////////宏定義_ 結(jié)束////////////////////////////////////////////////////////unsignedchar FifbNumber=O;unsignedchar FIFO[MAX_NUNIBER+1]={0};/*********!毫秒延時(shí)程序**********/voiddelay1ms(unsignedintt){unsignedmti,j;for(i=O;i<t;i++)fb【(j=0jvi20j++)}voidTxdByte(unsignedchardat)//串丨I發(fā)送信息,通過查詢方式發(fā)送一個(gè)字符{TI0; 〃讓TI=0SBUF=dat;〃讀入數(shù)據(jù)wlule(!TI);TI=0;}
〃等待發(fā)送完畢〃清零bitConmiand(unsignedchai*p.unsignedchaiMaxTune)〃命令解析,給模塊發(fā)送一個(gè)命令{unsignedcharcount=0jmpdat=0.temp=04=0.package=0,flag=0.checksum=0;bitresult=0,stait=0,stop=0;TxdByte(Oxef);//數(shù)據(jù)包包頭識別碼TxdByte(OxOl)^/數(shù)據(jù)包包頭識別碼1=*P;bP卄;P卄;
〃數(shù)組的第元素、里面存放了本數(shù)組的長度,把這個(gè)長度給變量for(count=i-l;count!=1;count~)//SentcommandString{temp=*p++;〃取第個(gè)“1”個(gè)元素的內(nèi)容,然后發(fā)送TxdEyte(temp);//將數(shù)據(jù)發(fā)送出去}result=TURE;//發(fā)送完成,結(jié)果為真(真為1)FifbNumber=O;for(count=MAX.NUNIBER+l;count?=0;count-)//清空所有FIFO口數(shù)組里面的內(nèi)容,寫入0X00FIFO[count-!]=0x00;if(result){result=FALSE;start=FALSE;stop=FALSE;count=0;clk0=0;〃清零CLO計(jì)數(shù)do////〃/〃/////〃/〃/〃〃///〃do的內(nèi)容//〃////〃////////〃/〃/〃〃////{restaitO:if(RI==1)〃如果接收到數(shù)據(jù){tmpdat=SBUF^/先把接收到的數(shù)據(jù)放到unpdat中RI=0;if((tmpdat==Oxef)&&(start==FALSE))〃這個(gè)數(shù)據(jù)為第一個(gè)傳回來的數(shù)據(jù),也就是“指令應(yīng)答”的第一個(gè)字節(jié){count=0;FIFO[0]=tmpdg//讀入第一個(gè)應(yīng)答字節(jié)(0XEF),存在第“0”個(gè)元素中flag=l;gotorestartO;//可以用中斷方式進(jìn)行}if(flag=l)//第一個(gè)字節(jié)已經(jīng)回來,所以flag==l成立if(tmpdat!=0x01)〃接收數(shù)據(jù)錯(cuò)誤,將重新從緩沖區(qū)接收數(shù)flag=O;〃接收應(yīng)答失敗result=FALSE;start=FALSE;stop=FALSE;count=0;gotorestartO;}〃如果成功接收到0xefDb可以開始接收數(shù)據(jù)flag=2;//flag=2;表示應(yīng)答成功,可以開始接收數(shù)據(jù)了count++;〃現(xiàn)在count=l;HFO[count]=tmpdat;//讀入第二個(gè)應(yīng)答字節(jié)(0X01),存在第個(gè)元素中start=TURE;〃應(yīng)答成功町以開始接收數(shù)據(jù)gotorestartO;}數(shù)據(jù)了
if((flag==2)&&(stan=TURE))//flag=2;表示應(yīng)答成功,可以開始接收{(diào)COUllt-H-〃數(shù)據(jù)元素下標(biāo)++FIFO[count]=tmpdat;//^入數(shù)據(jù)if(count>=6){checksum=FIFO[count]+checksum;//計(jì)算校驗(yàn)和}if(count=8){度}if(stop){FIFO[count];0
package=FIFO[7]*0X1004-FIFO[8];〃計(jì)算包長stop=TURE;if(count==package+8){checksum=checksuni-FIFO[count-1] -if(checksum!=(FIFO[count]&Oxff))result=FALSE;//校驗(yàn)失敗,置結(jié)果標(biāo)志為elseresult=TURE;flag=O;break;}}}}}/////////////////////////////do的內(nèi)容 結(jié)束////////////////////////////////while((clkO<=MaxTune)&&(count<=MAX_NUMBER)&&(changeflag=O));//由定時(shí)器以及最大接收數(shù)據(jù)來控制,保證不會在此一直循環(huán)FifoNumbei-=count; 〃保存接收到的數(shù)據(jù)個(gè)數(shù)}return(result);}bitVefPSW(void)//^證設(shè)備握手II令賊功返回1{unsignedcharcount=0:wlule(1){if(Command(VPWD,20)&&(FifbNumbr==ll)&&(FIFO[9]==OxOO))return(l);count++;if(count>=2)//如果不成功,再驗(yàn)證一次,如呆兩次不成功,返回失敗{return(O);}}}voidCleai_All(void)//清空指紋庫{delaylms(200);Conmiand(DELE_alL50);〃清空指紋庫}unsignedcharIingProcess(unsignedcharBUFID)〃發(fā)獲取圖像并生成特征文件,存入BUFED中〃輸入?yún)?shù)為緩沖區(qū)號if(Command(GIMG89)&&(FifoNumber==11)&&(FIFO[刃=0x00))if(BUFID=l){if(Conunand(GENTh60)&&(FifoNumber==ll)&&(FIFO[9]==0x00)){}else{}}
return1;return0;elseif(BUFID==2){if(Conunand(GENT2.60)&&(FifbNumber==ll)&&(FIFO[9]==OxOO)){}}else{
}else{}
leturn1;return0;return0;}return0;}bitSearclifinger(void)//?索指紋(發(fā)送搜索命令、以及根據(jù)返回值確定是否存在){if(Conmiand(SEAT.60)&&(FifoNumber==15)&&(FIFO[9]=0x00)){SeaicliNumbei-=FIFO[10]*0x100+FIFO[11]〃(叟索到的頁碼//MatchScoie=FIFO[12]*0x1OO+FIFO[13] 設(shè)定,本程序忽略return1;}elsereturn0;unsignedcharsearch(void)//?索指紋{unsignedcharSeaicliBuf=0j=0;while(i<20){if(ImgProcess(l)=l)〃首先讀入一次指紋{Seaicl1Buf=Searclifmger();//進(jìn)行指紋比對,如果搜索到,返回搜索到的指紋序號if(SearcliBuf==l){}else{}}
returnSearchNumber;return255;//表示搜索到的指紋不正確1++;}retuni0;}bitsavefiiigme(unsigiiedcharID)〃保存指紋{unsignedchaii=0;〃現(xiàn)在開始進(jìn)行存儲指紋模板的操作for(i=0;K16;i++)//保存指紋信息{FIFO[i]=STOR[i];}FIFO[12]=LD;//PAGEJDDFLASHFIFO[14]=FIFO[14]+ID;〃校驗(yàn)和if(Conunand(FIFO,70)==l)//此處進(jìn)行存放指紋模板的命令{return(l);}elseieturn(O);//不成功返回0}}unsignedcharemoll(void)//采集兩次指紋,生成1個(gè)指紋模板{unsignedchartemp=0xount=0;wliile(l){temp=ImgProcess(l);//生成特征1if(temp==l)//生成特征文件成功{}else{
〃采集第一個(gè)特征成功count=0;buzzer=O;delavlnis(lOO);buzzer=l;break;if(temp==0)”采集指紋沒有成功{count-H-;if(count>=40)//如果采集了40次,還不成功,直接采集失敗,直接退出emoll函數(shù)返回0ieturn(O);}}}delaylms(2000);//延時(shí)2S開始采集下一個(gè)特征〃開始采集第二個(gè)特征while(l){temp=ImgProcess(2);〃生成特征2if(temp==l)//生成特征文件2成功{if((Conunand(MERG40)&&(FifbNumber==ll)&&(FIFO[9]==OxOO))==l )〃合并成功返回1}else{
buzzei-O;delaylms(lOO);buzzer=l;delaylms(lOO);buzzei-O;delaylnis(lOO);〃響兩聲,表示生成一個(gè)模板成功buzzer=l;ietuin(l);return(O);}else{
}if(temp=l)//采集指紋沒有成功{count++;if(count>=25)return(O);}}}}voidmain(void)//i函數(shù){unsignedchari=0;ETO=1; 0TL0=0x97;//17ms的初值TH0=0xBD;〃串口初始化SCON=0x50;//UART方式1:8位UART;REN=1:允許接收PCON=OxO0;//SMOD=0「波特率不加倍TMOD=Ox21;//T12,UARTTHl=0xFD:TL1=0xFD;//UART波特率設(shè)置:9600TR1=1;TRO=1;//開定時(shí)器0ITO=O;//0IT1=1;//1低電平中斷EXO=1;//0EX1=1;//開中斷1EA=1;SMG_g=0;P0=tab[O];//顯示0for(i=0;i<6;i++)//開始握手6次,如果沒有一次成功,表示模塊通信不正常。只要成功就跳出此循壞{
if(VefPSW()=l)//與模塊握手通過,綠燈亮起。進(jìn)入識別模式{green=O;buzzer=O;delaylms(300);buzzei-1;green=l;red=O;break;〃成功就退出這個(gè)循壞}}wlule(l){if(k2=0)//錄入一個(gè)指紋delaylms(lO);delaylms(lO);if(k2==0)//如果仍為低電平,表示按鍵有效{wlule(k2=0);//等待松手通過if(VefPSW()=1&&modeflag=1&&SaveNumber<10)//4模塊握:f-{if(emoll()=l)//1個(gè)指紋模板成功{if(savefuigiire(SaveNumber+1)=1)//保存也成功SaveNumber++y/加一次PO=tab[SaveNumber];delaylms(200);PO=OxFF;//來一次顯示,閃爍一次delaylins(200);PO=tab[SaveNumber];}}else{
}buzzei-O:for(i=0;i<8;i++){delaylnis(lOO);ieddied;}red=O;buzzei-1;}}}if(modeflag=0)//為識別模式{green=O;red=l;seaiclinum=searchQ;if(seaiclinum>=l&&seaiclmum<=162)//PO=tab[searchiium];//顯示搜索到的指紋模塊〃蜂鳴器響一聲//3relay=O;buzzei-O;delaylms(100);buzzei-1;delaylms(3000);relay=l;}if(seaiclmum==255)//不正確的指紋蜂鳴器響三聲
162個(gè)指紋{PO=tab[O]〃顯示0buzzei-O;delavlnis(l00);buzzer=1;delaylms(100);buzzei-O;delavlnis(l00);buzzei-1;delaylnis(100);buzzei-O;d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國汽車車燈總成行業(yè)發(fā)展需求預(yù)測及未來發(fā)展策略研究報(bào)告
- 酒店智能化客房管理方案
- 清廉學(xué)校招生與宣傳方案
- 企業(yè)團(tuán)建紅歌晚會活動方案
- 工廠周邊綠化養(yǎng)護(hù)方案
- 新興社區(qū)交通調(diào)流組織方案
- 住宅新風(fēng)系統(tǒng)的施工安裝技術(shù)方案
- 城市隧道工程安全監(jiān)測方案
- 工業(yè)廠房中央空調(diào)維護(hù)方案
- 海洋石油運(yùn)輸企業(yè)安全整治方案
- 《中華商業(yè)文化》第七章
- 15D503利用建筑物金屬體做防雷及接地裝置安裝圖集
- 消防訓(xùn)練工作研討材料
- 醫(yī)患雙方權(quán)利和義務(wù)課件
- 高三年級班級成績分析報(bào)告
- 整形美容科品管圈PDCA匯報(bào)模板-通過綜合性護(hù)理干預(yù)措施降低疤痕發(fā)生率
- 小學(xué)心理健康教育-團(tuán)體心理輔導(dǎo)教學(xué)課件設(shè)計(jì)
- 國際貿(mào)易業(yè)務(wù)流程圖(完整資料)
- 國際海上人命安全公約
- DB51T 3007-2023四川省農(nóng)田生態(tài)溝渠構(gòu)建技術(shù)規(guī)范
- 凝血基礎(chǔ)知識專家講座
評論
0/150
提交評論