目 錄
1 引言 1 1.1 指紋識(shí)別簡(jiǎn)介 1 1.1.1 指紋識(shí)別原理 1 1.1.2 指紋識(shí)別應(yīng)用 2 1.1.3 指紋識(shí)別技術(shù)的發(fā)展 2 1.2 系統(tǒng)設(shè)計(jì)的目的 3 1.3 課題背景 3 2 整體設(shè)計(jì)方案 4 2.1 系統(tǒng)總體設(shè)計(jì) 4 2.1.1 系統(tǒng)功能描述 4 2.1.2 系統(tǒng)總體框架 4 2.2 系統(tǒng)核心部件單片機(jī) 5 2.2.1 單片機(jī)的選擇 5 2.2.2 ATMEG16單片機(jī)的介紹 7 2.2.3 單片機(jī)的復(fù)位電路 9 2.2.4 ATMEG16最小系統(tǒng)及晶振的選擇 10 2.3 液晶顯示模塊 11 2.3.1 HS12864-15C系列液晶的特點(diǎn) 11 2.3.2 HS12864-15C系列液晶的引腳功能 12 2.3.3 液晶顯示HS12864-15C的指令系統(tǒng) 13 2.4 電源和指紋模塊 13 2.4.1 ZAZ-010系列獨(dú)立式指紋識(shí)別模塊引腳功能 14 2.4.2 ZAZ-010系列指紋識(shí)別模塊指令系統(tǒng) 15 2.4.3 電源模塊 17 3 系統(tǒng)軟件的設(shè)計(jì) 19 3.1 系統(tǒng)程序工作分析 19 3.2 設(shè)計(jì)前準(zhǔn)備工作 19 3.3 單片機(jī)的程序設(shè)計(jì) 20 3.3.1 鍵盤(pán)管理程序設(shè)計(jì)流程 22 3.3.2 LCD顯示模塊程序設(shè)計(jì)流程 22 3.3.3 指紋通信模塊的程序設(shè)計(jì)流程 23 4 實(shí)物的制作與調(diào)試 24 4.1 電路的焊接 24 4.2 電路和程序的調(diào)試 25 4.2.1 單片機(jī)的程序下載 25 4.2.2 串口調(diào)試 25 4.2.3 液晶鍵盤(pán)調(diào)試 26 結(jié) 論 27 參考文獻(xiàn) 28 附錄1:串口調(diào)試子程序 29 附錄2:整體源程序 31 附錄3:硬件電路圖 48 致 謝 49
1 引言 我們今天的工作生活中,很多的場(chǎng)合都需要身份的認(rèn)證,而傳統(tǒng)的基于標(biāo)志的身份認(rèn)證技術(shù)由于受到證件偽造以及密碼破解等手段的威脅,逐漸表現(xiàn)得有些力不從心。怎樣保護(hù)自己的重要文件資料,如何保證自己的隱私不被泄露?在傳統(tǒng)的身份認(rèn)證中,我們往往使用密碼加密法,但是這種方法只是"防君子不防小人"。在高明的黑客眼里,由幾個(gè)字符組成的密碼脆弱得不堪一擊,F(xiàn)在,科技的發(fā)展讓我們有了新的選擇——生物識(shí)別技術(shù)。將生物識(shí)別技術(shù)應(yīng)用于筆記本、門(mén)鎖等方面,可以對(duì)文件、財(cái)產(chǎn)起保護(hù)作用,并且可以進(jìn)行身份識(shí)別。 生物識(shí)別技術(shù)是依據(jù)人的體貌、聲音等生物特征進(jìn)行身份驗(yàn)證的科學(xué)解決方案,現(xiàn)有的生物識(shí)別技術(shù)大致上包括指紋識(shí)別技術(shù)、掌紋識(shí)別技術(shù)、視網(wǎng)膜識(shí)別技術(shù)、虹膜識(shí)別技術(shù)、面相識(shí)別技術(shù)、聲音識(shí)別技術(shù)和筆跡識(shí)別技術(shù)等。生物識(shí)別技術(shù)的優(yōu)勢(shì)主要有:1、減少、消除身份假冒,進(jìn)行真實(shí)身份的確認(rèn);2、降低管理成本,取代了身份人工認(rèn)證過(guò)程;3、方便使用者,減少或消除了使用卡、鑰匙或者密碼等麻煩。生物識(shí)別技術(shù)的發(fā)展主要起始于指紋研究,它亦是目前應(yīng)用最為廣泛的生物識(shí)別技術(shù)。 指紋識(shí)別技術(shù)的發(fā)展得益于現(xiàn)代電子集成制造技術(shù)和快速可靠的算法的研究。盡管指紋只是人體皮膚的小部分,但用于識(shí)別的數(shù)據(jù)量相當(dāng)大,對(duì)這些數(shù)據(jù)進(jìn)行比對(duì)也不是簡(jiǎn)單的相等與不相等的問(wèn)題,而是使用需要進(jìn)行大量運(yùn)算的模糊匹配算法。現(xiàn)代電子集成制造技術(shù)使得我們可以制造相當(dāng)小的指紋圖像讀取設(shè)備,同時(shí)飛速發(fā)展的個(gè)人計(jì)算機(jī)運(yùn)算速度提供了在微機(jī)甚至單片機(jī)上可以進(jìn)行兩個(gè)指紋的比對(duì)運(yùn)算的可能。另外,匹配算法可靠性也不斷提高,指紋識(shí)別技術(shù)己非常實(shí)用。 1.1 指紋識(shí)別簡(jiǎn)介 1.1.1 指紋識(shí)別原理 指紋識(shí)別技術(shù)的原理和其它生物識(shí)別技術(shù)的原理相似。它是利用人體的指紋特征對(duì)個(gè)體身份進(jìn)行區(qū)分和鑒定。在所有的生物識(shí)別技術(shù)中指紋識(shí)別技術(shù)是目前最為成熟,也被應(yīng)用最廣的生物識(shí)別技術(shù)。這主要因?yàn)橹讣y采用的過(guò)程對(duì)人們來(lái)講非常簡(jiǎn)單,指紋識(shí)別的準(zhǔn)確率高的原因。嚴(yán)格來(lái)講,指紋識(shí)別的原理包括指紋采集原理、指紋特征提取原理和指紋特征匹配原理三大部分。指紋采集原理主要是根據(jù)指紋的幾何特性或生理特性,通過(guò)各種傳感技術(shù)把指紋表現(xiàn)出來(lái),形成數(shù)字化表示的指紋圖案。 由于指紋的嵴和峪的幾何特征不同,主要表現(xiàn)為嵴是突起的,峪是凹下的,所以在接觸到光線時(shí),其反射光的強(qiáng)度也就不同。在接觸到平面時(shí),其在平面上形成的壓力也就不同。另一方面,由于指紋的嵴和峪的生理特征不同,主要表現(xiàn)為:嵴和峪的溫度不同,其導(dǎo)電性也不同,其對(duì)波長(zhǎng)的反饋也就不同。通過(guò)這些幾何的、生理的特性的不同,把人的指紋采集到計(jì)算機(jī)系統(tǒng)中形成指紋圖像。 指紋特征分析的原理是對(duì)指紋圖案的整體特征和細(xì)節(jié)特征進(jìn)行提取、鑒別的原理。其分析的對(duì)象包括紋形特征和特征點(diǎn)的分布、類(lèi)型,以及一組或多組特征點(diǎn)之間的平面幾何關(guān)系。特征點(diǎn)的平面幾何關(guān)系表現(xiàn)為某個(gè)特征點(diǎn)之間的距離等,或者某三個(gè)或更多特征點(diǎn)之間組成的多邊形的幾何特性。不論是特征點(diǎn)的單體特征,還是特征點(diǎn)的組合特征都是指紋特征的組成部分。把這些指紋特征用數(shù)字模板的形式表示出來(lái),就實(shí)現(xiàn)了一個(gè)指紋特征分析的過(guò)程。把人的指紋采集到計(jì)算機(jī)系統(tǒng)中形成指紋圖像。 指紋特征值匹配原理是對(duì)指紋圖案的整體特征和細(xì)節(jié)特征按模式識(shí)別的原理進(jìn)行比對(duì)匹配。匹配是在已注冊(cè)的指紋和當(dāng)前待驗(yàn)證的指紋之間進(jìn)行的。匹配運(yùn)算不是對(duì)兩個(gè)指紋圖像進(jìn)行比較,而是對(duì)已形成數(shù)字模板的指紋特征值進(jìn)行匹配。 1.1.2 指紋識(shí)別應(yīng)用 指紋識(shí)別技術(shù)是最早的通過(guò)計(jì)算機(jī)實(shí)現(xiàn)的身份識(shí)別手段,它是應(yīng)用最為廣泛的生物特征識(shí)別技術(shù)。過(guò)去,它主要應(yīng)用于刑偵系統(tǒng)。近幾年來(lái),它逐漸走向市場(chǎng)更為廣泛的民用市場(chǎng)。指紋技術(shù)在現(xiàn)代生活和工作中的應(yīng)用已越來(lái)越普遍,指紋考勤機(jī)、指紋社保、指紋銀行、指紋商場(chǎng)、指紋投票、指紋保護(hù)電腦、等等生活中和工作中的新現(xiàn)象已廣為人知,其應(yīng)用相當(dāng)廣泛,指紋技術(shù)正在日益刷新著我們的現(xiàn)代化生活方式。指紋識(shí)別技術(shù)是目前國(guó)際公認(rèn)的應(yīng)用廣泛、價(jià)格低廉、易用性高的生物認(rèn)證技術(shù)。指紋只是人體皮膚的小部分,但是它卻蘊(yùn)涵了大量的信息。這些皮膚的紋路在圖案、斷點(diǎn)和交叉點(diǎn)上是各不相同的,在信息處理中將它們稱(chēng)作"特征"。醫(yī)學(xué)上已經(jīng)證明這些特征對(duì)于每個(gè)手指都是不同的,而且這些特征具有唯一性和永久性。因此我們就可以把一個(gè)人同他的指紋對(duì)應(yīng)起來(lái),通過(guò)比較他的指紋特征和預(yù)先保存的指紋特征,就可以驗(yàn)證他的真實(shí)身份。 1.1.3 指紋識(shí)別技術(shù)的發(fā)展 在經(jīng)歷了近 10 年緩慢的自然增長(zhǎng)后,指紋識(shí)別技術(shù)即將迎來(lái)一個(gè)跳躍性發(fā)展的黃金時(shí)期。專(zhuān)家們保守估計(jì),未來(lái) 5 年,我國(guó)將有近百億元的市場(chǎng)等待著企業(yè)去開(kāi)拓。指紋識(shí)別技術(shù)的巨大市場(chǎng)前景,將對(duì)國(guó)際、國(guó)內(nèi)安防產(chǎn)業(yè)產(chǎn)生巨大的影響。較小的公司將面臨新進(jìn)入的傳統(tǒng)行業(yè)大公司的無(wú)情競(jìng)爭(zhēng)。在這些巨無(wú)霸面前,現(xiàn)有中小公司很難說(shuō)有太大的競(jìng)爭(zhēng)力,行業(yè)重新洗牌不可避免,合并與退出可能會(huì)成為大部分中小公司的無(wú)奈選擇。最終可能形成傳統(tǒng)行業(yè)的公司或大資本在較短時(shí)間內(nèi)主導(dǎo)生物特征識(shí)別行業(yè)的局面。這也是每一個(gè)新興市場(chǎng)的必然結(jié)果。而競(jìng)爭(zhēng)的結(jié)果將會(huì)形成一個(gè)新興的大產(chǎn)業(yè)。 國(guó)內(nèi)生物識(shí)別技術(shù)的應(yīng)用主要集中在企業(yè)級(jí)應(yīng)用上,在 2002年總體約為2.5億元人民幣的終端市場(chǎng)中,超過(guò) 40%的產(chǎn)品都用于考勤、門(mén)禁系統(tǒng)之中。自2002年以來(lái)整個(gè)生物識(shí)別市場(chǎng)中指紋識(shí)別占據(jù)了超過(guò) 98%的份額,從需求看,中國(guó) 13 億人口決定了中國(guó)將是未來(lái)全球最大的指紋識(shí)別認(rèn)證技術(shù)市場(chǎng)。 1.2 系統(tǒng)設(shè)計(jì)的目的 現(xiàn)代社會(huì)越來(lái)越需要高效可靠的身份識(shí)別系統(tǒng)。傳統(tǒng)的個(gè)人身份鑒別手段如口令、密碼、身份-甚至磁卡、IC 卡等識(shí)別卡方式。由于其與身份人的可分離性,可假冒、可偽造、可盜用、可破譯,已不能完全滿(mǎn)足現(xiàn)代社會(huì)經(jīng)濟(jì)活動(dòng)和社會(huì)安全防范的需要。從消除人為不安全因素看,只有不易被他人代替、仿制、甚至其本人也無(wú)法轉(zhuǎn)讓的身份誤碼別憑證才能勝任。因此,基于人體生理特征的身份識(shí)別系統(tǒng)逐漸為社會(huì)所矚目。隨著識(shí)別技術(shù)的不斷成熟,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,各種基于人體生理特征的身份識(shí)別系統(tǒng)如:指紋、手掌、聲音、視網(wǎng)膜、瞳孔、面紋等識(shí)別技術(shù)紛紛從實(shí)驗(yàn)室中走出來(lái),由小型機(jī)落戶(hù)微機(jī),走向民用。而從易用性、安全性、成熟性和造價(jià)等方面綜合比較,指紋識(shí)別技術(shù)將成為未來(lái)人體生理特征身份識(shí)別技術(shù)的主流之一,指紋自動(dòng)識(shí)別技術(shù)開(kāi)創(chuàng)了個(gè)人身份鑒別的新時(shí)代,將來(lái)我們生活的很多場(chǎng) 合都要用到指紋,指紋使我們的生活更方便、安全。 1.3 課題背景 指紋檢測(cè)可以良好的判斷和定義一個(gè)人的真實(shí)生物身份,從而降低社會(huì)活動(dòng)中的信任成本。從根本上改變經(jīng)濟(jì)和社會(huì)交往模式,提高效率。未來(lái)社會(huì)利用生物識(shí)別技術(shù)的場(chǎng)合將會(huì)越來(lái)越多,指紋識(shí)別技術(shù)日趨完善,指紋檢測(cè)變得越發(fā)重要。本次設(shè)計(jì)指紋識(shí)別電子密碼鎖是基于深圳指昂科技有限公司生產(chǎn)的ZAZ-010指紋模塊,可以根據(jù)串口通信協(xié)議與上位機(jī)實(shí)現(xiàn)通信,從而實(shí)現(xiàn)指紋的錄入、存儲(chǔ)、比對(duì),并通過(guò)HS12864-15C液晶顯示出指紋采集存儲(chǔ)的過(guò)程和比對(duì)的結(jié)果。指紋電子密碼鎖安全可靠,使用方便。
2 整體設(shè)計(jì)方案 2.1 系統(tǒng)總體設(shè)計(jì) 2.1.1 系統(tǒng)功能描述 本系統(tǒng)是針對(duì)指紋采集、識(shí)別模塊開(kāi)發(fā)出的指紋識(shí)別電子密碼鎖系統(tǒng)。該系統(tǒng)使用指紋模塊搜索手指,一旦搜索到手指,立即采集指紋圖像,并將采集到的圖像轉(zhuǎn)化成數(shù)據(jù)的形式發(fā)送出去。它利用人體指紋各異性和不變性,為用戶(hù)提供加密手段,使用時(shí)只需將手指平放在指紋采集儀的采集窗口上,即可完成采集任務(wù),操作十分方便快捷。主要功能就是用液晶顯示出指紋模塊采集指紋圖像各個(gè)流程及比對(duì)的結(jié)果.采集指紋圖像之前,指紋模塊必須要檢測(cè)手指是否放在采集窗口上,所以就要有錄入指紋這一項(xiàng)功能。簡(jiǎn)單的描述本次設(shè)計(jì)的功能即使用指紋模塊檢測(cè)、錄入指紋,將比對(duì)的數(shù)據(jù)顯示在液晶屏幕上.本系統(tǒng)擁有一次最多錄入三個(gè)指紋的能力。 該系統(tǒng)的主要功能有以下幾個(gè)方面: 1.錄入指紋:系統(tǒng)預(yù)先要有錄入指紋的功能,即將個(gè)人的指紋通過(guò)指紋采集器采集用戶(hù)指紋的特征信息。 2.合成指紋模板并存儲(chǔ):通過(guò)光電轉(zhuǎn)換后,將指紋特征值和對(duì)應(yīng)的 ID 號(hào)存儲(chǔ)到存儲(chǔ)器中。上位機(jī)只要有上傳指紋的命令,模塊可以立即將數(shù)據(jù)傳送到指定位置。 3.搜索指紋庫(kù)比對(duì)指紋:當(dāng)有指紋錄入時(shí),模塊會(huì)響應(yīng)上位機(jī)指令搜索指紋庫(kù)比對(duì)指紋,同時(shí)液晶顯示比對(duì)結(jié)果,繼電器動(dòng)作、發(fā)光二極管亮。 2.1.2 系統(tǒng)總體框架 系統(tǒng)的總體框架是指根據(jù)設(shè)計(jì)任務(wù)要求,對(duì)系統(tǒng)所需元件、設(shè)備參數(shù)進(jìn)行必要的計(jì)算,通過(guò)認(rèn)真研究、分析、比較選定設(shè)備型號(hào),再將設(shè)備、元件通過(guò)可靠的接口電路聯(lián)系起來(lái)構(gòu)成一個(gè)完整的系統(tǒng)。在系統(tǒng)的整體方案確定之前,先要明確設(shè)計(jì)要求,然后對(duì)系統(tǒng)硬件、軟件進(jìn)行設(shè)計(jì),其中包括繪制原理框圖、電路圖,對(duì)原理進(jìn)行必要說(shuō)明,綜合考慮系統(tǒng)的性能和穩(wěn)定性要求,以保證所設(shè)計(jì)的系統(tǒng)達(dá)到預(yù)期的要求。通過(guò)查閱大量的文獻(xiàn)資料、綜合分析考慮 。主控芯片選用Atmeg16單片機(jī)。系統(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)檢測(cè)到有按鍵按下時(shí)先由MCU通過(guò)串口通信控制指紋模塊對(duì)指紋進(jìn)行采集、錄入、存儲(chǔ)、比對(duì)。然后,根據(jù)所得的數(shù)據(jù)對(duì)其它接口器件,如液晶屏、繼電器進(jìn)行響應(yīng)操作。 2.2 系統(tǒng)核心部件單片機(jī) 2.2.1 單片機(jī)的選擇 單片機(jī)微型計(jì)算機(jī)是微型計(jì)算機(jī)的一個(gè)重要分支,也是頗具生命力的機(jī)種。單片機(jī)微型計(jì)算機(jī)簡(jiǎn)稱(chēng)單片機(jī),特別適用于控制領(lǐng)域,故又稱(chēng)為微控制器。 通常,單片機(jī)由單塊集成電路芯片構(gòu)成,內(nèi)部包含有計(jì)算機(jī)的基本功能部件:中央處理器、存儲(chǔ)器和I/O接口電路等。因此,單片機(jī)只需要和適當(dāng)?shù)能浖巴獠吭O(shè)備相結(jié)合,便可成為一個(gè)單片機(jī)控制系統(tǒng)。 20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。時(shí)間對(duì)人們來(lái)說(shuō)總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無(wú)傷大雅。但是,一旦重要事情,一時(shí)的耽誤可能釀成大禍。 目前,單片機(jī)正朝著高性能和多品種方向發(fā)展趨勢(shì)將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價(jià)格和外圍電路內(nèi)裝化等幾個(gè)方面發(fā)展。單片機(jī)應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分功能,現(xiàn)在已能用單片機(jī)通過(guò)軟件方法來(lái)實(shí)現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱(chēng)為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。 單片機(jī)經(jīng)過(guò)1、2、3代的發(fā)展,正朝著多功能、高性能、低電壓、低功耗、低價(jià)格、大存儲(chǔ)容量、強(qiáng)I/O功能及較好的結(jié)構(gòu)兼容性方向發(fā)展。其發(fā)展趨勢(shì)不外乎以下幾個(gè)方面: 1.多功能 單片機(jī)中盡可能地把所需要的存儲(chǔ)器和I/O口都集成在一塊芯片上,使得單片機(jī)可以實(shí)現(xiàn)更多的功能。比如A/D、PWM、PCA(可編程計(jì)數(shù)器陣列)、WDT(監(jiān)視定時(shí)器---看家狗)、高速I(mǎi)/O口及計(jì)數(shù)器的捕獲/比較邏輯等。 有的單片機(jī)針對(duì)某一個(gè)應(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ū)動(dòng)器也開(kāi)始集成在8位單片機(jī)中。 2.高效率和高性能 為了提高執(zhí)行速度和執(zhí)行效率,單片機(jī)開(kāi)始使用RISC、流水線和DSP的設(shè)計(jì)技術(shù),使單片機(jī)的性能有了明顯的提高,表現(xiàn)為:?jiǎn)纹瑱C(jī)的時(shí)鐘頻率得到提高;同樣頻率的單片機(jī)運(yùn)行效率也有了很大的提升;由于集成度的提高,單片機(jī)的尋址能力、片內(nèi)ROM(FLASH)和RAM的容量都突破了以往的數(shù)量和限制。 由于系統(tǒng)資源和系統(tǒng)復(fù)雜程度的增加,開(kāi)始使用高級(jí)語(yǔ)言(如C語(yǔ)言)來(lái)開(kāi)發(fā)單片機(jī)的程序。使用高級(jí)語(yǔ)言可以降低開(kāi)發(fā) 難度,縮短開(kāi)發(fā)周期,增強(qiáng)軟件的可讀性和可移植性,便于改進(jìn)和擴(kuò)充功能。 AVR 內(nèi)核單片機(jī)具有豐富的指令集和32個(gè)通用工作寄存器。所有的寄存器都直接與算邏單元(ALU) 相連接,使得一條指令可以在一個(gè)時(shí)鐘周期內(nèi)同時(shí)訪問(wèn)兩個(gè)獨(dú)立的寄存器。這種結(jié)構(gòu)大大提高了代碼效率,并且具有比普通的CISC 微控制器最高至10 倍的數(shù)據(jù)吞吐率。ATmega16L 有如下特點(diǎn): .16K字節(jié)的系統(tǒng)內(nèi)可編程Flash(具有同時(shí)讀寫(xiě)的能力,即RWW); .512字節(jié)EEPROM,1K 字節(jié)SRAM; .32 個(gè)通用I/O 口線; .32 個(gè)通用工作寄存器; .用于邊界掃描的JTAG 接口,支持片內(nèi)調(diào)試與編程; .三個(gè)具有比較模式的靈活的定時(shí)器/ 計(jì)數(shù)器(T/C); .片內(nèi)/外中斷,片內(nèi)經(jīng)過(guò)標(biāo)定的RC 振蕩器; .可編程串行USART,有起始條件檢測(cè)器的通用串行接口; .8路10位具有可選差分輸入級(jí)可編程增益(TQFP 封裝) 的ADC; .具有片內(nèi)振蕩器的可編程看門(mén)狗定時(shí)器; .一個(gè)SPI 串行端口; .四通道PWM,兩路8位,兩路16位; .六個(gè)可以通過(guò)軟件進(jìn)行選擇的省電模式:空閑模式、ADC 噪聲抑制模式、省電模式、掉電模式、Standby 模式以及擴(kuò)展的Standby 模式; .速度等級(jí):0 - 8 MHz; .工作電壓:2.7 - 5.5V; .工作于空閑模式時(shí)CPU 停止工作,而USART、兩線接口、A/D 轉(zhuǎn)換器、SRAM、T/C、SPI 端口以及中斷系統(tǒng)繼續(xù)工作; .掉電模式時(shí)晶體振蕩器停止振蕩,所有功能除了中斷和硬件復(fù)位之外都停止工作; .在省電模式下,異步定時(shí)器繼續(xù)運(yùn)行,允許用戶(hù)保持一個(gè)時(shí)間基準(zhǔn),而其余功能模塊處于休眠狀態(tài); .ADC 噪聲抑制模式時(shí)終止CPU 和除了異步定時(shí)器與ADC 以外所有I/O 模塊的工作,以降低ADC 轉(zhuǎn)換時(shí)的開(kāi)關(guān)噪聲; .Standby 模式下只有晶體或諧振振蕩器運(yùn)行,其余功能模塊處于休眠狀態(tài),使得器件只消耗極少的電流,同時(shí)具有快速啟動(dòng)能力; 擴(kuò)展Standby 模式下則允許振蕩器和異步定時(shí)器繼續(xù)工作。 本芯片是以Atmel 高密度非易失性存儲(chǔ)器技術(shù)生產(chǎn)的。片內(nèi)ISP Flash 允許程序存儲(chǔ)器通過(guò)ISP 串行接口,或者通用編程器進(jìn)行編程,也可以通過(guò)運(yùn)行于AVR 內(nèi)核之中的引導(dǎo)程序進(jìn)行編程。引導(dǎo)程序可以使用任意接口將應(yīng)用程序下載到應(yīng)用Flash存儲(chǔ)區(qū)(Application Flash Memory)。在更新應(yīng)用Flash存儲(chǔ)區(qū)時(shí)引導(dǎo)Flash區(qū)(Boot Flash Memory)的程序繼續(xù)運(yùn)行,實(shí)現(xiàn)了RWW 操作。 通過(guò)將8 位RISC CPU 與系統(tǒng)內(nèi)可編程的Flash 集成在一個(gè)芯片內(nèi),ATmega16 成為一個(gè)功能強(qiáng)大的單片機(jī),為許多嵌入式控制應(yīng)用提供了靈活而低成本的解決方案。 下面是基于八位AVR單片機(jī)芯片ATMEGA16的主控系統(tǒng)方案: 2.2.2 ATMEG16單片機(jī)的介紹 ATMEG 16的管腳說(shuō)明如圖2-2所示:
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAC86.tmp.png | 圖2-2 DIP封裝 ATMEG 16單片機(jī)引腳結(jié)構(gòu)圖
1. VCC為數(shù)字電路的電源,GND為地。 2. 端口A(PA7-PA0)作為A/D轉(zhuǎn)換器的模擬輸入端,是8位雙向I/O口,具有編程的內(nèi)部上拉電阻。其輸出緩沖器具有對(duì)稱(chēng)的驅(qū)動(dòng)特性,可以輸出和吸收大電流。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,端口被外部拉低時(shí)將輸出電流。在復(fù)位過(guò)程中,即使系統(tǒng)時(shí)鐘還未起振,端口A處于高阻狀態(tài)。 3. 端口B(PB7-PB0)為8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對(duì)稱(chēng)的驅(qū)動(dòng)特性,可以輸出和吸收大電流。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,端口被外部電路拉低時(shí)將輸出電流。在復(fù)位過(guò)程中,即使系統(tǒng)始終還未起振,端口B處于高阻狀態(tài)。端口B也可以用做其他不同的特殊功能。 4. 端口C(PC7-PC0)為8位雙向I/O口,具有可編程的內(nèi)部上拉電阻。其輸出緩沖器具有對(duì)稱(chēng)的驅(qū)動(dòng)特性,可以輸出和吸收大電流。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,端口被外部電路拉低時(shí)將輸出電流。在復(fù)位過(guò)程中,即使系統(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)部上拉電阻。其輸出緩沖器具有對(duì)稱(chēng)的驅(qū)動(dòng)特性,可以輸出和吸收大電流。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,端口被外部電路拉低時(shí)將輸出電流。在復(fù)位過(guò)程中,即使系統(tǒng)始終還未起振,端口D處于高阻狀態(tài)。端口D也可以用做其他不同的特殊功能。 6. RESET為復(fù)位輸入引腳,持續(xù)時(shí)間超過(guò)最小門(mén)限時(shí)間的低電平將引起復(fù)位。 7. XTAL1為晶振反相放大器的輸入端和內(nèi)部時(shí)鐘操作電路的輸入端。 8. XTAL2為晶振反相放大器的輸出端。 9. AVCC是端口A與A/D轉(zhuǎn)換器的電源。不使用ADC時(shí),該引腳應(yīng)該直接與Vcc連接。使用ADC時(shí)應(yīng)通過(guò)一個(gè)低通濾波器與Vcc連接。 10.AREF是A/D的模擬基準(zhǔn)輸入引腳。 2.2.3 單片機(jī)的復(fù)位電路 復(fù)位是單片機(jī)的初始化操作,其作用是使CPU中的各個(gè)部件都處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開(kāi)始工作。 ATmega16有5個(gè)復(fù)位源: 1. JTAG AVR復(fù)位:復(fù)位寄存器為1時(shí)MCU復(fù)位。 2. 上電復(fù)位:電源電壓低于上電復(fù)位門(mén)限 VPOT時(shí),MCU復(fù)位。 3. 看門(mén)狗復(fù)位:看門(mén)狗使能并且看門(mén)狗定時(shí)器溢出時(shí)復(fù)位發(fā)生。 4. 外部復(fù)位:引腳 RESET上的低電平持續(xù)時(shí)間大于最小脈沖寬度時(shí)MCU復(fù)位。 5. 掉電檢測(cè)復(fù)位:掉電檢測(cè)功能使能,且電源電壓低于掉電檢測(cè)電壓時(shí)復(fù)位。 ATmega16單片機(jī)5個(gè)復(fù)位源中,最常用的是外部復(fù)位和看門(mén)狗復(fù)位電路。外部復(fù)位電路由外加于RESET 引腳的低電平產(chǎn)生。當(dāng)復(fù)位低電平持續(xù)時(shí)間大于最小脈沖寬度時(shí)即觸發(fā)復(fù)位過(guò)程,即使此時(shí)并沒(méi)有時(shí)鐘信號(hào)在運(yùn)行。當(dāng)外加信號(hào)達(dá)到復(fù)位門(mén)限電壓VTOUT延時(shí)周期開(kāi)始。延時(shí)結(jié)束后MCU即啟動(dòng)。外部復(fù)位時(shí)序圖如圖2-3所示,外部復(fù)位原理圖如圖2-4所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAC96.tmp.jpg
圖 2-3 外部電路復(fù)位時(shí)序圖 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsAC97.tmp.jpg 圖 2-4 外部復(fù)位原理圖
2.2.4 ATMEG16最小系統(tǒng)及晶振的選擇 ATmega16芯片有如下幾種通過(guò)Flash熔絲位進(jìn)行選擇的時(shí)鐘源。時(shí)鐘輸入到AVR時(shí)鐘發(fā)生器,再分配到相應(yīng)的模塊。 表2—1 熔絲配置模式 器件時(shí)鐘選項(xiàng) | CKSEL3..0 | 外部晶體/陶瓷振蕩器 | 1111 – 1010 | 外部低頻晶振 | 1001 | 外部RC振蕩器 | 1000 – 0101 | 標(biāo)定的內(nèi)部RC振蕩器 | 0100 – 0001 | 外部時(shí)鐘 | 0000 |
注:此選項(xiàng)不適用于晶體,只能用于陶瓷諧振器。 晶體振蕩電路:XTAL1與XTAL2分別為用作片內(nèi)振蕩器的反向放大器的輸入和輸出,如圖2-5所示,這個(gè)振蕩器可以使用石英晶體,也可以使用陶瓷諧振器。熔絲位CKOPT用來(lái)選擇這兩種放大器模式的其中之一。當(dāng)CKOPT被編程時(shí)振蕩器在輸出引腳產(chǎn)生滿(mǎn)幅度的振蕩。這種模式適合于噪聲環(huán)境,以及需要通過(guò)XTAL2驅(qū)動(dòng)第二個(gè)時(shí)鐘緩沖器的情況。而且這種模式的頻率范圍比較寬。當(dāng)保持CKOPT為未編程狀態(tài)時(shí),振蕩器的輸出信號(hào)幅度比較小。其優(yōu)點(diǎn)是大大降低了功耗,但是頻率范圍比較窄,而且不能驅(qū)動(dòng)其他時(shí)鐘緩沖器。對(duì)于諧振器,CKOPT未編程時(shí)的最大頻率為8 MHz,CKOPT編程時(shí)為16 MHz。C1和C2的數(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ū)動(dòng)。 2.3.1 HS12864-15C系列液晶的特點(diǎn) 1. HS12864-15系列硬件特性如下: .提供8位,4位并行接口及傳行接口可選 .自動(dòng)電源啟動(dòng)復(fù)位功能 .內(nèi)部自建振蕩源 .64*16位字符顯示RAM(DDRAM最多16字符*4行) .2M位中文字型ROM(CGROM),總共8192個(gè)中文字型 2. HS12864-15系列軟件特性如下: .文字與圖形混合顯示功能 .畫(huà)面清除功能 .光標(biāo)歸位功能 .顯示開(kāi)/關(guān)功能 .反白顯示功能 .垂直畫(huà)面旋轉(zhuǎn)功能 .休眠模式 2.3.2 HS12864-15C系列液晶的引腳功能 引腳PSB為芯片的傳輸方式控制端;引腳 E 為讀寫(xiě)使能信號(hào),它是在下降沿時(shí)數(shù)據(jù)被鎖存入HS12864液晶的;在E高電平期間,數(shù)據(jù)被讀出;R/W 為讀寫(xiě)選擇信號(hào),當(dāng)它為一時(shí)為讀選通,為零時(shí)為寫(xiě)選通;DB0-DB7為數(shù)據(jù)總線RST為復(fù)位信號(hào)。復(fù)位信號(hào)有效時(shí),關(guān)閉液晶顯示,使顯示起始行為0,RST可跟MCU連,由MCU控制;也可直接接VDD,使之不起作用。引腳功能如表2-1所示: 表2-1 HS12864-15C的引腳功能 | | | | | | | | | | | [size=10.5000pt]在E下降沿,數(shù)據(jù)被鎖存(寫(xiě))入HS12864-15C;在E高電平期間,數(shù)據(jù)被讀出 | | | | | | | | RS=1為數(shù)據(jù)操作 RS=0為寫(xiě)指令或讀狀態(tài) | | | |
| | | | 復(fù)位信號(hào)有效時(shí),關(guān)閉液晶顯示,使顯示起始行為0[size=10.5000pt],RST可跟MCU相連,由M[size=10.5000pt]CU控制;也可直接接VDD,使之不起作用。 |
2.3.3 液晶顯示HS12864-15C的指令系統(tǒng) 1.清除顯示
2.顯示開(kāi)/關(guān)指令 控制整體顯示開(kāi)關(guān),游標(biāo)開(kāi)關(guān),游標(biāo)位置顯示反白開(kāi)關(guān); D=1,整體顯示開(kāi);D=0,整體顯示關(guān); C=1,游標(biāo)顯示開(kāi);C=0,游標(biāo)顯示關(guān); B=1,游標(biāo)位置顯示反白開(kāi);B=0,游標(biāo)位置顯示反白關(guān);
3.讀取忙狀態(tài) 讀取忙狀態(tài)以確定內(nèi)部動(dòng)作是否完成,同時(shí)可以讀出地址計(jì)數(shù)器AC的值
4.寫(xiě)數(shù)據(jù) 讀、寫(xiě)數(shù)據(jù)指令每執(zhí)行完一次讀、寫(xiě)操作,列地址就自動(dòng)增一,必須注意的是,進(jìn)行讀操作之前,必須有一次空讀操作,緊接著再讀才會(huì)讀出所要讀的單元中的數(shù)據(jù)。
5.讀數(shù)據(jù) 讀、寫(xiě)數(shù)據(jù)指令每執(zhí)行完一次讀、寫(xiě)操作,列地址就自動(dòng)增一,必須注意的是,進(jìn)行讀操作之前,必須有一次空讀操作,緊接著再讀才會(huì)讀出所要讀的單元中的數(shù)據(jù)。
2.4 電源和指紋模塊 指紋模塊采用深圳市指昂科技有限公司生產(chǎn)的ZAZ-010系列獨(dú)立式指紋識(shí)別模塊,以高速DSP處理器為核心。主要技術(shù)指標(biāo)如下 供電電壓:DC 3.6-6.0V 供電電流:工作電流:100mA(典型值) 峰值電流:150mA 指紋圖像錄入時(shí)間:<0.5 秒 窗口面積: 14 *18 mm 匹配方式: 比對(duì)方式(1:1) 搜索方式(1:N) 特征文件: 256 字節(jié) 模板文件: 512 字節(jié) 存儲(chǔ)容量: 100枚 安全等級(jí): 五級(jí)(從低到高:1、2、3、4、5) 認(rèn)假率(FAR):<0.001% 拒真率(FRR):<0.1% 搜索時(shí)間: <1.0 秒 (1:1000 時(shí),均值) 上位機(jī)接口: UART(TTL 邏輯電平) 通訊波特率(UART): (9600*N)bps 其中N=1~12 (默認(rèn)值N=6,即57600bps) 2.4.1 ZAZ-010系列獨(dú)立式指紋識(shí)別模塊引腳功能 模塊中引腳1與電源相連,引腳2接單片機(jī)的RXD端,引腳3接單片機(jī)的TXD端,引腳4懸空,引腳5接地。表2-2如下: 表2-2指紋識(shí)別模塊引腳功能 | 名稱(chēng) | 類(lèi)型 | | | Vin | in | | | TD | out | | | RD | in | | | NC | - | | | GND | - | |
2.4.2 ZAZ-010系列指紋識(shí)別模塊指令系統(tǒng) 模塊通過(guò)串行通訊接口,可直接與采用3.3v或者5v電源的單片機(jī)進(jìn)行通訊。模塊數(shù)據(jù)發(fā)送端接上位機(jī)接收端,模塊數(shù)據(jù)接收腳接上位機(jī)數(shù)據(jù)發(fā)送端。 錄入指紋圖像指令: 指令包格式:
應(yīng)答包格式: 注:確認(rèn)碼=00H 表示錄入成功; 確認(rèn)碼=01H 表示收包有錯(cuò); 確認(rèn)碼=02H 表示傳感器上無(wú)手指; 確認(rèn)碼=03H 表示錄入不成功;
圖像生成特征 Img2Tz指令: 指令包格式: 應(yīng)答包格式: 注:確認(rèn)碼=00H 表示生成特征成功; 確認(rèn)碼=01H 表示收包有錯(cuò); 確認(rèn)碼=06H 表示指紋圖像太亂而生不成特征; 確認(rèn)碼=07H 表示指紋圖像正常,但特征點(diǎn)太少而生不成特征; 確認(rèn)碼=15H 表示圖像緩沖區(qū)內(nèi)沒(méi)有有效原始圖而生不成圖像;
特征合成模板RegMode1指令: 功能說(shuō)明:將CharBuffer1與CharBuffer2中的特征文件合成特征模板。 指令包格式: 應(yīng)答包格式: 注:確認(rèn)碼=00H 表示合并成功; 確認(rèn)碼=01H 表示收包有錯(cuò); 確認(rèn)碼=0aH 表示合并失。▋擅吨讣y不屬于同一手指);
存儲(chǔ)模板 Store指令: 指令包格式: 應(yīng)答包格式: 注:確認(rèn)碼=00H 表示儲(chǔ)存成功; 確認(rèn)碼=01H 表示收包有錯(cuò);
搜索指紋Search指令: 指令包格式: 應(yīng)答包格式: 注:確認(rèn)碼=00H 表示搜索到; 確認(rèn)碼=09H 表示沒(méi)有搜索; 2.4.3 電源模塊 電源模塊可以直接提供正5V的直流電壓,但是由于在一些工業(yè)環(huán)境中并不提供直流電源,而都是交流電源,為確保其實(shí)用性,在電源這一部分,提供了整流穩(wěn)壓電路,可以把交流電壓變成5V的電壓,為整個(gè)電路板提供電源。 從圖2-6可以看出,當(dāng)開(kāi)關(guān)按下時(shí),電路接通,先通過(guò)一個(gè)整流電路,使交流電壓變成直流電壓。為了保證其輸出的電壓是5V,在后面接一個(gè)穩(wěn)壓電路,由一個(gè)7805穩(wěn)壓器和一個(gè)發(fā)光二極管組成,發(fā)光二極管作為電源導(dǎo)通的指示燈。當(dāng)電源導(dǎo)通時(shí)二極管發(fā)光。其中電容C1起濾波作用,電容C2是抑制高平信號(hào)。電容C3, C4直接接地,起到抗干擾的作用,能使電壓穩(wěn)定在5V。有了電源模塊避免了因沒(méi)有直流電源而無(wú)法使用的問(wèn)題,使這個(gè)儀表能夠在更多的環(huán)境中使用。電源模塊電路圖如圖2-6所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACD8.tmp.png
圖 2-6 電源模塊電路圖 3 系統(tǒng)軟件的設(shè)計(jì) 3.1 系統(tǒng)程序工作分析 在本文的電路板中,單片機(jī)是作為控制器嵌入到系統(tǒng)中。應(yīng)用程序的開(kāi)發(fā)主要分為兩大部分,即對(duì)ZAZ-010指紋識(shí)別模塊的的應(yīng)用程序開(kāi)發(fā)以及對(duì)HS12864液晶、按鍵程序的開(kāi)發(fā)。因此,要實(shí)現(xiàn)其應(yīng)用,需要對(duì)其進(jìn)行聯(lián)合調(diào)試。電路軟件應(yīng)用開(kāi)發(fā)根據(jù)所設(shè)計(jì)的硬件。程序開(kāi)發(fā)的方式將主要建立一系列的C語(yǔ)言函數(shù)子程序供主程序的隨時(shí)調(diào)用。即對(duì)ZAZ-010指紋識(shí)別模塊或液晶電路分別編制C語(yǔ)言函數(shù)子程序。因此,需要有專(zhuān)門(mén)的開(kāi)發(fā)工具。本設(shè)計(jì)中,采用AVRStudio4.0單片機(jī)軟件開(kāi)發(fā)環(huán)境對(duì)單片機(jī)進(jìn)行編程,由于該編譯器支持模塊化程序設(shè)計(jì),因此可以先將源程序劃分為幾個(gè)模塊分別編寫(xiě),然后再由編譯器生成一個(gè)最終文件. 該開(kāi)發(fā)環(huán)境可以對(duì)程序進(jìn)行軟件仿真調(diào)試,因此可以方便地進(jìn)行程序的編寫(xiě)和調(diào)試。調(diào)試通過(guò)的代碼文件通過(guò)開(kāi)發(fā)板下載到單片機(jī)。單片機(jī)在上電后,主程序應(yīng)該完成相應(yīng)的初始化工作。依據(jù)電路的功能要求,主程序必須對(duì)液晶初始化、同時(shí)對(duì)按鍵進(jìn)行檢測(cè),如果有對(duì)應(yīng)的按鍵按下。執(zhí)行相應(yīng)的操作,單片機(jī)通過(guò)串行接口對(duì)指紋模塊進(jìn)行讀寫(xiě)。 3.2 設(shè)計(jì)前準(zhǔn)備工作 由于使用串口和模塊通訊,所以必須先約定好單片機(jī)和模塊的的串口工作速度和數(shù)據(jù)包格式。 UART數(shù)據(jù)格式定位為:8位數(shù)據(jù)位、1位停止位、無(wú)奇偶校驗(yàn)位,數(shù)據(jù)傳輸速率為57600bps。 通訊數(shù)據(jù)包格式定義為: 單片機(jī)發(fā)送串行數(shù)據(jù)包格式如圖3-1 MCU發(fā)送數(shù)據(jù)包格式 發(fā)送數(shù)據(jù)共11-14個(gè)字節(jié),前6個(gè)字節(jié)是模塊的包頭和模塊地址為固定值,后5-8個(gè)字節(jié)是傳輸?shù)哪K的命令。同時(shí)根據(jù)外部晶振和系統(tǒng)默認(rèn)的傳輸速率算出控制串口的各寄存器的初始值。參考meg16資料后編寫(xiě)了以下一段串口初始化。 各寄存器設(shè)置的程序. 如下面的一段程序既是對(duì)個(gè)寄存器的初始值的設(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 單片機(jī)的程序設(shè)計(jì) 根據(jù)上節(jié)分析,制定如下圖的程序流程圖。主程序主要由液晶顯示、通訊子、按鍵程序組成。主程序的工作流程描述如下:首先初始化各種硬件功能模塊進(jìn)行初始化。包括開(kāi)機(jī)液晶顯示、鍵盤(pán)掃描、指紋模塊建立通信。 主程序設(shè)計(jì)流程如圖3-1所示:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACD9.tmp.png 程序的巡檢過(guò)程: 首先對(duì)各模塊進(jìn)行初始化,檢測(cè)在有無(wú)按鍵按下,如果按下判斷是那一個(gè)按鍵,并作出判斷是否調(diào)用相應(yīng)子程序;當(dāng)按鍵1按下后,調(diào)用通信模塊子程序,錄入指紋并將其存入模塊緩沖區(qū),同理當(dāng)按鍵2按下后,效果相同。 依次當(dāng)按鍵3按下時(shí),將指紋模塊兩緩沖區(qū)中的指紋特征文件合成特征模板并存儲(chǔ)與指紋模板庫(kù)中,當(dāng)4按鍵按下后搜索指紋并比對(duì).當(dāng)指紋模塊中有指紋存儲(chǔ)時(shí)直接按4鍵同樣也可進(jìn)行比對(duì)。 程序關(guān)鍵的就是對(duì)指紋模塊的通信控制, 考慮到處理過(guò)程太過(guò)冗長(zhǎng),限于篇幅只能將其省略,如需查看,可以看附錄1。其它命令發(fā)送子函數(shù)因大部分的命令大體格式基本相同。 3.3.1 鍵盤(pán)管理程序設(shè)計(jì)流程 鍵盤(pán)模塊的工作流程圖如圖3-2所示:
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACDA.tmp.png | 圖 3-2 鍵盤(pán)模塊流程圖
3.3.2 LCD顯示模塊程序設(shè)計(jì)流程 顯示模塊主要完成數(shù)據(jù)的顯示功能。首先當(dāng)模塊接受指令前,單片機(jī)必須確認(rèn)模塊內(nèi)部處于非忙碌狀態(tài),然后根據(jù)接受到指令顯示相關(guān)的內(nèi)容在屏幕上。
3.3.3 指紋通信模塊的程序設(shè)計(jì)流程 串口通信數(shù)據(jù)發(fā)送、接收流程圖如圖3-3:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACEA.tmp.png 圖3-3 串口通信數(shù)據(jù)發(fā)送、接收流程圖
4 實(shí)物的制作與調(diào)試 4.1 電路的焊接 1.焊前準(zhǔn)備 首先要熟悉所焊印制電路板的裝配圖,并按圖紙配料,檢查元器件型號(hào)、規(guī)格及數(shù)量是否符合圖紙要求,并做好裝配前元器件引線成型等準(zhǔn)備工作。 2.焊接順序 元器件裝焊順序依次為:電阻器、電容器、二極管、三極管、集成電路、大功率管,其它元器件為先小后大。 3.對(duì)元器件焊接要求 (1)電阻器焊接 按圖將電阻器準(zhǔn)確裝人規(guī)定位置。要求標(biāo)記向上,字向一致。裝完同一種規(guī)格后再裝另一種規(guī)格,盡量使電阻器的高低一致。焊完后將露在印制電路板表面多余引腳齊根剪去。 (2)電容器焊接 將電容器按圖裝人規(guī)定位置,并注意有極性電容器其 “ + ” 與 “ - ” 極不能接錯(cuò),電容器上的標(biāo)記方向要易看可見(jiàn)。先裝玻璃釉電容器、有機(jī)介質(zhì)電容器、瓷介質(zhì)電容器,最后裝電解電容器。 (3)二極管的焊接 二極管焊接要注意以下幾點(diǎn):第一,注意陽(yáng)極陰極的極性,不能裝錯(cuò);第二,型號(hào)標(biāo)記要易看可見(jiàn);第三,焊接立式二極管時(shí),對(duì)最短引線焊接時(shí)間不能超過(guò) 2S 。 (4)三極管焊接 注意 e 、 b 、 c 三引線位置插接正確;焊接時(shí)間盡可能短,焊接時(shí)用鑷子夾住引線腳,以利散熱。焊接大功率三極管時(shí),若需加裝散熱片,應(yīng)將接觸面平整、打磨光滑后再緊固,若要求加墊絕緣薄膜時(shí),切勿忘記加薄膜。管腳與電路板上需連接時(shí),要用塑料導(dǎo)線。 (5)集成電路 焊接首先按圖紙要求,檢查型號(hào)、引腳位置是否符合要求。焊接時(shí)先焊邊沿的二只引腳,以使其定位,然后再?gòu)淖蟮接易陨隙轮饌(gè)焊接。對(duì)于電容器、二極管、三極管露在印制電路板面上多余引腳均需齊根剪去。
4.2 電路和程序的調(diào)試 4.2.1 單片機(jī)的程序下載 程序存儲(chǔ)器的更新以頁(yè)的方式進(jìn)行。在用臨時(shí)頁(yè)緩沖器存儲(chǔ)的數(shù)據(jù)對(duì)一頁(yè)存儲(chǔ)器進(jìn)行編程時(shí),首先要將這一頁(yè)擦除。SPM指令以一次一個(gè)字的方式將數(shù)據(jù)寫(xiě)入臨時(shí)頁(yè)緩沖器。臨時(shí)頁(yè)緩沖器的寫(xiě)入可以在頁(yè)擦除命令之前完成,也可以在頁(yè)擦除和頁(yè)寫(xiě)操作之間完成。通過(guò)電腦上的下載軟件將*.HEX文件傳輸?shù)剑ㄈ鐖D4-1所示)USB下載線板上的ATmega8芯片里,程序代碼在這里經(jīng)過(guò)處理后從固定的I/O管腳中輸出燒寫(xiě)到單片機(jī)的Flash存儲(chǔ)器中。此外單片機(jī)一般采用5V以下的電源供電,USB接口也采用5V電源,所以,該下載線還可以通過(guò)電腦向單片機(jī)提供工作電源。該下載線采用先進(jìn)的USB2.0接口技術(shù)解決了筆記本不帶并口的遺憾,還有它小巧精致,攜帶方便,下載程序速度快等優(yōu)點(diǎn)得到了眾多編程愛(ài)好者的青睞而被廣泛的使用著。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACEB.tmp.png 圖4-1 USB下載線實(shí)物圖
4.2.2 串口調(diào)試 使用串口調(diào)試助手進(jìn)行測(cè)試 串口調(diào)試程序見(jiàn)附錄1: 測(cè)試結(jié)果如圖4-2所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACEC.tmp.jpg 圖4-2 串口通信測(cè)試結(jié)果圖
4.2.3 液晶鍵盤(pán)調(diào)試 液晶鍵盤(pán)測(cè)試程序見(jiàn)附錄2: 液晶鍵盤(pán)測(cè)試程序結(jié)果如圖 4-3所示: file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsACED.tmp.png 圖 4-3 液晶鍵盤(pán)測(cè)試結(jié)果
結(jié) 論 根據(jù)設(shè)計(jì)要求,本設(shè)計(jì)已經(jīng)基本完成題目要求但還存在不足之處。由于單片機(jī)flash容量有限,在指紋存儲(chǔ)數(shù)目上較少,只能錄入三個(gè)指紋 ,并進(jìn)行比對(duì)。 通過(guò)方案論證、資料查詢(xún)及電路設(shè)計(jì)和反復(fù)調(diào)試,不斷的解決電路調(diào)試過(guò)程中的問(wèn)題,最終在規(guī)定的時(shí)間內(nèi)完成了設(shè)計(jì)任務(wù)。本設(shè)計(jì)由于水平有限,電路及程序設(shè)計(jì)還有需要改進(jìn)的地方,在今后的學(xué)習(xí)和研究中,將繼續(xù)改進(jìn)完善。 另外在調(diào)試過(guò)程中,以保證作品實(shí)現(xiàn)功能準(zhǔn)確為前提,盡量做到電路簡(jiǎn)單、美觀、效果好、成本低,以增強(qiáng)其實(shí)用價(jià)值。 本設(shè)計(jì)最終可以實(shí)現(xiàn)三個(gè)指紋錄入、比對(duì)和模擬開(kāi)鎖的過(guò)程,但存儲(chǔ)指紋數(shù)目有待進(jìn)一步的研究開(kāi)發(fā)。
參考文獻(xiàn) [1] 楊若冰,杜燕.指紋識(shí)別技術(shù)與產(chǎn)業(yè)分析,2006年 [2]張成,周媛媛等.指紋采集技術(shù)及其產(chǎn)品發(fā)展趨勢(shì).電子技術(shù)應(yīng)用,2004年 [3] 柴曉光,岑寶熾.民用指紋識(shí)別技術(shù),北京:人民郵電出版社,2004 [4] 丁化成,耿德根等.AVR單片機(jī)應(yīng)用設(shè)計(jì),北京:北京航空航天大學(xué)出版社,2002 [5] 張毅剛.單片機(jī)原理與應(yīng)用,北京:高等教育出版社,2006 [6] 張?zhí)旆?/font>.51單片機(jī)C語(yǔ)言開(kāi)發(fā)詳解,北京:電子工業(yè)出版社,2008 [7] 溫正,何嘉揚(yáng)等.AVR單片機(jī)開(kāi)發(fā)從入門(mén)到精通,中國(guó)電力出版,2009 [8] 李泓.AVR單片機(jī)入門(mén)與實(shí)踐,北京航空航天大學(xué),2008 [9] 佟長(zhǎng)福. AVR單片機(jī)GCC程序設(shè)計(jì), 北京航空航天大學(xué)出版社, 2006 [10] 張軍,宋濤.AVR單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)例精粹, 電子工業(yè)出版社, 2009年01月 [11] 嚴(yán)天峰.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與仿真調(diào)試,北京航天航空大學(xué)出版社,2005 [12] 周立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北京:北京航空航天大學(xué)出版社,1990. [13] 張維振.無(wú)線電設(shè)備裝接調(diào)試與檢測(cè)維修實(shí)用手冊(cè)[M],北京:銀聲音像出版社,2004 [14] 李貴山,楊建平等.微型計(jì)算機(jī)測(cè)控技術(shù)。北京:機(jī)械工業(yè)出版社,2002. [15] 張錫富.傳感器.北京:機(jī)械工業(yè)出版社,2004. [16] 曹承志.微型計(jì)算機(jī)控制技術(shù).北京:機(jī)械工業(yè)出版社,2001. [17] 黃賢武.傳感器實(shí)用電路設(shè)計(jì).成都:電子科技大學(xué)出版社,1998. [18] 李貴山,周征等.檢測(cè)與控制技術(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; //Bit1為1則倍速發(fā)送 UCSRC = 0x06; UBRRL = 0x07; //波特率:57600 Bps UBRRH = 0x00; //誤差率:0.000% UCSRB = 0x18; }
//發(fā)送一個(gè)位 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[]={"單片機(jī)指紋密碼鎖"}; uchar name03[]={" "}; uchar name04[]={" 指紋采集開(kāi)始 "}; uchar name05[]={" 指紋對(duì)比開(kāi)始 "}; uchar name06[]={" 指紋存儲(chǔ)開(kāi)始 "}; uchar name07[]={" 一次采集 "}; uchar name08[]={" 二次采集 "}; uchar name09[]={" 錄入成功 "}; uchar name10[]={" 錄入失敗 "}; uchar name11[]={" 收包有錯(cuò) "}; uchar name12[]={"傳感器上無(wú)手指 "}; uchar name13[]={" 生成特征成功 "}; uchar name14[]={"圖想亂生不成特征"}; uchar name15[]={"圖象正常特征點(diǎn)少"}; uchar name16[]={"指紋模板合并成功"}; uchar name17[]={"指紋模板合并失敗"}; uchar name18[]={" 非同一手指 "}; uchar name19[]={" 存儲(chǔ)成功 "}; uchar name20[]={" 寫(xiě)指紋庫(kù)出錯(cuò) "}; 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號(hào)指紋 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}; //將BUFFER1跟BUFFER2合成特征模版 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; //Bit1為1則倍速發(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);}
} //將并成后的指紋模版存儲(chǔ)到指紋模塊flash模板庫(kù)中 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++) //命令存儲(chǔ)指紋模版 { UART_Send_Byte( FP_Save_Finger1 ); } } if(k==1) { for(i=0;i<9;i++) //命令存儲(chǔ)指紋模版 { UART_Send_Byte( FP_Save_Finger2 ); } } if(k==2) { for(i=0;i<9;i++) //命令存儲(chǔ)指紋模版 { 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;//鍵盤(pán)值 //端口初始化 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;//如果延時(shí)去抖后,沒(méi)有檢測(cè)到鍵按下,退出本次循環(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) //寫(xiě)指令,寫(xiě)指令時(shí)必須為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); //如果沒(méi)有延時(shí)就必須要加查忙指令 PORTB&=0xfe; DDRA=0x00; //E=0; }
void wr_data(unsigned char sj) //寫(xiě)數(shù)據(jù),寫(xiě)數(shù)據(jù)時(shí)必須為 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); //如果沒(méi)有延時(shí)就必須要加查忙指令 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);//開(kāi)顯示 wr_com(0x01);//清屏 } //******************************************************************/ //outChinese 為函數(shù)名 //place 為顯示地址的首地址 //unit 字符長(zhǎng)度 //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++)//一個(gè)漢字為兩個(gè)字符 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è)計(jì)是我大學(xué)本科學(xué)習(xí)的過(guò)程向?qū)W校、社會(huì)交出的一張總結(jié)答卷。它不僅是我對(duì)大學(xué)五年所學(xué)知識(shí)的總結(jié),也是把所學(xué)知識(shí)融會(huì)貫通運(yùn)用到實(shí)踐中的一次嘗試,是衡量我五年學(xué)習(xí)成果的一個(gè)必要標(biāo)準(zhǔn)。 通過(guò)此次的畢業(yè)設(shè)計(jì),不僅使我深刻的鞏固以往的所學(xué)習(xí)本專(zhuān)業(yè)的知識(shí),也實(shí)際熟練了本專(zhuān)業(yè)的技能操作。這讓我能夠深刻的體會(huì)到基礎(chǔ)的理論知識(shí)與實(shí)際實(shí)現(xiàn)還是存在的差異,實(shí)際應(yīng)用中還要考慮各個(gè)方面的因素,這給我以后的學(xué)習(xí)和工作奠定了堅(jiān)實(shí)的基礎(chǔ)。 在此我要感謝我的指導(dǎo)教師張根柱老師。從畢業(yè)設(shè)計(jì)的準(zhǔn)備到結(jié)束,他在畢業(yè)設(shè)計(jì)過(guò)程中給予了我多方面的支持和幫助。還要感謝和我一起完成畢業(yè)設(shè)計(jì)的同學(xué)們,在這次設(shè)計(jì)中我們緊密合作、互相協(xié)商,不僅鍛煉了我們的溝通能力,而且培養(yǎng)了我們的團(tuán)隊(duì)精神。 最后還要感謝我生活以及學(xué)習(xí)了五年的學(xué)院,在這次畢業(yè)設(shè)計(jì)中提供給我們良好的環(huán)境以及便利的條件,讓我們?nèi)耐度氲竭@次畢業(yè)設(shè)計(jì)中。 再次感謝所有幫助過(guò)我的人們!并祝愿我們學(xué)院越來(lái)越美好!
|