找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18825|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機指紋識別設(shè)計論文

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:187525 發(fā)表于 2017-5-6 16:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
   


1        引言        1
1.1        指紋識別簡介        1
1.1.1        指紋識別原理        1
1.1.2        指紋識別應(yīng)用        2
1.1.3        指紋識別技術(shù)的發(fā)展        2
1.2        系統(tǒng)設(shè)計的目的        3
1.3        課題背景        3
2        整體設(shè)計方案        4
2.1        系統(tǒng)總體設(shè)計        4
2.1.1        系統(tǒng)功能描述        4
2.1.2        系統(tǒng)總體框架        4
2.2        系統(tǒng)核心部件單片機        5
2.2.1        單片機的選擇        5
2.2.2        ATMEG16單片機的介紹        7
2.2.3        單片機的復(fù)位電路        9
2.2.4        ATMEG16最小系統(tǒng)及晶振的選擇        10
2.3        液晶顯示模塊        11
2.3.1        HS12864-15C系列液晶的特點        11
2.3.2        HS12864-15C系列液晶的引腳功能        12
2.3.3        液晶顯示HS12864-15C的指令系統(tǒng)        13
2.4        電源和指紋模塊        13
2.4.1        ZAZ-010系列獨立式指紋識別模塊引腳功能        14
2.4.2        ZAZ-010系列指紋識別模塊指令系統(tǒng)        15
2.4.3        電源模塊        17
3        系統(tǒng)軟件的設(shè)計        19
3.1        系統(tǒng)程序工作分析        19
3.2        設(shè)計前準(zhǔn)備工作        19
3.3        單片機的程序設(shè)計        20
3.3.1        鍵盤管理程序設(shè)計流程        22
3.3.2        LCD顯示模塊程序設(shè)計流程        22
3.3.3        指紋通信模塊的程序設(shè)計流程        23
4        實物的制作與調(diào)試        24
4.1        電路的焊接        24
4.2        電路和程序的調(diào)試        25
4.2.1        單片機的程序下載        25
4.2.2        串口調(diào)試        25
4.2.3        液晶鍵盤調(diào)試        26
結(jié)            27
參考文獻(xiàn)        28
附錄1:串口調(diào)試子程序        29
附錄2:整體源程序        31
附錄3:硬件電路圖        48
            49



1 引言
我們今天的工作生活中,很多的場合都需要身份的認(rèn)證,而傳統(tǒng)的基于標(biāo)志的身份認(rèn)證技術(shù)由于受到證件偽造以及密碼破解等手段的威脅,逐漸表現(xiàn)得有些力不從心。怎樣保護(hù)自己的重要文件資料,如何保證自己的隱私不被泄露?在傳統(tǒng)的身份認(rèn)證中,我們往往使用密碼加密法,但是這種方法只是"防君子不防小人"。在高明的黑客眼里,由幾個字符組成的密碼脆弱得不堪一擊,F(xiàn)在,科技的發(fā)展讓我們有了新的選擇——生物識別技術(shù)。將生物識別技術(shù)應(yīng)用于筆記本、門鎖等方面,可以對文件、財產(chǎn)起保護(hù)作用,并且可以進(jìn)行身份識別。
生物識別技術(shù)是依據(jù)人的體貌、聲音等生物特征進(jìn)行身份驗證的科學(xué)解決方案,現(xiàn)有的生物識別技術(shù)大致上包括指紋識別技術(shù)、掌紋識別技術(shù)、視網(wǎng)膜識別技術(shù)、虹膜識別技術(shù)、面相識別技術(shù)、聲音識別技術(shù)和筆跡識別技術(shù)等。生物識別技術(shù)的優(yōu)勢主要有:1、減少、消除身份假冒,進(jìn)行真實身份的確認(rèn);2、降低管理成本,取代了身份人工認(rèn)證過程;3、方便使用者,減少或消除了使用卡、鑰匙或者密碼等麻煩。生物識別技術(shù)的發(fā)展主要起始于指紋研究,它亦是目前應(yīng)用最為廣泛的生物識別技術(shù)。
指紋識別技術(shù)的發(fā)展得益于現(xiàn)代電子集成制造技術(shù)和快速可靠的算法的研究。盡管指紋只是人體皮膚的小部分,但用于識別的數(shù)據(jù)量相當(dāng)大,對這些數(shù)據(jù)進(jìn)行比對也不是簡單的相等與不相等的問題,而是使用需要進(jìn)行大量運算的模糊匹配算法,F(xiàn)代電子集成制造技術(shù)使得我們可以制造相當(dāng)小的指紋圖像讀取設(shè)備,同時飛速發(fā)展的個人計算機運算速度提供了在微機甚至單片機上可以進(jìn)行兩個指紋的比對運算的可能。另外,匹配算法可靠性也不斷提高,指紋識別技術(shù)己非常實用。
1.1  指紋識別簡介
1.1.1 指紋識別原理
指紋識別技術(shù)的原理和其它生物識別技術(shù)的原理相似。它是利用人體的指紋特征對個體身份進(jìn)行區(qū)分和鑒定。在所有的生物識別技術(shù)中指紋識別技術(shù)是目前最為成熟,也被應(yīng)用最廣的生物識別技術(shù)。這主要因為指紋采用的過程對人們來講非常簡單,指紋識別的準(zhǔn)確率高的原因。嚴(yán)格來講,指紋識別的原理包括指紋采集原理、指紋特征提取原理和指紋特征匹配原理三大部分。指紋采集原理主要是根據(jù)指紋的幾何特性或生理特性,通過各種傳感技術(shù)把指紋表現(xiàn)出來,形成數(shù)字化表示的指紋圖案。
由于指紋的嵴和峪的幾何特征不同,主要表現(xiàn)為嵴是突起的,峪是凹下的,所以在接觸到光線時,其反射光的強度也就不同。在接觸到平面時,其在平面上形成的壓力也就不同。另一方面,由于指紋的嵴和峪的生理特征不同,主要表現(xiàn)為:嵴和峪的溫度不同,其導(dǎo)電性也不同,其對波長的反饋也就不同。通過這些幾何的、生理的特性的不同,把人的指紋采集到計算機系統(tǒng)中形成指紋圖像。
指紋特征分析的原理是對指紋圖案的整體特征和細(xì)節(jié)特征進(jìn)行提取、鑒別的原理。其分析的對象包括紋形特征和特征點的分布、類型,以及一組或多組特征點之間的平面幾何關(guān)系。特征點的平面幾何關(guān)系表現(xiàn)為某個特征點之間的距離等,或者某三個或更多特征點之間組成的多邊形的幾何特性。不論是特征點的單體特征,還是特征點的組合特征都是指紋特征的組成部分。把這些指紋特征用數(shù)字模板的形式表示出來,就實現(xiàn)了一個指紋特征分析的過程。把人的指紋采集到計算機系統(tǒng)中形成指紋圖像。
指紋特征值匹配原理是對指紋圖案的整體特征和細(xì)節(jié)特征按模式識別的原理進(jìn)行比對匹配。匹配是在已注冊的指紋和當(dāng)前待驗證的指紋之間進(jìn)行的。匹配運算不是對兩個指紋圖像進(jìn)行比較,而是對已形成數(shù)字模板的指紋特征值進(jìn)行匹配。
1.1.2 指紋識別應(yīng)用
指紋識別技術(shù)是最早的通過計算機實現(xiàn)的身份識別手段,它是應(yīng)用最為廣泛的生物特征識別技術(shù)。過去,它主要應(yīng)用于刑偵系統(tǒng)。近幾年來,它逐漸走向市場更為廣泛的民用市場。指紋技術(shù)在現(xiàn)代生活和工作中的應(yīng)用已越來越普遍,指紋考勤機、指紋社保、指紋銀行、指紋商場、指紋投票、指紋保護(hù)電腦、等等生活中和工作中的新現(xiàn)象已廣為人知,其應(yīng)用相當(dāng)廣泛,指紋技術(shù)正在日益刷新著我們的現(xiàn)代化生活方式。指紋識別技術(shù)是目前國際公認(rèn)的應(yīng)用廣泛、價格低廉、易用性高的生物認(rèn)證技術(shù)。指紋只是人體皮膚的小部分,但是它卻蘊涵了大量的信息。這些皮膚的紋路在圖案、斷點和交叉點上是各不相同的,在信息處理中將它們稱作"特征"。醫(yī)學(xué)上已經(jīng)證明這些特征對于每個手指都是不同的,而且這些特征具有唯一性和永久性。因此我們就可以把一個人同他的指紋對應(yīng)起來,通過比較他的指紋特征和預(yù)先保存的指紋特征,就可以驗證他的真實身份。
1.1.3 指紋識別技術(shù)的發(fā)展
在經(jīng)歷了近 10 年緩慢的自然增長后,指紋識別技術(shù)即將迎來一個跳躍性發(fā)展的黃金時期。專家們保守估計,未來 5 年,我國將有近百億元的市場等待著企業(yè)去開拓。指紋識別技術(shù)的巨大市場前景,將對國際、國內(nèi)安防產(chǎn)業(yè)產(chǎn)生巨大的影響。較小的公司將面臨新進(jìn)入的傳統(tǒng)行業(yè)大公司的無情競爭。在這些巨無霸面前,現(xiàn)有中小公司很難說有太大的競爭力,行業(yè)重新洗牌不可避免,合并與退出可能會成為大部分中小公司的無奈選擇。最終可能形成傳統(tǒng)行業(yè)的公司或大資本在較短時間內(nèi)主導(dǎo)生物特征識別行業(yè)的局面。這也是每一個新興市場的必然結(jié)果。而競爭的結(jié)果將會形成一個新興的大產(chǎn)業(yè)。
國內(nèi)生物識別技術(shù)的應(yīng)用主要集中在企業(yè)級應(yīng)用上,在 2002年總體約為2.5億元人民幣的終端市場中,超過 40%的產(chǎn)品都用于考勤、門禁系統(tǒng)之中。自2002年以來整個生物識別市場中指紋識別占據(jù)了超過 98%的份額,從需求看,中國 13 億人口決定了中國將是未來全球最大的指紋識別認(rèn)證技術(shù)市場
1.2  系統(tǒng)設(shè)計的目的
現(xiàn)代社會越來越需要高效可靠的身份識別系統(tǒng)。傳統(tǒng)的個人身份鑒別手段如口令、密碼、身份-甚至磁卡、IC 卡等識別卡方式。由于其與身份人的可分離性,可假冒、可偽造、可盜用、可破譯,已不能完全滿足現(xiàn)代社會經(jīng)濟活動和社會安全防范的需要。從消除人為不安全因素看,只有不易被他人代替、仿制、甚至其本人也無法轉(zhuǎn)讓的身份誤碼別憑證才能勝任。因此,基于人體生理特征的身份識別系統(tǒng)逐漸為社會所矚目。隨著識別技術(shù)的不斷成熟,隨著計算機技術(shù)的飛速發(fā)展,各種基于人體生理特征的身份識別系統(tǒng)如:指紋、手掌、聲音、視網(wǎng)膜、瞳孔、面紋等識別技術(shù)紛紛從實驗室中走出來,由小型機落戶微機,走向民用。而從易用性、安全性、成熟性和造價等方面綜合比較,指紋識別技術(shù)將成為未來人體生理特征身份識別技術(shù)的主流之一,指紋自動識別技術(shù)開創(chuàng)了個人身份鑒別的新時代,將來我們生活的很多場 合都要用到指紋,指紋使我們的生活更方便、安全。
1.3  課題背景
指紋檢測可以良好的判斷和定義一個人的真實生物身份,從而降低社會活動中的信任成本。從根本上改變經(jīng)濟和社會交往模式,提高效率。未來社會利用生物識別技術(shù)的場合將會越來越多,指紋識別技術(shù)日趨完善,指紋檢測變得越發(fā)重要。本次設(shè)計指紋識別電子密碼鎖是基于深圳指昂科技有限公司生產(chǎn)的ZAZ-010指紋模塊,可以根據(jù)串口通信協(xié)議與上位機實現(xiàn)通信,從而實現(xiàn)指紋的錄入、存儲、比對,并通過HS12864-15C液晶顯示出指紋采集存儲的過程和比對的結(jié)果。指紋電子密碼鎖安全可靠,使用方便。



