基于.單片機(jī)指紋識(shí)別系統(tǒng)設(shè)計(jì)_第1頁(yè)
基于.單片機(jī)指紋識(shí)別系統(tǒng)設(shè)計(jì)_第2頁(yè)
基于.單片機(jī)指紋識(shí)別系統(tǒng)設(shè)計(jì)_第3頁(yè)
基于.單片機(jī)指紋識(shí)別系統(tǒng)設(shè)計(jì)_第4頁(yè)
基于.單片機(jī)指紋識(shí)別系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論