![基于.單片機指紋識別系統(tǒng)設(shè)計_第1頁](http://file4.renrendoc.com/view/3682ee32bbe5124b337a601a49a791d6/3682ee32bbe5124b337a601a49a791d61.gif)
![基于.單片機指紋識別系統(tǒng)設(shè)計_第2頁](http://file4.renrendoc.com/view/3682ee32bbe5124b337a601a49a791d6/3682ee32bbe5124b337a601a49a791d62.gif)
![基于.單片機指紋識別系統(tǒng)設(shè)計_第3頁](http://file4.renrendoc.com/view/3682ee32bbe5124b337a601a49a791d6/3682ee32bbe5124b337a601a49a791d63.gif)
![基于.單片機指紋識別系統(tǒng)設(shè)計_第4頁](http://file4.renrendoc.com/view/3682ee32bbe5124b337a601a49a791d6/3682ee32bbe5124b337a601a49a791d64.gif)
![基于.單片機指紋識別系統(tǒng)設(shè)計_第5頁](http://file4.renrendoc.com/view/3682ee32bbe5124b337a601a49a791d6/3682ee32bbe5124b337a601a49a791d65.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
...wd......wd......wd...任務(wù)書課程設(shè)計題目:指紋識別功能簡述:1)根據(jù)所學(xué)的知識和能力,設(shè)計程序可以實現(xiàn)根據(jù)指紋的大小、形狀等特征,識別出不同的指紋。2)利用按鍵標志當前指紋識別的狀態(tài),例如錄入狀態(tài),識別狀態(tài),清楚狀態(tài);利用液晶1602能夠顯示當前指紋識別的狀態(tài)信息。3)利用繼電器,對當前信息的判斷,例如提醒當前指紋識別錯誤;利用蜂鳴器和LED等提醒當前指紋識別是否正確目錄第一章緒論……………………..1.1、指紋識別中的基本概念…………………1.2指紋識別的開展前景………1.3、指紋識別課題設(shè)計的內(nèi)容與意義………..第二章方案選擇………………2.1系統(tǒng)原理圖設(shè)計……………2.2方案說明………2.3方案比較……………………2.4方案選擇………第三章硬件設(shè)計………………3.1AT89C52單片機設(shè)計………3.2電源電路設(shè)計………………3.3按鍵控制局部電路…………3.4LED指示燈電路…………3.5蜂鳴器電路………………3.6指紋傳感器模塊…………第四章軟件程序設(shè)計………….4.1程序流程圖…………………4.2程序………….第五章調(diào)試……………………5.1硬件調(diào)試…………………….5.2軟件調(diào)試……………………摘要隨著時代的開展,社會越來越需要高效、可靠的身份識別系統(tǒng)傳統(tǒng)的個人身份鑒別手段如鑰匙、口令、密碼、身份證件,甚至IC卡等識別方式,由于它們具有可假冒、可偽造、可盜用、可破譯的弱點,已不能完全滿足現(xiàn)代社會經(jīng)濟活動和社會安全防范的需要。隨著識別技術(shù)的不斷成熟和計算機技術(shù)的飛速開展,各種基于人體生理特征的身份識別系統(tǒng)如:指紋、手掌、聲音、視網(wǎng)膜、瞳孔和面紋等識別技術(shù)紛紛從實驗室中走出來。目前,從實用的角度看,指紋識別技術(shù)是優(yōu)于其它生物識別技術(shù)的身份鑒別方法。本次設(shè)計我們利用指紋識別傳感器進展指紋采集與識別,在單片機中對指紋進展處理,用按鍵標志當前指紋識別的狀態(tài),錄入狀態(tài),識別狀態(tài),去除狀態(tài),用液晶1602能夠顯示當前指紋識別的狀態(tài)信息;用繼電器對當前信息進展判斷,例如提醒當前指紋識別錯誤;利用蜂鳴器和LED等提醒當前指紋識別是否正確關(guān)鍵詞:指紋識別;單片機;指紋識別傳感器;液晶1602;繼電器第一章緒論進入21世紀后,由于國際反恐、互聯(lián)網(wǎng)應(yīng)用等因素的推動,在全球范圍內(nèi),指紋識別技術(shù)得到了更加廣泛的應(yīng)用,指紋識別市場進入高速開展階段。利用人的生理特征,例如像指紋等來識別個人的身份,將成為今后幾年IT產(chǎn)業(yè)的重要革新。指紋在所有的生物特征中,相對穩(wěn)定、不隨年齡而變化和采集較為便捷,同時它的研究歷史最長、相對更為成熟。與現(xiàn)有的智能卡、身份證號碼和密碼的身份識別系統(tǒng)相比,指紋識別的性價比最高,也更適于應(yīng)用到群眾生活中。因此指紋識別以其革命性的便捷和安全性成為一個理想的卓越的解決方案。1.1、指紋識別中的基本概念指紋識別是成熟的生物識別(Biometric)技術(shù),由于人體的身體特征具有不可復(fù)制的特點,人們把目光轉(zhuǎn)向了生物識別技術(shù),希望可以籍此技術(shù)來應(yīng)付現(xiàn)行系統(tǒng)安全所面臨的的挑戰(zhàn)。要把人體的特證用于身份識別,這些特征必須具有唯一性和穩(wěn)定性。研究和經(jīng)歷說明,人的指紋、掌紋、面孔、發(fā)音、虹膜、視網(wǎng)膜、骨架等都具有唯一性和穩(wěn)定性的特征,即每個人的這些特征都與別人不同、且終生不變,因此就可以據(jù)此識別出人的身份?;谶@些特征,人們開展了指紋識別、面部識別、發(fā)音識別等多種生物識別技術(shù),目前許多技術(shù)都已經(jīng)成熟并得以應(yīng)用,其中的指紋識別技術(shù)更是生物識別技術(shù)的熱點。1.2指紋識別的開展前景指紋行業(yè)是一個新興的行業(yè),本身具有很高的科技含量,相對利潤高開展前景廣闊。經(jīng)專家預(yù)計,指紋產(chǎn)品將是未來IT產(chǎn)業(yè)新的增長點:利潤率最高、開展?jié)摿ψ畲蟆S谑?,世界頂尖的指紋識別技術(shù)得到了全球范圍內(nèi)的高度重視,指紋識別技術(shù)的應(yīng)用如火如荼地迅速開展起來。目前,國內(nèi)已經(jīng)有不少企業(yè)在參與指紋識別技術(shù)的開發(fā)和應(yīng)用。指紋技術(shù)在現(xiàn)代生活和工作中的應(yīng)用已越來越普遍,例如:指紋考勤、指紋社保、指紋銀行、指紋商場、指紋接送幼兒等等生活和工作的新現(xiàn)象已廣為人知,指紋技術(shù)正在日益刷新著我們的現(xiàn)代化生活方式。1.3、指紋識別課題設(shè)計的內(nèi)容與意義指紋識別技術(shù)相對于其他識別方法有許多獨到之處,具有很高的實用性和可行性。因此,指紋識別成為最流行、最方便、最可靠的身份認證方式,己經(jīng)在社會生活的諸多方面得到廣泛應(yīng)用。這是由于指紋是獨一無二的,兩人之間不存在著一樣的指紋,指紋是獨一無二的,兩人之間不存在著一樣的指紋,同時指紋樣本易于采集,難以偽造,便于開發(fā),實用性強,可以利用多個指紋構(gòu)成多重口令,提高系統(tǒng)的安全性。本文主要通過對MCS-51系列單片機的構(gòu)造和功能進展分析,來研究基于單片機指紋識別系統(tǒng)的內(nèi)部構(gòu)造特點和功能闡述以及工作原理,更好的了解了指紋識別系統(tǒng)的未來前景。第二章方案選擇2.1系統(tǒng)原理圖設(shè)計2.2方案說明2.1.1方案一:攝像頭采集、飛思卡爾單片機處理這種方案由指紋圖像采集、指紋圖像預(yù)處理、指紋特征提取、指紋特征匹配、特征數(shù)據(jù)庫等幾局部組成。指紋識別系統(tǒng)的原理框圖如圖1所示。圖2-1、指紋識別系統(tǒng)框圖該系統(tǒng)首先由數(shù)字攝像頭ov6620采集指紋,并將指紋圖像轉(zhuǎn)化為數(shù)字圖像;然后用16位的飛思卡爾X128單片機對指紋數(shù)字圖像進展預(yù)處理,再通過圖像增強、分割、平滑、細化等處理過程得到便于指紋特征提取的數(shù)字圖像:接著提取細化后的圖像細節(jié)特征點;然后將指紋信息數(shù)據(jù)送入STC89C52單片機中,一塊液晶1602與STC89C52單片機相連,液晶用于顯示當前指紋采集系統(tǒng)的工作狀態(tài)和經(jīng)比照后指紋采集的信息是否正確,用一個蜂鳴器和LED指示燈指示當前采集的指紋信息正確。當采集到的指紋信息正確,蜂鳴器發(fā)出響聲并且LED指示燈點亮。2.1.2方案二指紋識別傳感器代替第一種方案中的攝像頭和飛思卡爾單片機,我們利用一個指紋識別傳感器來對指紋進展采集,識別以及局部處理,然后將信息輸送到AT89C52單片機中,利用按鍵控制當前指紋識別的狀態(tài),用LED燈進展顯示,即錄入狀態(tài),識別狀態(tài),去除狀態(tài);利用液晶1602能夠顯示當前指紋識別的狀態(tài)信息,即錄入指紋的編號以及當前指紋;利用繼電器,對當前信息的判斷,例如提醒當前指紋識別錯誤;利用蜂鳴器提醒當前指紋識別是否正確,如果指紋錄入正確,蜂鳴器發(fā)出響聲。2.3方案比較1〕復(fù)雜性:方案一采取用數(shù)字攝像頭ov6620采集指紋圖像,然后用16位的飛思卡爾X128單片機進展圖像處理,還要進展圖像增強、分割、平滑、細化等處理過程才能得到便于指紋特征提取的數(shù)字圖像;而這些過程在方案二中只用一個指紋傳感器模塊就可以代替,所以方案二設(shè)計簡單。2〕準確性:方案一中所采集的攝像頭分辨率有限,所以采集的指紋信息有一定的誤差,方案二中指紋傳感器模塊是利用集成的光學(xué)頭進展處理的,比較準確。3〕局限性:由于方案一中使用的飛思卡爾單片機處理程序比較復(fù)雜,超出了我們的學(xué)習(xí)范圍,而方案二傳感器就使程序簡單化了。2.4方案選擇鑒于各種原因,我們最終選擇第二種方案,使用指紋傳感器模塊來設(shè)計系統(tǒng)。第三章硬件設(shè)計3.1AT89C52單片機設(shè)計3.1.1有12k字節(jié)Flash閃速存儲器,1024字節(jié)內(nèi)部RAM,32個I/O口線,兩個16位定時/計數(shù)器,5個中斷向量,一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。3.1.2引腳構(gòu)造圖〔如圖3-1圖3-1AT89C52管腳圖3.1.3一些端口的介紹P30口:RXD〔串行輸入口〕P31口:TXD〔串行輸出口〕XTAL1:振蕩器反相放大器的及內(nèi)部時鐘發(fā)生器的輸入端。XTAL2:振蕩器反相放大器的輸出端。3.1.4單片機最小系統(tǒng)1〕外部晶振的設(shè)計STC89C52的內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,通過XTAL1,ATAL2外部接上一片作為反響元件的晶體,與C1和C2構(gòu)成了并聯(lián)諧振電路,使其構(gòu)成自激振蕩器,電容的值具有微調(diào)的作用,我們?nèi)?0PF,具體的接法如圖3-2外部晶振電路。圖3-2外部晶振電路STC89C52的工作頻率范圍在0-24MHZ。我們選用的是11.0592MHZ的晶振,振蕩周期約為1us機器周期約為0.1us,所以這個晶振可以滿足這個系統(tǒng)的要求。并且晶振不能離單片機太遠,不然使用外部晶振進展軟件調(diào)試時就會發(fā)現(xiàn)找不到信號。2〕復(fù)位電路的設(shè)計MCS51單片機通常采用上電自動復(fù)位和按鈕復(fù)位兩種方式,本系統(tǒng)采用簡單的自動復(fù)位電路如圖2-2所示。單片機在上電瞬間,RC電路充電,RST引腳端出現(xiàn)正脈沖,只要RST端保持兩個機器周期以上的高電平,就能使單片機有效復(fù)位。其中電容選10uF、電容選10K。圖3-3復(fù)位電路3.2電源電路設(shè)計本系統(tǒng)采用的5V電源主要采用兩種方法,第一是直接用9V電池然后通過一個變壓電路,利用7805將轉(zhuǎn)化成5V供單片機和液晶顯示局部使用;其二是用220V通過變壓器等將其轉(zhuǎn)化成5V。兩種方法都可以,但是由于第一種方法便于攜帶、而且成本相對較低所以我們選用第一種方案。圖3-4電源電路3.3按鍵控制局部電路1〕消除抖動按鍵的閉合與否反響在電壓上就是呈現(xiàn)出高電平或低電平,如果高電平表示斷開,那么低電平那么表示閉合,通過電平的上下狀態(tài)的檢測可確認鍵按下與否。為了確保CPU對一次按鍵動作只確認一次,并且防止干擾信號的影響,必需參加消除電平抖動的措施,以以下圖3-5為按鍵抖動示意圖:圖3-5按鍵閉合及斷開前后的電壓消除抖動通常有硬、軟硬兩種方法,硬件消除抖動可采取雙穩(wěn)態(tài)電路或濾波消抖電路;軟件消抖是在第一次檢測到有鍵按下時,執(zhí)行一段延時程序再確認該鍵是否仍閉合,如果還是閉合狀態(tài)那么確認該鍵按下,從而消除抖動和干擾影響。當按鍵較多時,我們多采用硬件件消抖法。本系統(tǒng)中按鍵少直接采用直接接入的方式。2〕按鍵接口設(shè)計按鍵接口設(shè)計有兩種方法,獨立式按鍵和矩陣式鍵盤。獨立式按鍵各鍵相獨立,每個按鍵各接入一根輸入線,只要檢測輸入線的電平就可以識別按鍵狀態(tài)。這種方法電路配置靈活,軟件構(gòu)造簡單,但每個按鍵需占用一根輸入口。由于該設(shè)計方案IO資源浪費大。故此方法只適用于按鍵少或其他控制功能很簡單的場合。由于本設(shè)計中的按鍵只有3個,考慮系統(tǒng)可靠性和鍵盤設(shè)計的簡單所以采用獨立式按鍵。本系統(tǒng)的按鍵電路如圖3-6所示:圖3-6獨立按鍵電路按鍵按下是呈低電平,我們采用軟件消抖來減少對的單片機影響。3.4LED指示燈電路圖3-7LED燈指示電路當k2鍵按下時,錄入模式指示燈red亮;當k1鍵按下時,識別模式指示燈green亮。3.5蜂鳴器電路圖3-8蜂鳴器電路3.6指紋傳感器模塊1〕指紋模塊電路如下所示:圖3-9指紋識別模塊指紋模塊里面主要是DSP芯片,型號為PS1802,加上外面的CMOS芯片,CMOS芯片主要是對指紋進展“照相〞,生成指紋特征,如圖3-8所示就是一個指紋模板,錄入兩次這樣的指紋特征就能生成一個指紋模板。具體的工作過程是:掃描指紋〔錄入圖像〕、生成特征、合成模板〔建設(shè)一個指紋庫文件,成功錄入一個指紋〕。圖3-10指紋模板指紋模板就是“照一次相〞,指紋模塊里面的CMOS芯片采集一次指紋信息,然后進展模糊處理生成0和1兩種記錄信息,存入指紋模塊的FLASH芯片里面。當切換到識別模式的時候,指紋模塊就會先讓CMOS芯片采集一次指紋,然后和FLASH芯片的數(shù)據(jù)進展比照??词遣皇谴嬖冢绻嬖诰湍芊祷厥菐滋栔讣y。這樣我們就能通過單片機或者電腦進展指紋識別與登記了。2〕指紋傳感器模塊實物圖指紋模塊型號是:FM-180,此模塊上里面包含了:1、光學(xué)頭2、通信連接線3、DSP芯片〔在模塊里面〕4、穩(wěn)壓芯片5、FLASH芯片6、CMSO傳感器〔在模塊里面〕等部件組成。3、DSP芯片2、通信連接線1、光學(xué)頭3、DSP芯片2、通信連接線1、光學(xué)頭6、CMOS傳感器5、FLASH芯片4、穩(wěn)壓芯片6、CMOS傳感器5、FLASH芯片4、穩(wěn)壓芯片圖3-11指紋傳感器模塊實物圖第四章軟件程序設(shè)計該設(shè)計主要通過設(shè)定的3個按鍵來實現(xiàn)一定的功能,3個按鍵分別為模式切換〔識別模式和錄入指紋模式〕、指紋錄入、刪除所有指紋。4.1程序流程圖4.1.1〔1〕指紋錄入:先進展錄入模式,然后按一下錄入指紋,燈會閃爍,錄入成功一次,蜂鳴器響一次,這時候拿開手指,1秒放入同一個手指,會再錄入一次,如果兩次都成功,就成功錄入了一個指紋。蜂鳴器會響兩次,同時顯示錄入指紋成功。如果不成功就會顯示錄入失敗。錄入完成后,可以進入識別模式,或者接著錄入下一個指紋。錄入完成,按一次指紋轉(zhuǎn)換,進入指紋識別開鎖模式。單片機主程序流程設(shè)計:4.2系統(tǒng)關(guān)鍵代碼引腳使用:sbitrelay=P1^4;//繼電器引腳sbitbuzzer=P1^5;//蜂鳴器引腳sbitred=P2^7;//錄入模式指示燈在板子靠近單片機處sbitgreen=P2^0;//識別模式指示燈在板子遠離單片機處sbitk2=P3^4;//錄入一次指紋sbitk1=P3^3;//模式識別轉(zhuǎn)換sbitk3=P3^2;//去除所有指紋〔10個指紋去除〕局部主函數(shù)代碼:voidmain(void)//主函數(shù){ unsignedchari=0; ET0=1;//定時器0開中斷 TL0=0x97;//17ms的初值 TH0=0xBD;delay1ms(5);LcdRw=0;//只對液晶進展寫操作,不進展讀操作delay1ms(5);LCD_Initial();//液晶初始化delay1ms(5);GotoXY(0,0);//x,yPrint(Identify);//串口初始化SCON=0x50;//UART方式1:8位UART;REN=1:允許接收PCON=0x00;//SMOD=0:波特率不加倍TMOD=0x21;//T1方式2,用于UART波特率TH1=0xFD;TL1=0xFD;//UART波特率設(shè)置:9600TR1=1;TR0=1;//開定時器0 IT0=0;//中斷0低電平中斷 IT1=1;//中斷1低電平中斷 EX0=1;//開中斷0 EX1=1;//開中斷1EA=1; mode();//看當前是什么模式 for(i=0;i<6;i++)//開場握手6次,如果沒有一次成功,表示模塊通信不正常。只要成功就跳出此循環(huán) { if(VefPSW())//與模塊握手通過,綠燈亮起。進入識別模式 { green=0;//讀一次 buzzer=0; shownum(0); delay1ms(300); buzzer=1; break; } else { red=1; green=1; break; } }while(1) { if(k2==0)//錄入一個指紋 { delay1ms(10); if(k2==0)//如果仍為低電平,表示按鍵有效 { while(k2==0);//等待松手 if(VefPSW()==1&&modeflag==1&&SaveNumber<10)//與模塊握手通過 { if(enroll()==1)//采集兩次,生成1個指紋模板成功 { if(savefingure(SaveNumber+1)==1)//保存也成功 { SaveNumber++;//加一次 shownum(SaveNumber); } } } else { buzzer=0; for(i=0;i<8;i++) { delay1ms(100); red=~red; } red=0; buzzer=1; } } } if(modeflag==0)//為識別模式 { searchnum=search(); if(searchnum>=1&&searchnum<=162)//最多是162個指紋 { shownum(searchnum); //蜂鳴器響一聲 relay=0; buzzer=0; delay1ms(100); buzzer=1; for(i=0;i<20;i++) { delay1ms(150); } relay=1; } if(searchnum==255)//不正確的指紋蜂鳴器響三聲 { shownum(0); buzzer=0;delay1ms(100);buzzer=1;delay1ms(100); buzzer=0;delay1ms(100);buzzer=1;delay1ms(100); buzzer=0;delay1ms(100);buzzer=1;delay1ms(100); } } if(clearallflag==1) { clearallflag=0; Clear_All(); red=0; //紅色燈亮 green=1; //蜂鳴器長響一次,表示去除所有指紋完畢 modeflag=1;//進入錄入指紋模式 GotoXY(0,0);//x,y Print(Input); shownum(0); buzzer=0; delay1ms(800); buzzer=1; SaveNumber=0; } if(changeflag==1) { mode();//顯示當前模式 changeflag=0; } }/////////////while(1)完畢////////////////////////////////}voidint0(void)interrupt0//中斷0,去除所有指紋{ if(k3==0)//去除所有指紋 { delay1ms(10); if(k3==0)//如果仍為低電平,表示按鍵有效 { while(k3==0);//等待松手 clearallflag=1; changeflag=1; } } }voidTimer0(void)interrupt1//定時器0中斷函數(shù){ TL0=0x97; TH0=0xBD; clk0++;//延時17ms}voidint1(void)interrupt2//中斷1,模式轉(zhuǎn)換{ if(k1==0)//模式轉(zhuǎn)換其中用modeflag來標志,默認從第1個指紋開場錄入 { delay1ms(10); if(k1==0)//如果仍為低電平,表示按鍵有效 { while(k1==0);//等待松手 modeflag=~modeflag;//0表示錄入指紋1表示識別指紋 changeflag=1;//模式發(fā)生了轉(zhuǎn)換 } } }第五章調(diào)試完成了硬件的設(shè)計、制作和軟件編程之后,要使系統(tǒng)能夠按設(shè)計正常運行,必須進展硬件調(diào)試和軟件調(diào)試。5.1硬件調(diào)試硬件調(diào)試的主要任務(wù)是排除硬件故障,其中包括設(shè)計錯誤和工藝性故障。(1)在電路的電源焊接一個電源指示燈,判斷電路中通電是否正常。(2)將電路中的電源線布置在通用板的四周,這樣使用電源很方便,減少干擾,同時可以減少短路故障發(fā)生的可能?!?〕元器件合理布局,且盡量減少占用板子的面積,力爭做到節(jié)省。特別是單片機的晶振盡量靠近單片機,減少干擾?!?〕液晶的焊接注意方向,且調(diào)節(jié)背光的電位器不可以少。5.2軟件調(diào)試軟件調(diào)試的任務(wù)是利用開發(fā)工具進展在線仿真調(diào)試,發(fā)現(xiàn)和糾正程序錯誤,同時也能發(fā)現(xiàn)硬件故障。程序的調(diào)試應(yīng)一個模塊一個模塊地進展,首先單獨調(diào)試各功能子程序,檢驗程序是否能夠?qū)崿F(xiàn)預(yù)期的功能,接口電路的控制是否正常等;最后逐步將各子程序連接起來總調(diào)。聯(lián)調(diào)需要注意的是,各程序模塊間能否正確傳遞參數(shù),特別要注意各子程序的現(xiàn)場保護與恢復(fù)。本設(shè)計主要有:eq\o\ac(○,1)指紋識別傳感器圖像采集模塊eq\o\ac(○,2)單片機圖像處理eq\o\ac(○,3)按鍵模塊和指示燈模塊eq\o\ac(○,4)指紋液晶顯示和蜂鳴器、繼電器模塊不斷地對單片機下程序,觀看調(diào)試結(jié)果。參考文獻[1]河橋,段清明,邱春玲.單片機原理及應(yīng)用.北京:中國鐵道出版社,2007.12[2]馮星奎,李林艷,顏祖泉.一種新的指紋圖像細化算法.中國圖像圖形學(xué)報,1999,4(10)835-838.[3]呂鳳軍.數(shù)字圖象處理編程入門一一做一個自己的Photoshop.北京:清華大學(xué)出版社,1999.[4]劉文星,王雄沂,母國光.紋線跟蹤及其在細化指紋后處理中的應(yīng)用.光電子·傲光,2002,13(2):184-187.[5]劉家鋒,唐降龍,趙泉.一個基于特征點匹配的聯(lián)機指紋鑒別系統(tǒng).哈爾濱工業(yè)大學(xué)學(xué)報,2002.34(1):132-136[6]簡兵,莊鎮(zhèn)泉等.基于脊線跟蹤的指紋圖細節(jié)提取算法.電路與系統(tǒng)學(xué)報,2001[7]劉旭,田捷.自動指紋識別算法在嵌入式系統(tǒng)的實現(xiàn)[J].計算機工程與應(yīng)用,2002.[8]周毅,等著.基于SPI協(xié)議的實現(xiàn),計算機仿真.2003.[9]竇振中.單片機外圍器件實用手冊(存儲器分冊).北京:北京航空航天大學(xué)出版社,20O0[10]李華.MCS-51系列單片機實用接口技術(shù).北京:北京航空航天大學(xué)出版社,1998[11]張培仁,孫占輝,張村峰.基于c語言編程MCS一51單片機原理與應(yīng)用[M].北京:清華大學(xué)出版社,2003.附件2程序清單#include<reg52.h>#include<intrins.h>#include"lcd1602.h"sbitrelay=P1^4;//繼電器引腳sbitbuzzer=P1^5;//蜂鳴器引腳sbitred=P2^7;//錄入模式指示燈在板子靠近單片機處sbitgreen=P2^0;//識別模式指示燈在板子遠離單片機處sbitk2=P3^4;//錄入一次指紋sbitk1=P3^3;//模式識別轉(zhuǎn)換sbitk3=P3^2;//去除所有指紋〔10個指紋去除〕#defineMax_User10#defineerror2unsignedchar SaveNumber=0,searchnum=0;unsignedint SearchNumber=0; unsignedint clk0=0;unsignedcharstr[3]={0,'\0','\0'};unsignedcharcodeIdentify[16]="Lock:Idenfity";unsignedcharcodeInput[16]="Lock:Input";bitmodeflag=0,clearallflag=0,changeflag=0;//默認為識別模式////////////////常用指令定義///////////////////////////////VerifyPassword:驗證設(shè)備握手口令unsignedcharcodeVPWD[16]={16,0X01,0Xff,0xff,0xff,0xff,0x01,0,7,0x13,0x00,0x00,0x00,0x00,0x00,0x1b}; //回送12個//設(shè)置設(shè)備握手口令unsignedcharcodeSTWD[16]={16,0X01,0Xff,0xff,0xff,0xff,0x01,0,7,0x12,0x00,0x00,0x00,0x00,0x00,0x1a}; //回送12個//GetImage:探測手指并從傳感器上讀入圖像unsignedcharcodeGIMG[14]={12,0X01,0Xff,0xff,0xff,0xff,0x01,0,3,1,0x00,0x05}; //回送12個//GenTemplet1:根據(jù)原始圖像生成指紋特征1unsignedcharcodeGENT1[14]={13,0X01,0Xff,0xff,0xff,0xff,0x01,0,4,2,1,0x00,0x08}; //回送12個//GenTemplet2:根據(jù)原始圖像生成指紋特征2unsignedcharcodeGENT2[14]={13,0X01,0Xff,0xff,0xff,0xff,0x01,0,4,2,2,0x00,0x09};//回送12個 //SearchFinger:以CharBufferA或CharBufferB中的特征文件搜索整個或局部指紋庫unsignedcharcodeSEAT[18]={17,0X01,0Xff,0xff,0xff,0xff,0x01,0,8,4,1,0,0,0,0x65,0x00,0x73}; //回送16個//MergeTemplet;將CharBufferA與CharBufferB中的特征文件合并生成模板,結(jié)果存于ModelBuffer。unsignedcharcodeMERG[14]={12,0X01,0Xff,0xff,0xff,0xff,0x01,0,3,5,0x00,0x09};//回送12個//StoreTemplet:將ModelBuffer中的文件儲存到flash指紋庫中unsignedcharcodeSTOR[16]={15,0X01,0Xff,0xff,0xff,0xff,0x01,0,6,6,2,0x00,0x00,0x00,0x0f};//回送12個//ReadNoteunsignedcharcodeRDNT[14]={13,0X01,0Xff,0xff,0xff,0xff,0x01,0,4,0x19,0,0x00,0x1e};//ClearNoteunsignedcharcodeDENT[46]={45,0X01,0Xff,0xff,0xff,0xff,0x01,0,36,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x00,0x3d};//DELonetempletunsignedcharcodeDELE_one[16]={16,0X01,0Xff,0xff,0xff,0xff,0x01,0,7,0x0c,0x00,0x00,0,1,0x00,0x15};//DELtemplet;清空指紋庫unsignedcharcodeDELE_all[12]={12,0X01,0Xff,0xff,0xff,0xff,0x01,0,3,0x0d,0x00,0x11};////////常用指令定義完畢///////////////////////////宏定義///////////////////#defineFALSE0#defineTURE1//狀態(tài)定義表#defineon 1#defineoff 0#defineMAX_NUMBER63#define_Nop()_nop_()////////////////宏定義完畢///////////////////////unsignedchar FifoNumber=0;xdataunsignedcharFIFO[MAX_NUMBER+1]={0};/*********1毫秒延時程序**********/voiddelay1ms(unsignedintt){ unsignedinti,j; for(i=0;i<t;i++) for(j=0;j<120;j++) ;}voidTxdByte(unsignedchardat)//串口發(fā)送信息,通過查詢方式發(fā)送一個字符{TI=0; //讓TI=0SBUF=dat; //讀入數(shù)據(jù)while(!TI); //等待發(fā)送完畢TI=0; //清零}bitCommand(unsignedchar*p,unsignedcharMaxTime)//命令解析,給模塊發(fā)送一個命令{ unsignedcharcount=0,tmpdat=0,temp=0,i=0,package=0,flag=0,checksum=0; bitresult=0,start=0,stop=0; TxdByte(0xef);//數(shù)據(jù)包包頭識別碼 TxdByte(0x01);//數(shù)據(jù)包包頭識別碼 i=*p;//數(shù)組的第“0〞個元素、里面存放了本數(shù)組的長度,把這個長度給變量i,方便進展操作 p++; p++; for(count=i-1;count!=1;count--)//SentcommandString { temp=*p++;//取第個“1〞個元素的內(nèi)容,然后發(fā)送 TxdByte(temp);//將數(shù)據(jù)發(fā)送出去 } result=TURE;//發(fā)送完成,結(jié)果為真(真為1) FifoNumber=0; for(count=MAX_NUMBER+1;count!=0;count--)//清空所有FIFO[]數(shù)組里面的內(nèi)容,寫入0X00 FIFO[count-1]=0x00; if(result) { result=FALSE; start=FALSE; stop=FALSE; count=0; clk0=0; //清零CL0計數(shù) do//////////do的內(nèi)容//////////////////////////////// { restart0: if(RI==1)//如果接收到數(shù)據(jù) { tmpdat=SBUF;//先把接收到的數(shù)據(jù)放到tmpdat中 RI=0; if((tmpdat==0xef)&&(start==FALSE))//這個數(shù)據(jù)為第一個傳回來的數(shù)據(jù),也就是“指令應(yīng)答〞的第一個字節(jié) { count=0; FIFO[0]=tmpdat;//讀入第一個應(yīng)答字節(jié)(0XEF),存在第“0〞個元素中 flag=1; goto restart0;//可以用中斷方式進展 } if(flag==1)//第一個字節(jié)已經(jīng)回來,所以flag==1成立 { if(tmpdat!=0x01)//接收數(shù)據(jù)錯誤,將重新從緩沖區(qū)接收數(shù)據(jù) { flag=0;//接收應(yīng)答失敗 result=FALSE; start=FALSE; stop=FALSE; count=0; goto restart0; } //如果成功接收到0xef01,可以開場接收數(shù)據(jù) flag=2;//flag=2;表示應(yīng)答成功,可以開場接收數(shù)據(jù)了 count++;//現(xiàn)在count=1; FIFO[count]=tmpdat;//讀入第二個應(yīng)答字節(jié)〔0X01〕,存在第“1〞個元素中 start=TURE; //應(yīng)答成功可以開場接收數(shù)據(jù) goto restart0; } if((flag==2)&&(start==TURE))//flag=2;表示應(yīng)答成功,可以開場接收數(shù)據(jù)了 { count++;//數(shù)據(jù)元素下標++ FIFO[count]=tmpdat;//存入數(shù)據(jù) if(count>=6) { checksum=FIFO[count]+checksum;//計算校驗和 } if(count==8) { package=FIFO[7]*0X100+FIFO[8]; //計算包長度 stop=TURE; } if(stop) { if(count==package+8) { checksum=checksum-FIFO[count-1]; if(checksum!=FIFO[count]&0xff) result=FALSE;//校驗失敗,置結(jié)果標志為0 else result=TURE; flag=0; break; } } } }}/////////////////////////////do的內(nèi)容完畢//////////////////////////////// while((clk0<=MaxTime)&&(count<=MAX_NUMBER)&&(changeflag==0));//由定時器以及最大接收數(shù)據(jù)來控制,保證不會在此一直循環(huán)FifoNumber=count; //保存接收到的數(shù)據(jù)個數(shù) }return(result);}bitVefPSW(void)//驗證設(shè)備握手口令,成功返回1{ unsignedcharcount=0; while(1) { if(Command(VPWD,20)&&(FifoNumber==11)&&(FIFO[9]==0x00)) return(1); count++; if(count>=2)//如果不成功,再驗證一次,如果兩次不成功,返回失敗 { return(0); } }}voidClear_All(void)//清空指紋庫{ delay1ms(200); Command(DELE_all,50);//清空指紋庫 }unsignedcharImgProcess(unsignedcharBUFID)//發(fā)獲取圖像并生成特征文件,存入BUFID中//輸入?yún)?shù)為緩沖區(qū)號{ if(Command(GIMG,89)&&(FifoNumber==11)&&(FIFO[9]==0x00)){ if(BUFID==1) { if(Command(GENT1,60)&&(FifoNumber==11)&&(FIFO[9]==0x00)) { return1; } else { return0; } } elseif(BUFID==2) { if(Command(GENT2,60)&&(FifoNumber==11)&&(FIFO[9]==0x00)) { return1; } else { return0; } }}else{return0;} return0;}bitSearchfinger(void)//搜索指紋(發(fā)送搜索命令、以及根據(jù)返回值確定是否存在){ if(Command(SEAT,60)&&(FifoNumber==15)&&(FIFO[9]==0x00))//搜索到指紋{ SearchNumber=FIFO[10]*0x100+FIFO[11];//搜索到的頁碼 //MatchScore=FIFO[12]*0x100+FIFO[13]可以在此計算得分,從而進展安全級別設(shè)定,本程序忽略 return1; }else{ return0;}}unsignedcharsearch(void)//搜索用戶{ unsignedcharSearchBuf=0,i=0; while(i<20){ if(ImgProcess(1)==1)//首先讀入一次指紋 { SearchBuf=Searchfinger();//進展指紋比對,如果搜索到,返回搜索到的指紋序號 if(SearchBuf==1) { returnSearchNumber; } else { return255;//表示搜索到的指紋不正確 } } i++; }return0;}bitsavefingure(unsignedcharID)//保存指紋{ unsignedchari=0; //現(xiàn)在開場進展存儲指紋模板的操作for(i=0;i<16;i++) //保存指紋信息 { FIFO[i]=STOR[i]; }FIFO[12]=ID;//把指紋模板存放的PAGE_ID也就是FLASH的位置FIFO[14]=FIFO[14]+ID; //校驗和if(Command(FIFO,70)==1)//不成功返回0 //此處進展存放指紋模板的命 {return(1);}else {return(0);}//不成功返回0}unsignedcharenroll(void)//采集兩次指紋,生成1個指紋模板{ unsignedchartemp=0,count=0; while(1) { temp=ImgProcess(1);//生成特征1 if(temp==1)//生成特征文件成功 { break; } else { if(temp==0)//采集指紋沒有成功 { count++; if(count>=40)//如果采集了40次,還不成功,直接采集失敗,直接退出enroll函數(shù)----返回0 return(0);}} } //采集第一個特征成功 count=0; buzzer=0; delay1ms(100); buzzer=1; delay1ms(2000);//延時2S開場采集下一個特征 //開場采集第二個特征 while(1) { temp=ImgProcess(2);//生成特征2 if(temp==1)//生成特征文件2成功 { if((Command(MERG,40)&&(FifoNumber==11)&&(FIFO[9]==0x00))==0)//合并不成功返回0,成功返回1 { return0; } else//特征文件合并生成模板,結(jié)果存于ModelBuffer { buzzer=0; delay1ms(100); buzzer=1; delay1ms(100); buzzer=0; delay1ms(100); //響兩聲,表示生成一個模板成功 buzzer=1; return1; } } else { if(temp==1)//采集指紋沒有成功 { count++; if(count>=25) return(0); } } }}voidshownum(unsignedchardat){ unsignedcharnumdat=0; numdat=dat; GotoXY(0,1);//x,y Print("Finger:"); GotoXY(0,8);//x,y str[0]=0x30+numdat/10; str[1]=0x30+numdat%10; Print(str);}voidmode(void){ if(modeflag==0) { GotoXY(0,0);//x,y Print(Identify); green=0; red=1; } else { GotoXY(0,0);//x,y Print(Input); red=0; green=1; } shownum(0);}voidmain(void)//主函數(shù){ unsignedchari=0; ET0=1;//定時器0開中斷 TL0=0x97;//17ms的初值 TH0=0xBD;delay1ms(5);LcdRw=0;//只對液晶進展寫操作,不進展讀操作delay1ms(5);LCD_Initial();//液晶初始化delay1ms(5);GotoXY(0,0);//x,yPrint(Identify);//串口初始化SCON=0x50;//UART方式1:8位UART;REN=1:允許接收PCON=0x00;//SMOD=0:波特率不加倍TMOD=0x21;//T1方式2,用于UART波特率TH1=0xFD;TL1=0xFD;//UART波特率設(shè)置:9600TR1=1;TR0=1;//開定時器0 IT0=0;//中斷0低電平中斷 IT1=1;//中斷1低電平中斷 EX0=1;//開中斷0 EX1=1;//開中斷1EA=1; mode();//看當前是什么模式 for(i=0;i<6;i++)//開場握手6次,如果沒有一次成功,表示模塊通信不正常。只要成功就跳出此循環(huán) { if(VefPSW())//與模塊握手通過,綠燈亮起。進入識別模式 {
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國計量儀器管理系統(tǒng)行業(yè)投資前景及策略咨詢研究報告
- 2025年無刷高速柔性減速電機項目可行性研究報告
- 2025至2030年黃體酮注射液項目投資價值分析報告
- 2025至2030年油脂添加劑項目投資價值分析報告
- 2025至2030年日用生活瓷項目投資價值分析報告
- 2025至2030年平車機架臺板項目投資價值分析報告
- 2025至2030年側(cè)滑蓋手機項目投資價值分析報告
- 房屋維修委托協(xié)議
- 手房買賣合同正式
- 工程第三方支付擔(dān)保合同
- 護士團隊的協(xié)作和領(lǐng)導(dǎo)力培養(yǎng)培訓(xùn)課件
- QFD模板含計算公式計分標準說明模板
- 慢阻肺試題練習(xí)
- 人工智能在生物醫(yī)學(xué)倫理與法律中的基因編輯與生命倫理問題研究
- 饅頭制作過程
- 國有資產(chǎn)管理辦法-國有資產(chǎn)管理辦法條例
- 公務(wù)車輛定點維修車輛保養(yǎng)(附彩圖) 投標方案
- 00015-英語二自學(xué)教程-unit3
- 第二章共混改性基本原理
- 乳腺專業(yè)知識課件
- 碳納米管及其應(yīng)用課件
評論
0/150
提交評論