2 整體設(shè)計方案
2.1  系統(tǒng)總體設(shè)計
2.1.1 系統(tǒng)功能描述
本系統(tǒng)是針對指紋采集、識別模塊開發(fā)出的指紋識別電子密碼鎖系統(tǒng)。該系統(tǒng)使用指紋模塊搜索手指,一旦搜索到手指,立即采集指紋圖像,并將采集到的圖像轉(zhuǎn)化成數(shù)據(jù)的形式發(fā)送出去。它利用人體指紋各異性和不變性,為用戶提供加密手段,使用時只需將手指平放在指紋采集儀的采集窗口上,即可完成采集任務(wù),操作十分方便快捷。主要功能就是用液晶顯示出指紋模塊采集指紋圖像各個流程及比對的結(jié)果.采集指紋圖像之前,指紋模塊必須要檢測手指是否放在采集窗口上,所以就要有錄入指紋這一項功能。簡單的描述本次設(shè)計的功能即使用指紋模塊檢測、錄入指紋,將比對的數(shù)據(jù)顯示在液晶屏幕上.本系統(tǒng)擁有一次最多錄入三個指紋的能力。
該系統(tǒng)的主要功能有以下幾個方面:
1.錄入指紋:系統(tǒng)預(yù)先要有錄入指紋的功能,即將個人的指紋通過指紋采集器采集用戶指紋的特征信息。
2.合成指紋模板并存儲:通過光電轉(zhuǎn)換后,將指紋特征值和對應(yīng)的 ID 號存儲到存儲器中。上位機只要有上傳指紋的命令,模塊可以立即將數(shù)據(jù)傳送到指定位置。
3.搜索指紋庫比對指紋:當(dāng)有指紋錄入時,模塊會響應(yīng)上位機指令搜索指紋庫比對指紋,同時液晶顯示比對結(jié)果,繼電器動作、發(fā)光二極管亮。
2.1.2 系統(tǒng)總體框架
系統(tǒng)的總體框架是指根據(jù)設(shè)計任務(wù)要求,對系統(tǒng)所需元件、設(shè)備參數(shù)進(jìn)行必要的計算,通過認(rèn)真研究、分析、比較選定設(shè)備型號,再將設(shè)備、元件通過可靠的接口電路聯(lián)系起來構(gòu)成一個完整的系統(tǒng)。在系統(tǒng)的整體方案確定之前,先要明確設(shè)計要求,然后對系統(tǒng)硬件、軟件進(jìn)行設(shè)計,其中包括繪制原理框圖、電路圖,對原理進(jìn)行必要說明,綜合考慮系統(tǒng)的性能和穩(wěn)定性要求,以保證所設(shè)計的系統(tǒng)達(dá)到預(yù)期的要求。通過查閱大量的文獻(xiàn)資料、綜合分析考慮 。主控芯片選用Atmeg16單片機。系統(tǒng)總體框圖如圖2-1所示:

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAC85.tmp.png
圖 2-1 系統(tǒng)總體框圖

系統(tǒng)主要由MCU、液晶屏、指紋模塊組成. 系統(tǒng)的工作方式主要是,當(dāng)檢測到有按鍵按下時先由MCU通過串口通信控制指紋模塊對指紋進(jìn)行采集、錄入、存儲、比對。然后,根據(jù)所得的數(shù)據(jù)對其它接口器件,如液晶屏、繼電器進(jìn)行響應(yīng)操作。
2.2  系統(tǒng)核心部件單片機
2.2.1 單片機的選擇
單片機微型計算機是微型計算機的一個重要分支,也是頗具生命力的機種。單片機微型計算機簡稱單片機,特別適用于控制領(lǐng)域,故又稱為微控制器。
通常,單片機由單塊集成電路芯片構(gòu)成,內(nèi)部包含有計算機的基本功能部件:中央處理器、存儲器和I/O接口電路等。因此,單片機只需要和適當(dāng)?shù)能浖巴獠吭O(shè)備相結(jié)合,便可成為一個單片機控制系統(tǒng)。
20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。時間對人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時間。忘記了要做的事情,當(dāng)事情不是很重要的時候,這種遺忘無傷大雅。但是,一旦重要事情,一時的耽誤可能釀成大禍。
目前,單片機正朝著高性能和多品種方向發(fā)展趨勢將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價格和外圍電路內(nèi)裝化等幾個方面發(fā)展。單片機應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計思想和設(shè)計方法。從前必須由模擬電路或數(shù)字電路實現(xiàn)的大部分功能,現(xiàn)在已能用單片機通過軟件方法來實現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。
單片機經(jīng)過1、2、3代的發(fā)展,正朝著多功能、高性能、低電壓、低功耗、低價格、大存儲容量、強I/O功能及較好的結(jié)構(gòu)兼容性方向發(fā)展。其發(fā)展趨勢不外乎以下幾個方面:
1.多功能     
單片機中盡可能地把所需要的存儲器和I/O口都集成在一塊芯片上,使得單片機可以實現(xiàn)更多的功能。比如A/D、PWM、PCA(可編程計數(shù)器陣列)、WDT(監(jiān)視定時器---看家狗)、高速I/O口及計數(shù)器的捕獲/比較邏輯等。
有的單片機針對某一個應(yīng)用領(lǐng)域,集成了相關(guān)的控制設(shè)備,以減少應(yīng)用系統(tǒng)的芯片數(shù)量。例如,有的芯片以MEG16為核心,集成了USB控制器、SMART CARD接口、MP3解碼器、CAN或者I*I*C總線控制器等,LED、LCD或VFD顯示驅(qū)動器也開始集成在8位單片機中。
2.高效率和高性能
為了提高執(zhí)行速度和執(zhí)行效率,單片機開始使用RISC、流水線和DSP的設(shè)計技術(shù),使單片機的性能有了明顯的提高,表現(xiàn)為:單片機的時鐘頻率得到提高;同樣頻率的單片機運行效率也有了很大的提升;由于集成度的提高,單片機的尋址能力、片內(nèi)ROM(FLASH)和RAM的容量都突破了以往的數(shù)量和限制。
由于系統(tǒng)資源和系統(tǒng)復(fù)雜程度的增加,開始使用高級語言(如C語言)來開發(fā)單片機的程序。使用高級語言可以降低開發(fā) 難度,縮短開發(fā)周期,增強軟件的可讀性和可移植性,便于改進(jìn)和擴充功能。
AVR 內(nèi)核單片機具有豐富的指令集和32個通用工作寄存器。所有的寄存器都直接與算邏單元(ALU) 相連接,使得一條指令可以在一個時鐘周期內(nèi)同時訪問兩個獨立的寄存器。這種結(jié)構(gòu)大大提高了代碼效率,并且具有比普通的CISC 微控制器最高至10 倍的數(shù)據(jù)吞吐率。ATmega16L 有如下特點:
.16K字節(jié)的系統(tǒng)內(nèi)可編程Flash(具有同時讀寫的能力,即RWW);
.512字節(jié)EEPROM,1K 字節(jié)SRAM;
.32 個通用I/O 口線;
.32 個通用工作寄存器;               
.用于邊界掃描的JTAG 接口,支持片內(nèi)調(diào)試與編程;
.三個具有比較模式的靈活的定時器/ 計數(shù)器(T/C);
.片內(nèi)/外中斷,片內(nèi)經(jīng)過標(biāo)定的RC 振蕩器;
.可編程串行USART,有起始條件檢測器的通用串行接口;
.8路10位具有可選差分輸入級可編程增益(TQFP 封裝) 的ADC;
.具有片內(nèi)振蕩器的可編程看門狗定時器;
.一個SPI 串行端口;
.四通道PWM,兩路8位,兩路16位;
.六個可以通過軟件進(jìn)行選擇的省電模式:空閑模式、ADC 噪聲抑制模式、省電模式、掉電模式、Standby 模式以及擴展的Standby 模式;
.速度等級:0 - 8 MHz;
.工作電壓:2.7 - 5.5V;
.工作于空閑模式時CPU 停止工作,而USART、兩線接口、A/D 轉(zhuǎn)換器、SRAM、T/C、SPI 端口以及中斷系統(tǒng)繼續(xù)工作;
.掉電模式時晶體振蕩器停止振蕩,所有功能除了中斷和硬件復(fù)位之外都停止工作;
.在省電模式下,異步定時器繼續(xù)運行,允許用戶保持一個時間基準(zhǔn),而其余功能模塊處于休眠狀態(tài);
.ADC 噪聲抑制模式時終止CPU 和除了異步定時器與ADC 以外所有I/O 模塊的工作,以降低ADC 轉(zhuǎn)換時的開關(guān)噪聲;
.Standby 模式下只有晶體或諧振振蕩器運行,其余功能模塊處于休眠狀態(tài),使得器件只消耗極少的電流,同時具有快速啟動能力;
擴展Standby 模式下則允許振蕩器和異步定時器繼續(xù)工作。
本芯片是以Atmel 高密度非易失性存儲器技術(shù)生產(chǎn)的。片內(nèi)ISP Flash 允許程序存儲器通過ISP 串行接口,或者通用編程器進(jìn)行編程,也可以通過運行于AVR 內(nèi)核之中的引導(dǎo)程序進(jìn)行編程。引導(dǎo)程序可以使用任意接口將應(yīng)用程序下載到應(yīng)用Flash存儲區(qū)(Application Flash Memory)。在更新應(yīng)用Flash存儲區(qū)時引導(dǎo)Flash區(qū)(Boot Flash Memory)的程序繼續(xù)運行,實現(xiàn)了RWW 操作。
通過將8 位RISC CPU 與系統(tǒng)內(nèi)可編程的Flash 集成在一個芯片內(nèi),ATmega16 成為一個功能強大的單片機,為許多嵌入式控制應(yīng)用提供了靈活而低成本的解決方案。
下面是基于八位AVR單片機芯片ATMEGA16的主控系統(tǒng)方案:
2.2.2 ATMEG16單片機的介紹
ATMEG 16的管腳說明如圖2-2所示:




file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAC86.tmp.png
圖2-2 DIP封裝 ATMEG 16單片機引腳結(jié)構(gòu)圖

1 VCC為數(shù)字電路的電源,GND為地。
2. 端口A(PA7-PA0)作為A/D轉(zhuǎn)換器的模擬輸入端,是8位雙向I/O口,具有編程的內(nèi)部上拉電阻。其輸出緩沖器具有對稱的驅(qū)動特性,可以輸出和吸收大電流。作為輸入使用時,若內(nèi)部上拉電阻使能,端口被外部拉低時將輸出電流。在復(fù)位過程中,即使系統(tǒng)時鐘還未起振,端口A處于高阻狀態(tài)。
3. 端口B(PB7-PB0)為8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對稱的驅(qū)動特性,可以輸出和吸收大電流。作為輸入使用時,若內(nèi)部上拉電阻使能,端口被外部電路拉低時將輸出電流。在復(fù)位過程中,即使系統(tǒng)始終還未起振,端口B處于高阻狀態(tài)。端口B也可以用做其他不同的特殊功能。
4. 端口C(PC7-PC0)為8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對稱的驅(qū)動特性,可以輸出和吸收大電流。作為輸入使用時,若內(nèi)部上拉電阻使能,端口被外部電路拉低時將輸出電流。在復(fù)位過程中,即使系統(tǒng)始終還未起振,端口C處于高阻狀態(tài)。如果JTAG接口使能,即使復(fù)位出現(xiàn)引腳PC5(TD1)、PC3(TMS)與PC2(TCK)的上拉電阻被激活。端口C也可以用做其他不同的特殊功能。
5. 端口D(PD7-PD0)為8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對稱的驅(qū)動特性,可以輸出和吸收大電流。作為輸入使用時,若內(nèi)部上拉電阻使能,端口被外部電路拉低時將輸出電流。在復(fù)位過程中,即使系統(tǒng)始終還未起振,端口D處于高阻狀態(tài)。端口D也可以用做其他不同的特殊功能。
6. RESET為復(fù)位輸入引腳,持續(xù)時間超過最小門限時間的低電平將引起復(fù)位。
7 XTAL1為晶振反相放大器的輸入端和內(nèi)部時鐘操作電路的輸入端。
8 XTAL2為晶振反相放大器的輸出端。
9.  AVCC是端口A與A/D轉(zhuǎn)換器的電源。不使用ADC時,該引腳應(yīng)該直接與Vcc連接。使用ADC時應(yīng)通過一個低通濾波器與Vcc連接。
10.AREF是A/D的模擬基準(zhǔn)輸入引腳。
2.2.3 單片機的復(fù)位電路
復(fù)位是單片機的初始化操作,其作用是使CPU中的各個部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。
ATmega16有5個復(fù)位源:
1. JTAG AVR復(fù)位:復(fù)位寄存器為1時MCU復(fù)位。
2. 上電復(fù)位:電源電壓低于上電復(fù)位門限 VPOT時,MCU復(fù)位。
3. 看門狗復(fù)位:看門狗使能并且看門狗定時器溢出時復(fù)位發(fā)生。
4. 外部復(fù)位:引腳 RESET上的低電平持續(xù)時間大于最小脈沖寬度時MCU復(fù)位。
5. 掉電檢測復(fù)位:掉電檢測功能使能,且電源電壓低于掉電檢測電壓時復(fù)位。
ATmega16單片機5個復(fù)位源中,最常用的是外部復(fù)位和看門狗復(fù)位電路。外部復(fù)位電路由外加于RESET 引腳的低電平產(chǎn)生。當(dāng)復(fù)位低電平持續(xù)時間大于最小脈沖寬度時即觸發(fā)復(fù)位過程,即使此時并沒有時鐘信號在運行。當(dāng)外加信號達(dá)到復(fù)位門限電壓VTOUT延時周期開始。延時結(jié)束后MCU即啟動。外部復(fù)位時序圖如圖2-3所示,外部復(fù)位原理圖如圖2-4所示:

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAC96.tmp.jpg

2-3 外部電路復(fù)位時序圖
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAC97.tmp.jpg
2-4 外部復(fù)位原理圖

2.2.4 ATMEG16最小系統(tǒng)及晶振的選擇
ATmega16芯片有如下幾種通過Flash熔絲位進(jìn)行選擇的時鐘源。時鐘輸入到AVR時鐘發(fā)生器,再分配到相應(yīng)的模塊。
表2—1 熔絲配置模式
器件時鐘選項
CKSEL3..0
外部晶體/陶瓷振蕩器
1111 – 1010
外部低頻晶振
1001
外部RC振蕩器
1000 – 0101
標(biāo)定的內(nèi)部RC振蕩器
0100 – 0001
外部時鐘
0000
          注:此選項不適用于晶體,只能用于陶瓷諧振器。
晶體振蕩電路:XTAL1XTAL2分別為用作片內(nèi)振蕩器的反向放大器的輸入和輸出,如圖2-5所示,這個振蕩器可以使用石英晶體,也可以使用陶瓷諧振器。熔絲位CKOPT用來選擇這兩種放大器模式的其中之一。當(dāng)CKOPT被編程時振蕩器在輸出引腳產(chǎn)生滿幅度的振蕩。這種模式適合于噪聲環(huán)境,以及需要通過XTAL2驅(qū)動第二個時鐘緩沖器的情況。而且這種模式的頻率范圍比較寬。當(dāng)保持CKOPT為未編程狀態(tài)時,振蕩器的輸出信號幅度比較小。其優(yōu)點是大大降低了功耗,但是頻率范圍比較窄,而且不能驅(qū)動其他時鐘緩沖器。對于諧振器,CKOPT未編程時的最大頻率為8 MHz,CKOPT編程時為16 MHz。C1C2的數(shù)值要一樣,不管使用的是晶體還是諧振器。最佳的數(shù)值與使用的晶體或諧振器有關(guān),還與雜散電容和環(huán)境的電磁噪聲有關(guān)為了保證系統(tǒng)穩(wěn)定性和串口傳輸質(zhì)量所以選用外部晶振,晶振選用7.3728M。

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACB7.tmp.png
             2-5 ATMEG16最小系統(tǒng)

2.3  液晶顯示模塊
顯示模塊采用HS12864-15C系列中文圖形系列液晶模塊。由控制器ST7920控制與驅(qū)動。
2.3.1 HS12864-15C系列液晶的特點
1. HS12864-15系列硬件特性如下:
.提供8位,4位并行接口及傳行接口可選
.自動電源啟動復(fù)位功能
.內(nèi)部自建振蕩源
.64*16位字符顯示RAM(DDRAM最多16字符*4行)
.2M位中文字型ROM(CGROM),總共8192個中文字型
2. HS12864-15系列軟件特性如下:
.文字與圖形混合顯示功能
.畫面清除功能
.光標(biāo)歸位功能
.顯示開/關(guān)功能
.反白顯示功能
.垂直畫面旋轉(zhuǎn)功能
.休眠模式
2.3.2 HS12864-15C系列液晶的引腳功能
引腳PSB為芯片的傳輸方式控制端;引腳 E 為讀寫使能信號,它是在下降沿時數(shù)據(jù)被鎖存入HS12864液晶的;在E高電平期間,數(shù)據(jù)被讀出;R/W 為讀寫選擇信號,當(dāng)它為一時為讀選通,為零時為寫選通;DB0-DB7為數(shù)據(jù)總線RST為復(fù)位信號。復(fù)位信號有效時,關(guān)閉液晶顯示,使顯示起始行為0,RST可跟MCU連,由MCU控制;也可直接接VDD,使之不起作用。引腳功能如表2-1所示:
2-1 HS12864-15C的引腳功能
引腳符號
狀態(tài)
引腳名稱
功能
PSB
輸入
數(shù)據(jù)傳輸方式
PSB=1為并行傳輸;PSB=0為串行傳輸
E
輸入
讀寫使能信號
[size=10.5000pt]在E下降沿,數(shù)據(jù)被鎖存(寫)入HS12864-15C;在E高電平期間,數(shù)據(jù)被讀出
R/W
輸入
讀寫選擇信號
R/W=1為讀選通,R/W=0為寫選通
RS
輸入
數(shù)據(jù)、指令選擇信號
RS=1為數(shù)據(jù)操作
RS=0為寫指令或讀狀態(tài)
DB0-DB7
三態(tài)
數(shù)據(jù)總線


RST
輸入
復(fù)位信號
復(fù)位信號有效時,關(guān)閉液晶顯示,使顯示起始行為0[size=10.5000pt],RST可跟MCU相連,由M[size=10.5000pt]CU控制;也可直接接VDD,使之不起作用。





2.3.3 液晶顯示HS12864-15C的指令系統(tǒng)
1.清除顯示
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
0
0
0
1

2.顯示開/關(guān)指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
0
0
0
1
D
C
B
控制整體顯示開關(guān),游標(biāo)開關(guān),游標(biāo)位置顯示反白開關(guān);
D=1,整體顯示開;D=0,整體顯示關(guān);
C=1,游標(biāo)顯示開;C=0,游標(biāo)顯示關(guān);
B=1,游標(biāo)位置顯示反白開;B=0,游標(biāo)位置顯示反白關(guān);

3.讀取忙狀態(tài)
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
0
1
BF
A6
A5
A4
A3
A2
A1
A0
讀取忙狀態(tài)以確定內(nèi)部動作是否完成,同時可以讀出地址計數(shù)器AC的值

4.寫數(shù)據(jù)
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
0
寫數(shù)據(jù)
讀、寫數(shù)據(jù)指令每執(zhí)行完一次讀、寫操作,列地址就自動增一,必須注意的是,進(jìn)行讀操作之前,必須有一次空讀操作,緊接著再讀才會讀出所要讀的單元中的數(shù)據(jù)。

5.讀數(shù)據(jù)
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
1
                讀 顯 示 數(shù) 據(jù)
讀、寫數(shù)據(jù)指令每執(zhí)行完一次讀、寫操作,列地址就自動增一,必須注意的是,進(jìn)行讀操作之前,必須有一次空讀操作,緊接著再讀才會讀出所要讀的單元中的數(shù)據(jù)。

2.4  電源和指紋模塊
指紋模塊采用深圳市指昂科技有限公司生產(chǎn)的ZAZ-010系列獨立式指紋識別模塊,以高速DSP處理器為核心。主要技術(shù)指標(biāo)如下
供電電壓:DC 3.6-6.0V
供電電流:工作電流:100mA(典型值)
峰值電流:150mA
指紋圖像錄入時間:<0.5 秒
窗口面積 14 *18 mm
匹配方式:
比對方式(1:1)
搜索方式(1:N)
特征文件: 256 字節(jié)
模板文件: 512 字節(jié)
存儲容量: 100枚
安全等級: 五級(從低到高:1、2、3、4、5)
認(rèn)假率(FAR):<0.001%
拒真率(FRR):<0.1%
搜索時間: 1.0 秒 (1:1000 時,均值)
上位機接口: UART(TTL 邏輯電平)
通訊波特率(UART): (9600*N)bps
其中N=1~12 (默認(rèn)值N=6,即57600bps)
2.4.1 ZAZ-010系列獨立式指紋識別模塊引腳功能
模塊中引腳1與電源相連,引腳2接單片機的RXD端,引腳3接單片機的TXD端,引腳4懸空,引腳5接地。表2-2如下:
表2-2指紋識別模塊引腳功能
引腳號
名稱
類型
功能描述
1
Vin
in
電源正輸入端
2
TD
out
串行數(shù)據(jù)輸出。TTL 邏輯電平
3
RD
in
串行數(shù)據(jù)輸入。TTL 邏輯電平
4
NC
未定義,懸空。
5
GND
信號地。內(nèi)部與電源地連接



2.4.2 ZAZ-010系列指紋識別模塊指令系統(tǒng)
模塊通過串行通訊接口,可直接與采用3.3v或者5v電源的單片機進(jìn)行通訊。模塊數(shù)據(jù)發(fā)送端接上位機接收端,模塊數(shù)據(jù)接收腳接上位機數(shù)據(jù)發(fā)送端。
錄入指紋圖像指令:
指令包格式:

2bytes
4bytes
1 byte
2 bytes
1 byte
2bytes
包頭
模塊地址
包標(biāo)識
包長度
指令碼
校驗和
0xEF01
Xxxx
01H
03H
01H
05H
應(yīng)答包格式:
2bytes
4bytes
1 byte
2 bytes
1 byte
2bytes
包頭
模塊地址
包標(biāo)識
包長度
確認(rèn)碼
校驗和
0xEF01
Xxxx
07H
03H
xxH
SUM
注:確認(rèn)碼=00H 表示錄入成功;
確認(rèn)碼=01H 表示收包有錯;
確認(rèn)碼=02H 表示傳感器上無手指;
確認(rèn)碼=03H 表示錄入不成功;

圖像生成特征 Img2Tz指令:
指令包格式:
2bytes
4bytes
1 byte
2 bytes
1 byte
1 byte
2 bytes
包頭
模塊地址
包標(biāo)識
包長度
指令碼
緩沖區(qū)號
校驗和
0xEF01
Xxxx
01H
04H
02H
BufferID
SUM
應(yīng)答包格式:
2bytes
4bytes
1 byte
2 bytes
1 byte
2bytes
包頭
模塊地址
包標(biāo)識
包長度
確認(rèn)碼
校驗和
0xEF01
Xxxx
07H
03H
xxH
SUM
注:確認(rèn)碼=00H 表示生成特征成功;
確認(rèn)碼=01H 表示收包有錯;
確認(rèn)碼=06H 表示指紋圖像太亂而生不成特征;
確認(rèn)碼=07H 表示指紋圖像正常,但特征點太少而生不成特征;
確認(rèn)碼=15H 表示圖像緩沖區(qū)內(nèi)沒有有效原始圖而生不成圖像;

特征合成模板RegMode1指令:
功能說明:將CharBuffer1與CharBuffer2中的特征文件合成特征模板。
指令包格式:
2bytes
4bytes
1 byte
2 bytes
1 byte
2bytes
包頭
模塊地址
包標(biāo)識
包長度
指令碼
校驗和
0xEF01
Xxxx
01H
03H
05H
09H
應(yīng)答包格式:
2bytes
4bytes
1 byte
2 bytes
1 byte
2bytes
包頭
模塊地址
包標(biāo)識
包長度
確認(rèn)碼
校驗和
0xEF01
Xxxx
07H
03H
xxH
SUM
注:確認(rèn)碼=00H 表示合并成功;
確認(rèn)碼=01H 表示收包有錯;
確認(rèn)碼=0aH 表示合并失敗(兩枚指紋不屬于同一手指);

存儲模板 Store指令:
指令包格式:
2bytes
4bytes
1byte
2 bytes
1 byte
1 byte
2 bytes
2bytes
包頭
模塊地址
包標(biāo)識
包長度
指令碼
緩沖區(qū)號
位置號
校驗和
0xEF01
Xxxx
01H
06H
06H
BufferID
PageID
SUM
應(yīng)答包格式:
2bytes
4bytes
1 byte
2 bytes
1 byte
2bytes
包頭
模塊地址
包標(biāo)識
包長度
確認(rèn)碼
校驗和
0xEF01
Xxxx
07H
03H
xxH
SUM
注:確認(rèn)碼=00H 表示儲存成功;
確認(rèn)碼=01H 表示收包有錯;



搜索指紋Search指令:
指令包格式:
2bytes
4bytes
1byte
2bytes
1byte
1byte
2bytes
2bytes
2bytes
包頭
模塊地址
包標(biāo)識
包長度
指令碼
緩沖區(qū)號
參數(shù)
參數(shù)
校驗和
0xEF01
Xxxx
01H
08H
04H
ID
StarPage
PageNum
SUM
應(yīng)答包格式:
2bytes
4bytes
1byte
2bytes
1byte
2bytes
2bytes
2bytes
包頭
模塊地址
包標(biāo)識
包長度
確認(rèn)碼
頁碼
得分
校驗和
0xEF01
Xxxx
07H
07H
xxH




SUM
注:確認(rèn)碼=00H 表示搜索到;
確認(rèn)碼=09H 表示沒有搜索;
2.4.3 電源模塊
電源模塊可以直接提供正5V的直流電壓,但是由于在一些工業(yè)環(huán)境中并不提供直流電源,而都是交流電源,為確保其實用性,在電源這一部分,提供了整流穩(wěn)壓電路,可以把交流電壓變成5V的電壓,為整個電路板提供電源。
從圖2-6可以看出,當(dāng)開關(guān)按下時,電路接通,先通過一個整流電路,使交流電壓變成直流電壓。為了保證其輸出的電壓是5V,在后面接一個穩(wěn)壓電路,由一個7805穩(wěn)壓器和一個發(fā)光二極管組成,發(fā)光二極管作為電源導(dǎo)通的指示燈。當(dāng)電源導(dǎo)通時二極管發(fā)光。其中電容C1起濾波作用,電容C2是抑制高平信號。電容C3, C4直接接地,起到抗干擾的作用,能使電壓穩(wěn)定在5V。有了電源模塊避免了因沒有直流電源而無法使用的問題,使這個儀表能夠在更多的環(huán)境中使用。電源模塊電路圖如圖2-6所示:









file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACD8.tmp.png





























2-6 電源模塊電路圖
3 系統(tǒng)軟件的設(shè)計
3.1  系統(tǒng)程序工作分析
在本文的電路板中,單片機是作為控制器嵌入到系統(tǒng)中。應(yīng)用程序的開發(fā)主要分為兩大部分,即對ZAZ-010指紋識別模塊的的應(yīng)用程序開發(fā)以及對HS12864液晶、按鍵程序的開發(fā)。因此,要實現(xiàn)其應(yīng)用,需要對其進(jìn)行聯(lián)合調(diào)試。電路軟件應(yīng)用開發(fā)根據(jù)所設(shè)計的硬件。程序開發(fā)的方式將主要建立一系列的C語言函數(shù)子程序供主程序的隨時調(diào)用。即ZAZ-010指紋識別模塊或液晶電路分別編制C語言函數(shù)子程序。因此,需要有專門的開發(fā)工具。本設(shè)計中,采用AVRStudio4.0單片機軟件開發(fā)環(huán)境對單片機進(jìn)行編程,由于該編譯器支持模塊化程序設(shè)計,因此可以先將源程序劃分為幾個模塊分別編寫,然后再由編譯器生成一個最終文件. 該開發(fā)環(huán)境可以對程序進(jìn)行軟件仿真調(diào)試,因此可以方便地進(jìn)行程序的編寫和調(diào)試。調(diào)試通過的代碼文件通過開發(fā)板下載到單片機。單片機在上電后,主程序應(yīng)該完成相應(yīng)的初始化工作。依據(jù)電路的功能要求,主程序必須對液晶初始化、同時對按鍵進(jìn)行檢測,如果有對應(yīng)的按鍵按下。執(zhí)行相應(yīng)的操作,單片機通過串行接口對指紋模塊進(jìn)行讀寫。
3.2  設(shè)計前準(zhǔn)備工作
由于使用串口和模塊通訊,所以必須先約定好單片機和模塊的的串口工作速度和數(shù)據(jù)包格式。
UART數(shù)據(jù)格式定位為:8位數(shù)據(jù)位、1位停止位、無奇偶校驗位,數(shù)據(jù)傳輸速率為57600bps。
通訊數(shù)據(jù)包格式定義為:
單片機發(fā)送串行數(shù)據(jù)包格式如圖3-1 MCU發(fā)送數(shù)據(jù)包格式
D7
D6
D5
D4
D3
D2
D1
D0
發(fā)送數(shù)據(jù)共11-14個字節(jié),前6個字節(jié)是模塊的包頭和模塊地址為固定值,后5-8個字節(jié)是傳輸?shù)哪K的命令。同時根據(jù)外部晶振和系統(tǒng)默認(rèn)的傳輸速率算出控制串口的各寄存器的初始值。參考meg16資料后編寫了以下一段串口初始化。
各寄存器設(shè)置的程序.
如下面的一段程序既是對個寄存器的初始值的設(shè)置
void UART_Init(void)
{
UCSRB=0x00;//disable while setting baud rate
UCSRA=0x00;//Bit1為1則倍速發(fā)送
UCSRC=0x06;
UBRRL=0x07;//波特率:57600Bps
UBRRH=0x00;//誤差率:0.000%
UCSRB=0x18;
}
:選用外部7.3728M晶振.

3.3  單片機的程序設(shè)計
根據(jù)上節(jié)分析,制定如下圖的程序流程圖。主程序主要由液晶顯示、通訊子、按鍵程序組成。主程序的工作流程描述如下:首先初始化各種硬件功能模塊進(jìn)行初始化。包括開機液晶顯示、鍵盤掃描、指紋模塊建立通信。
主程序設(shè)計流程如圖3-1所示:




















file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACD9.tmp.png
程序的巡檢過程: 首先對各模塊進(jìn)行初始化,檢測在有無按鍵按下,如果按下判斷是那一個按鍵,并作出判斷是否調(diào)用相應(yīng)子程序;當(dāng)按鍵1按下后,調(diào)用通信模塊子程序,錄入指紋并將其存入模塊緩沖區(qū),同理當(dāng)按鍵2按下后,效果相同。
依次當(dāng)按鍵3按下時,將指紋模塊兩緩沖區(qū)中的指紋特征文件合成特征模板并存儲與指紋模板庫中,當(dāng)4按鍵按下后搜索指紋并比對.當(dāng)指紋模塊中有指紋存儲時直接按4鍵同樣也可進(jìn)行比對。
程序關(guān)鍵的就是對指紋模塊的通信控制, 考慮到處理過程太過冗長,限于篇幅只能將其省略,如需查看,可以看附錄1。其它命令發(fā)送子函數(shù)因大部分的命令大體格式基本相同。
3.3.1  鍵盤管理程序設(shè)計流程
鍵盤模塊的工作流程圖如圖3-2所示:



file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACDA.tmp.png
                        3-2 鍵盤模塊流程圖
3.3.2  LCD顯示模塊程序設(shè)計流程
顯示模塊主要完成數(shù)據(jù)的顯示功能。首先當(dāng)模塊接受指令前,單片機必須確認(rèn)模塊內(nèi)部處于非忙碌狀態(tài),然后根據(jù)接受到指令顯示相關(guān)的內(nèi)容在屏幕上。

3.3.3  指紋通信模塊的程序設(shè)計流程
串口通信數(shù)據(jù)發(fā)送、接收流程圖如圖3-3:


file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACEA.tmp.png
3-3 串口通信數(shù)據(jù)發(fā)送、接收流程圖




4 實物的制作與調(diào)試
4.1  電路的焊接        
1.焊前準(zhǔn)備
首先要熟悉所焊印制電路板的裝配圖,并按圖紙配料,檢查元器件型號、規(guī)格及數(shù)量是否符合圖紙要求,并做好裝配前元器件引線成型等準(zhǔn)備工作。
2.焊接順序
元器件裝焊順序依次為:電阻器、電容器、二極管、三極管、集成電路、大功率管,其它元器件為先小后大。
3.對元器件焊接要求
(1)電阻器焊接
按圖將電阻器準(zhǔn)確裝人規(guī)定位置。要求標(biāo)記向上,字向一致。裝完同一種規(guī)格后再裝另一種規(guī)格,盡量使電阻器的高低一致。焊完后將露在印制電路板表面多余引腳齊根剪去。
(2)電容器焊接
將電容器按圖裝人規(guī)定位置,并注意有極性電容器其 “ + ” 與 “ - ” 極不能接錯,電容器上的標(biāo)記方向要易看可見。先裝玻璃釉電容器、有機介質(zhì)電容器、瓷介質(zhì)電容器,最后裝電解電容器。
(3)二極管的焊接
二極管焊接要注意以下幾點:第一,注意陽極陰極的極性,不能裝錯;第二,型號標(biāo)記要易看可見;第三,焊接立式二極管時,對最短引線焊接時間不能超過 2S 。
(4)三極管焊接
注意 e 、 b 、 c 三引線位置插接正確;焊接時間盡可能短,焊接時用鑷子夾住引線腳,以利散熱。焊接大功率三極管時,若需加裝散熱片,應(yīng)將接觸面平整、打磨光滑后再緊固,若要求加墊絕緣薄膜時,切勿忘記加薄膜。管腳與電路板上需連接時,要用塑料導(dǎo)線。
(5)集成電路
焊接首先按圖紙要求,檢查型號、引腳位置是否符合要求。焊接時先焊邊沿的二只引腳,以使其定位,然后再從左到右自上而下逐個焊接。對于電容器、二極管、三極管露在印制電路板面上多余引腳均需齊根剪去。

4.2  電路和程序的調(diào)試
4.2.1 單片機的程序下載
程序存儲器的更新以頁的方式進(jìn)行。在用臨時頁緩沖器存儲的數(shù)據(jù)對一頁存儲器進(jìn)行編程時,首先要將這一頁擦除。SPM指令以一次一個字的方式將數(shù)據(jù)寫入臨時頁緩沖器。臨時頁緩沖器的寫入可以在頁擦除命令之前完成,也可以在頁擦除和頁寫操作之間完成。通過電腦上的下載軟件將*.HEX文件傳輸?shù)剑ㄈ鐖D4-1所示)USB下載線板上的ATmega8芯片里,程序代碼在這里經(jīng)過處理后從固定的I/O管腳中輸出燒寫到單片機的Flash存儲器中。此外單片機一般采用5V以下的電源供電,USB接口也采用5V電源,所以,該下載線還可以通過電腦向單片機提供工作電源。該下載線采用先進(jìn)的USB2.0接口技術(shù)解決了筆記本不帶并口的遺憾,還有它小巧精致,攜帶方便,下載程序速度快等優(yōu)點得到了眾多編程愛好者的青睞而被廣泛的使用著。

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACEB.tmp.png
                    4-1 USB下載線實物圖

4.2.2  串口調(diào)試
使用串口調(diào)試助手進(jìn)行測試
串口調(diào)試程序見附錄1:
測試結(jié)果如圖4-2所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACEC.tmp.jpg
圖4-2 串口通信測試結(jié)果圖

4.2.3  液晶鍵盤調(diào)試
液晶鍵盤測試程序見附錄2:
液晶鍵盤測試程序結(jié)果如圖 4-3所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACED.tmp.png
             4-3 液晶鍵盤測試結(jié)果


結(jié)   
根據(jù)設(shè)計要求,本設(shè)計已經(jīng)基本完成題目要求但還存在不足之處。由于單片機flash容量有限,在指紋存儲數(shù)目上較少,只能錄入三個指紋 ,并進(jìn)行比對。
通過方案論證、資料查詢及電路設(shè)計和反復(fù)調(diào)試,不斷的解決電路調(diào)試過程中的問題,最終在規(guī)定的時間內(nèi)完成了設(shè)計任務(wù)。本設(shè)計由于水平有限,電路及程序設(shè)計還有需要改進(jìn)的地方,在今后的學(xué)習(xí)和研究中,將繼續(xù)改進(jìn)完善。
另外在調(diào)試過程中,以保證作品實現(xiàn)功能準(zhǔn)確為前提,盡量做到電路簡單、美觀、效果好、成本低,以增強其實用價值。
本設(shè)計最終可以實現(xiàn)三個指紋錄入、比對和模擬開鎖的過程,但存儲指紋數(shù)目有待進(jìn)一步的研究開發(fā)。





















參考文獻(xiàn)
[1] 楊若冰,杜燕.指紋識別技術(shù)與產(chǎn)業(yè)分析,2006年
[2]張成,周媛媛等.指紋采集技術(shù)及其產(chǎn)品發(fā)展趨勢.電子技術(shù)應(yīng)用,2004年
[3] 柴曉光,岑寶熾.民用指紋識別技術(shù),北京:人民郵電出版社,2004
[4] 丁化成,耿德根等.AVR單片機應(yīng)用設(shè)計,北京:北京航空航天大學(xué)出版社,2002
[5] 張毅剛.單片機原理與應(yīng)用,北京:高等教育出版社,2006
[6] 張?zhí)旆?/font>.51單片機C語言開發(fā)詳解,北京:電子工業(yè)出版社,2008
[7] 溫正,何嘉揚等.AVR單片機開發(fā)從入門到精通,中國電力出版,2009
[8] 李泓.AVR單片機入門與實踐,北京航空航天大學(xué),2008
[9] 佟長福. AVR單片機GCC程序設(shè)計, 北京航空航天大學(xué)出版社, 2006
[10] 張軍,宋濤.AVR單片機C語言程序設(shè)計實例精粹, 電子工業(yè)出版社, 2009年01月
[11] 嚴(yán)天峰.單片機應(yīng)用系統(tǒng)設(shè)計與仿真調(diào)試,北京航天航空大學(xué)出版社,2005
[12] 周立民.單片機應(yīng)用系統(tǒng)設(shè)計.北京:北京航空航天大學(xué)出版社,1990.
[13] 張維振.無線電設(shè)備裝接調(diào)試與檢測維修實用手冊[M],北京:銀聲音像出版社,2004
[14] 李貴山,楊建平等.微型計算機測控技術(shù)。北京:機械工業(yè)出版社,2002.
[15] 張錫富.傳感器.北京:機械工業(yè)出版社,2004.
[16] 曹承志.微型計算機控制技術(shù).北京:機械工業(yè)出版社,2001.
[17] 黃賢武.傳感器實用電路設(shè)計.成都:電子科技大學(xué)出版社,1998.
[18] 李貴山,周征等.檢測與控制技術(shù).西安:西安電子科技大學(xué)出版社,2006.








附錄1:串口調(diào)試子程序
串口調(diào)試子程序
#include<avr/io.h>
#include<util/delay.h>
//通信協(xié)議定義
unsigned char FP_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  //協(xié)議包頭
unsigned char FP_Get_Img[6] = {0x01,0x00,0x03,0x01,0x0,0x05};    //獲得指紋圖像
unsigned char a[6] ={};
unsigned char b[6] ={};
//初始化 UART 子程序
void UART_Init(void)
{
    UCSRB  =  0x00;     //disable while setting baud rate
    UCSRA  =  0x00;     //Bit11則倍速發(fā)送
    UCSRC  =  0x06;  
    UBRRL  =  0x07;     //波特率:57600 Bps
    UBRRH  =  0x00;     //誤差率:0.000%
    UCSRB  =  0x18;
}

//發(fā)送一個位
void UART_Send_Byte(unsigned char ucData)
{
  while(!(UCSRA&(1<<UDRE))); //等待緩沖區(qū)為空
  UDR = ucData;
}
unsigned char UART_Receive_Byte(void)
{
  while(!(UCSRA & ( 1<<RXC )) );

  return UDR;
}
//_獲得指紋圖像命令
void Cmd_Get_Img(void)
{
    unsigned char i;
    for(i=0;i<6;i++)
    UART_Send_Byte(FP_Pack_Head);
    for(i=0;i<6;i++)
    UART_Send_Byte(FP_Get_Img);
    for(i=0;i<6;i++) //發(fā)送包頭
    a =UART_Receive_Byte();
    for(i=0;i<6;i++) //發(fā)送命令 0x1d
    b = UART_Receive_Byte();
    for(i=0;i<6;i++)
    UART_Send_Byte(a);
    for(i=0;i<6;i++)
    UART_Send_Byte(b);
}
int main()
{
UART_Init();
Cmd_Get_Img();
}
附錄2:整體源程序
整體源程序
#include<avr/io.h>
#include<util/delay.h>
//#include<avr/pgmspace.h>                 
#define uchar unsigned char
#define uint unsigned int
#define key1 0x01
#define key2 0x02
#define key3 0x04
#define key4 0x08
static uchar k=0;
uchar name00[]={"                "};
uchar name01[]={"    歡迎使用    "};
uchar name02[]={"單片機指紋密碼鎖"};
uchar name03[]={"                "};
uchar name04[]={"  指紋采集開始  "};
uchar name05[]={"  指紋對比開始  "};
uchar name06[]={"  指紋存儲開始  "};
uchar name07[]={"    一次采集    "};
uchar name08[]={"    二次采集    "};
uchar name09[]={"    錄入成功    "};
uchar name10[]={"    錄入失敗    "};
uchar name11[]={"    收包有錯    "};
uchar name12[]={"傳感器上無手指  "};
uchar name13[]={"  生成特征成功  "};
uchar name14[]={"圖想亂生不成特征"};
uchar name15[]={"圖象正常特征點少"};
uchar name16[]={"指紋模板合并成功"};
uchar name17[]={"指紋模板合并失敗"};
uchar name18[]={"  非同一手指    "};
uchar name19[]={"    存儲成功    "};
uchar name20[]={"  寫指紋庫出錯  "};
uchar name21[]={"    指紋匹配    "};
uchar name22[]={"  指紋不匹配    "};
uchar name23[]={"    密碼正確    "};
uchar name24[]={"    密碼不正確    "};
uchar FP_1[6]={};
uchar FP_2[6]={};
uchar FP_Pack_Head[6]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  //協(xié)議包頭
uchar FP_Get_Img[6]={0x01,0x00,0x03,0x01,0x0,0x05};    //獲得指紋圖像
uchar FP_Search_0_9[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x0,0x13,0x0,0x21}; //搜索0-9號指紋
uchar FP_Img_To_Buffer1[7]={0x01,0x0,0x04,0x02,0x01,0x0,0x08}; //將圖像放入到BUFFER1
uchar FP_Img_To_Buffer2[7]={0x01,0x0,0x04,0x02,0x02,0x0,0x09}; //將圖像放入到BUFFER2
uchar FP_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x09}; //BUFFER1BUFFER2合成特征模版
volatile uchar  FP_Save_Finger1[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};//BUFFER1中的特征碼存放到指定的位置
volatile uchar  FP_Save_Finger2[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0C,0x00,0x1A};//BUFFER1中的特征碼存放到指定的位置
volatile uchar  FP_Save_Finger3[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0D,0x00,0x1B};//BUFFER1中的特征碼存放到指定的位置
uchar yb=0x80;
//初始化 UART 子程序
void UART_Init(void)
{
    UCSRB  =  0x00;     //disable while setting baud rate
    UCSRA  =  0x00;     //Bit11則倍速發(fā)送
    UCSRC  =  0x06;     //傳送一楨數(shù)據(jù)位為8
    UBRRL  =  0x07;     //波特率:57600 Bps
    UBRRH  =  0x00;     //誤差率:0.000%
    UCSRB  =  0x18;     
}
//發(fā)送八位數(shù)據(jù)
void UART_Send_Byte( uchar ucData)
{
  while(!(UCSRA&(1<<UDRE))); //等待緩沖區(qū)為空
  UDR = ucData;
}
//接收八位數(shù)據(jù)
uchar  UART_Receive_Byte(void)
{
  while(!(UCSRA&(1<<RXC)));//等待緩沖區(qū)為空
return UDR;
}
//_獲得指紋圖像命令
void Cmd_Get_Img(void)
{
    uchar i,j;
    for(i=0;i<6;i++) //發(fā)送包頭與模塊地址
    UART_Send_Byte(FP_Pack_Head);
    for(i=0;i<6;i++) //發(fā)送命令 0x1d
    UART_Send_Byte(FP_Get_Img);
    for(i=0;i<6;i++)
    FP_1=UART_Receive_Byte();
        for(i=0;i<6;i++)
    FP_2=UART_Receive_Byte();
    j=FP_2[3];
   if (j==0x00)
  {_delay_ms(100000);
   reset ();
   display6();}
   if (j==0x01)
   {reset();
    wr_com(yb);
   outChinese(0x90,8,name11);}
   if (j==0x02)
   {_delay_ms(100000);
    reset();
    display7();}
        if (j==0x03)
   { reset();
    wr_com(yb);
   outChinese(0x90,8,name10);}
}
//講圖像轉(zhuǎn)換成特征碼存放在Buffer1
void Cmd_Img_To_Buffer1(void)
{
                uchar i,j;
               for(i=0;i<6;i++)    //發(fā)送包頭與模塊地址
                 {
                   UART_Send_Byte(FP_Pack_Head);   
                        }
                        for(i=0;i<7;i++)   //發(fā)送命令 將圖像轉(zhuǎn)換成 特征碼 存放在 CHAR_buffer1
             {
                         UART_Send_Byte(FP_Img_To_Buffer1);
                        }
            for(i=0;i<6;i++)
            {
                        FP_1=UART_Receive_Byte();}
                        for(i=0;i<6;i++)
          {
                    FP_2=UART_Receive_Byte();}
           j=FP_2[3];
         if (j==0x00)
    {_delay_ms(100000);
      reset ();
      display8();}
           if (j==0x06)
          {_delay_ms(100000);
      reset ();
      display9();}
          if (j==0x07)
          {_delay_ms(100000);
      reset ();
      display10();}
}
//將圖像轉(zhuǎn)換成特征碼存放在Buffer2
void Cmd_Img_To_Buffer2(void)
{
           uchar i,j;
           for(i=0;i<6;i++)    //發(fā)送包頭
                 {
                   UART_Send_Byte(FP_Pack_Head);   
                        }
                      for(i=0;i<7;i++)   //發(fā)送命令 將圖像轉(zhuǎn)換成 特征碼 存放在 CHAR_buffer2
             {
                         UART_Send_Byte(FP_Img_To_Buffer2);
                        }
            for(i=0;i<6;i++)
           {
                        FP_1=UART_Receive_Byte();}
                        for(i=0;i<6;i++)
          {
                    FP_2=UART_Receive_Byte();}  
                  j=FP_2[3];
         if (j==0x00)
    {_delay_ms(100000);
      reset ();
      display8();}
           if (j==0x06)
          {_delay_ms(100000);
      reset ();
      display9();}
          if (j==0x07)
          {_delay_ms(100000);
      reset ();
      display10();}
}
//BUFFER1 BUFFER2 中的特征碼合并成指紋模版
void Cmd_Reg_Model(void)
{
    uchar i,j;
    for(i=0;i<6;i++) //發(fā)送包頭與模塊地址
    {
      UART_Send_Byte(FP_Pack_Head);   
    }
    for(i=0;i<6;i++) //命令合并指紋模版
    {
      UART_Send_Byte(FP_Reg_Model);   
    }
    for(i=0;i<6;i++)
           {
                        FP_1=UART_Receive_Byte();}
        for(i=0;i<6;i++)
          {
                    FP_2=UART_Receive_Byte(); }
                  j=FP_2[3];
if (j==0x00)
{_delay_ms(400000);
      reset ();
      display11();}
if (j==0x0a)
{_delay_ms(400000);
      reset ();
      display12();
           while(1);}
}
//將并成后的指紋模版存儲到指紋模塊flash模板庫中
void  Store_Char_Model(void)
{   uchar i,j;
    for(i=0;i<6;i++) //發(fā)送包頭與模塊地址
    {
      UART_Send_Byte(FP_Pack_Head);   
    }
   if(k==0)
  { for(i=0;i<9;i++) //命令存儲指紋模版
    {
      UART_Send_Byte( FP_Save_Finger1  );
       }
    }
        if(k==1)
   { for(i=0;i<9;i++) //命令存儲指紋模版
    {
      UART_Send_Byte( FP_Save_Finger2  );
        }
    }
        if(k==2)
   { for(i=0;i<9;i++) //命令存儲指紋模版
    {
      UART_Send_Byte( FP_Save_Finger3  );
       }
        }
    for(i=0;i<6;i++)
          {
                        FP_1=UART_Receive_Byte();}
        for(i=0;i<6;i++)
          {
                    FP_2=UART_Receive_Byte(); }
                  j=FP_2[3];
if(j==0x00)
{_delay_ms(400000);
      reset ();
      display13();}
if(j==0x18)
{_delay_ms(300000);
      reset ();
      display14();}
}
//搜索與BUFFER1中特征碼相符合的指紋模版
void  search_Char_Mode(void)   
{   uchar i,j;
    for(i=0;i<6;i++) //發(fā)送包頭與模塊地址
    {
      UART_Send_Byte(FP_Pack_Head);   
    }
    for(i=0;i<11;i++) //命令搜索指紋模版
    {
      UART_Send_Byte(FP_Search_0_9);
    }
for(i=0;i<6;i++)
           {
                        FP_1=UART_Receive_Byte();}
        for(i=0;i<10;i++)
          {
                    FP_2=UART_Receive_Byte(); }
                  j=FP_2[3];
if(j==0x00)
{_delay_ms(100000);
      reset ();
      display15();}
if(j==0x09)
{_delay_ms(100000);
      reset ();
      display16();}
void keyboard( void)
{  unsigned char Keyvalue;//鍵盤值
//端口初始化
DDRC=~_BV(PC0)& ~_BV(PC1)& ~_BV(PC2)& ~_BV(PC3);
while(1)
{  Keyvalue=(PINC&0x0F);
if (Keyvalue!=0x0f)
{//有鍵按下
_delay_ms(20);
Keyvalue=(PINC&0x0F);
if (Keyvalue==0X0F)
  break;//如果延時去抖后,沒有檢測到鍵按下,退出本次循環(huán)
//如果有按鍵
if(! (Keyvalue& key1))
{reset ();
display2();
UART_Init();
Cmd_Get_Img();
Cmd_Img_To_Buffer1();
}//按鍵1的處理部分
if(! (Keyvalue& key2))
{ reset ();
  display3();
UART_Init();
Cmd_Get_Img();
Cmd_Img_To_Buffer2();
}//按鍵2的處理部分
if(! (Keyvalue& key3))
{ reset ();
display4();
UART_Init();
Cmd_Reg_Model();
Store_Char_Model();
k++;         }//按鍵3的處理部分
if(! (Keyvalue& key4))
{ reset ();
display5();
UART_Init();
Cmd_Get_Img();
Cmd_Img_To_Buffer1();
search_Char_Mode();
          }//按鍵4的處理部分
       }
_delay_ms(20);
     }
}
void check_busy (void)                  //讀取忙碌狀態(tài)
{
  DDRA=0;
  PORTA=0xff;
  PORTB&=0xfb;                          //RS=0
  PORTB|=0x02;                          //RW=1;
  PORTB|=0x01;PORTB|=0x01;              //E=1;
  while((PINA&0x80)==0x80);
  PORTB&=0xfe;
                                        //E =0;
}
void wr_com(unsigned char value)        //寫指令,寫指令時必須為RS=0;RW=0;
{check_busy();
PORTB&=0xfe;                           //E=0;
PORTB&=0xfb;                           //RS=0
PORTB&=0xfd;                           //RW=0;
DDRA=0xff;
PORTA=value;
PORTB|=0x01;                           //E=1;
_delay_us(20);                          //如果沒有延時就必須要加查忙指令
PORTB&=0xfe;
DDRA=0x00;                            //E=0;
}
void wr_data(unsigned char sj)          //寫數(shù)據(jù),寫數(shù)據(jù)時必須為 RS=1;RW=0;
{check_busy();
PORTB&=0xfe;                           //E=0;
PORTB|=0x04;                           //RS=1;
PORTB&=0xfd;                           //RW=0;
DDRA=0xff;
PORTA=sj;
PORTB|=0x01;                           //E=1;
_delay_us(20);                          //如果沒有延時就必須要加查忙指令
PORTB&=0xfe;
DDRA=0x00;                            ////E=0;
}
void reset (void)
{
wr_com(0x01);//清屏
wr_com(0x08);//關(guān)顯示
wr_com(0x03);//歸位
wr_com(0x30);//功能設(shè)置
wr_com(0x0f);//開顯示
wr_com(0x01);//清屏
}
//******************************************************************/
//outChinese 為函數(shù)名
//place 為顯示地址的首地址
//unit  字符長度
//charcode[]  要顯示數(shù)據(jù)的內(nèi)容
void outChinese(unsigned char place,unsigned char unit,unsigned char charcode[] )
{
unsigned char i;
wr_com(place);
for(i=0;i<unit*2;i++)//一個漢字為兩個字符
wr_data(charcode);
}
void display1(void)
{wr_com(yb);
//ydgb();
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name01);//第二行:90-97H
outChinese(0x88,8,name02);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display2(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name04);//第二行:90-97H
outChinese(0x88,8,name07);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display3(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name04);//第二行:90-97H
outChinese(0x88,8,name08);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display4(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name01);//第二行:90-97H
outChinese(0x88,8,name06);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display5(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name01);//第二行:90-97H
outChinese(0x88,8,name05);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display6(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name09);//第二行:90-97H
outChinese(0x88,8,name00);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display7(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name12);//第二行:90-97H
outChinese(0x88,8,name00);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display8(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name13);//第二行:90-97H
outChinese(0x88,8,name00);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display9(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name14);//第二行:90-97H
outChinese(0x88,8,name00);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display10(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name15);//第二行:90-97H
outChinese(0x88,8,name00);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display11(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name16);//第二行:90-97H
outChinese(0x88,8,name00);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display12(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name17);//第二行:90-97H
outChinese(0x88,8,name18);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display13(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name19);//第二行:90-97H
outChinese(0x88,8,name00);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display14(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name20);//第二行:90-97H
outChinese(0x88,8,name00);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display15(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name21);//第二行:90-97H
outChinese(0x88,8,name23);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
void display16(void)
{wr_com(yb);
outChinese(0x80,8,name00);//第一行:80-87H
outChinese(0x90,8,name22);//第二行:90-97H
outChinese(0x88,8,name24);//第三行:88-8FH
outChinese(0x98,8,name03);//第四行:98-9FH
}
int main()
{
DDRB=0xff;                   //控制字
PORTB=0xff;
DDRA=0xff;                   //數(shù)據(jù)
PORTA=0xff;
PORTB|=0x08;                 //PSB=1
PORTB&=0xef;                 //PSB=1
_delay_us(20);
PORTB|=0x10;                 //PSB=1
reset ();
display1();
while(1)
{ keyboard();}
}





























硬件整體電路圖
   
畢業(yè)設(shè)計是我大學(xué)本科學(xué)習(xí)的過程向?qū)W校、社會交出的一張總結(jié)答卷。它不僅是我對大學(xué)五年所學(xué)知識的總結(jié),也是把所學(xué)知識融會貫通運用到實踐中的一次嘗試,是衡量我五年學(xué)習(xí)成果的一個必要標(biāo)準(zhǔn)。
通過此次的畢業(yè)設(shè)計,不僅使我深刻的鞏固以往的所學(xué)習(xí)本專業(yè)的知識,也實際熟練了本專業(yè)的技能操作。這讓我能夠深刻的體會到基礎(chǔ)的理論知識與實際實現(xiàn)還是存在的差異,實際應(yīng)用中還要考慮各個方面的因素,這給我以后的學(xué)習(xí)和工作奠定了堅實的基礎(chǔ)。
在此我要感謝我的指導(dǎo)教師張根柱老師。從畢業(yè)設(shè)計的準(zhǔn)備到結(jié)束,他在畢業(yè)設(shè)計過程中給予了我多方面的支持和幫助。還要感謝和我一起完成畢業(yè)設(shè)計的同學(xué)們,在這次設(shè)計中我們緊密合作、互相協(xié)商,不僅鍛煉了我們的溝通能力,而且培養(yǎng)了我們的團(tuán)隊精神。
最后還要感謝我生活以及學(xué)習(xí)了五年的學(xué)院,在這次畢業(yè)設(shè)計中提供給我們良好的環(huán)境以及便利的條件,讓我們?nèi)耐度氲竭@次畢業(yè)設(shè)計中。
再次感謝所有幫助過我的人們!并祝愿我們學(xué)院越來越美好!




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表