汽車報(bào)警系統(tǒng)_第1頁
汽車報(bào)警系統(tǒng)_第2頁
汽車報(bào)警系統(tǒng)_第3頁
汽車報(bào)警系統(tǒng)_第4頁
汽車報(bào)警系統(tǒng)_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

汽車報(bào)警系統(tǒng)的設(shè)計(jì)摘要本文所設(shè)計(jì)的汽車報(bào)警系統(tǒng)是一種基于STM32系列單片機(jī)芯片以及GPRS的報(bào)警系統(tǒng),該系統(tǒng)能夠較為準(zhǔn)確的檢測(cè)到汽車發(fā)生的異常信息,并且能夠發(fā)出報(bào)警信號(hào)以及及時(shí)的反饋給車主,以便做出控制指令。本文介紹了相關(guān)模塊的硬件電路設(shè)計(jì)過程,以及相關(guān)模塊的軟件設(shè)計(jì)流程,該系統(tǒng)能夠具有較高的從可靠性與實(shí)時(shí)性。關(guān)鍵詞:汽車報(bào)警;STM32;GPRS。ABSTRACTAkindofalarmsystemofthecaralarmsystembasedonSTM32seriessinglechipandGPRSisdesignedinthispaper.Theabnormalinformationofthecarcanbedetectedaccuratelybythesystem,andthealarmsignalcanbetimelysenttothecarowner,inordertomakethecontrolcommand.Thispaperintroducestheprocessofhardwarecircuitdesignandsoftwaredesignofrelatedmodules.Thesystemhashighreliabilityandreal-time.Keywords:Thecaralarmsystem;STM32;GPRS.目錄TOC\o"1-3"\h\u1.前言 11.1本設(shè)計(jì)的目的和意義 11.2本設(shè)計(jì)在國內(nèi)外的發(fā)展概況與存在的問題 11.3本設(shè)計(jì)應(yīng)解決的主要問題 22.系統(tǒng)總體設(shè)計(jì)與框架圖 33.系統(tǒng)硬件設(shè)計(jì)介紹 43.1.STM32f103c6t8單片機(jī)43.1SIM800AGPRS模塊 43.2指紋識(shí)別as608模塊 53.3信號(hào)采集與控制模塊 53.5OLED顯示模塊64.系統(tǒng)軟件設(shè)計(jì)介紹 74.1指紋識(shí)別模塊軟件設(shè)計(jì) 84.2OLED程序設(shè)計(jì) 94.3雙向通信控制軟件設(shè)計(jì) 105.結(jié)論 11參考文獻(xiàn) 12附錄 13前言1.1本設(shè)計(jì)的目的和意義近年來現(xiàn)代電子科技的快速發(fā)展,人們?cè)谌粘I钪袑?duì)于電子產(chǎn)品的需求與要求都越來越高。隨著國家經(jīng)濟(jì)實(shí)力的飛速提高,普通百姓家的生活水平不斷得到提升,作為日常交通工具的汽車也進(jìn)入尋常百姓之家。但是在汽車給我們的日常生活提供交通便利的同時(shí),汽車的使用存在著一個(gè)大難題,那就是汽車的防盜報(bào)警。如前所述,日常生活中家庭都會(huì)用到汽車,而車主對(duì)于汽車的防盜性能也要求越來越高,電子智能防盜報(bào)警系統(tǒng)也隨之應(yīng)運(yùn)而生。市場上出現(xiàn)的傳統(tǒng)的防盜報(bào)警系統(tǒng)的容易被破解,防盜性能較差,而近年來興起的網(wǎng)絡(luò)防盜系統(tǒng)誤報(bào)率較高,反饋周期較長。根據(jù)以上分析可知,現(xiàn)在市面上有的汽車防盜系統(tǒng)不能夠滿足我們用戶對(duì)汽車報(bào)警系統(tǒng)的要求,而且以為汽車報(bào)警系統(tǒng)發(fā)生誤報(bào)情況會(huì)帶來較大的噪聲污染,影響周圍人的日常生活,因此我們需要設(shè)計(jì)新型的更為可靠更為環(huán)境友好的汽車報(bào)警系統(tǒng)。1.2本設(shè)計(jì)在國內(nèi)外的發(fā)展概況與存在的問題當(dāng)今市場上一般使用的汽車防盜報(bào)警系統(tǒng)所依據(jù)的中心思想就是要在防止汽車被盜方面入手,另一種說法也就是即便考慮盜賊闖入汽車內(nèi),也無法把車主的汽車盜走,目前這些報(bào)警系統(tǒng)所采用的報(bào)警手段包括了如下四種形式:機(jī)械式的,電子式的,芯片數(shù)碼式的,GPS網(wǎng)絡(luò)報(bào)警式的以及車載電話系統(tǒng)報(bào)警形式的。機(jī)械式防盜報(bào)警器該類報(bào)警器在當(dāng)今市場上經(jīng)常見到,主要包括了兩大類,即方向盤鎖以及排擋鎖,這類報(bào)警器所存在的缺點(diǎn)也顯而易見,就是防盜功能可靠性較低,每次進(jìn)行拆裝該類報(bào)警器步驟比較復(fù)雜。電子式防盜報(bào)警器該類報(bào)警器主要可以分為以下兩大類,分別為單向與雙向。第一類報(bào)警系統(tǒng)的主要功能是,不管所保護(hù)的汽車哪一個(gè)部件發(fā)生了異常情況,該報(bào)警器都能給出報(bào)警信號(hào)以便得到用戶的注意。第二類報(bào)警器與第一類報(bào)警器相比更為直觀能夠使得汽車的實(shí)時(shí)情況能夠反饋給車主,當(dāng)汽車報(bào)警器發(fā)出報(bào)警信號(hào)時(shí),汽車的實(shí)時(shí)狀況會(huì)顯示在該報(bào)警器的遙控器上面,該類報(bào)警器的缺點(diǎn)是有效范圍很小僅為200米。該類報(bào)警器還存在一個(gè)最大的致命問題,問題的根源在于該類報(bào)警器所使用的操作方式為電子密碼方式和遙控操作方式。在汽車車主用該報(bào)警系統(tǒng)的遙控器打開或者關(guān)閉車門時(shí),附近的小偷就可以利用接收器來接受遙控器所發(fā)出的信號(hào),然后再將該信號(hào)破解,就能夠達(dá)到破解該報(bào)警系統(tǒng)的目的,這樣一來該報(bào)警系統(tǒng)的可靠性出現(xiàn)了致命問題。與此同時(shí),該報(bào)警器容易發(fā)生錯(cuò)誤發(fā)出報(bào)警信號(hào)的情況,影響周圍居民。芯片式數(shù)碼防盜報(bào)警器該類報(bào)警器是現(xiàn)在汽車報(bào)警器發(fā)展的新型關(guān)鍵領(lǐng)域,目前大多數(shù)的汽車都將該類報(bào)警器作為汽車原裝報(bào)警器。該類報(bào)警器采用將汽車發(fā)動(dòng)機(jī),電路以及油路系統(tǒng)鎖定的方式,提高系統(tǒng)的可靠性,在盜車賊沒有芯片鑰匙時(shí),其根本找不到開啟該車輛的方法。因?yàn)槊艽a采用數(shù)字化的形式時(shí)可靠性比較高,能夠滿足可靠性的要求。GPS網(wǎng)絡(luò)式防盜報(bào)警系統(tǒng)該類報(bào)警器的性能與其他報(bào)警器相比最為先進(jìn)。下面來介紹以下該類報(bào)警器的基本工作原理,該類報(bào)警器就是將一個(gè)小型的GPS系統(tǒng)安裝在汽車上面,然后根據(jù)無線通訊網(wǎng)絡(luò)以及GPS中心連接為一個(gè)整體系統(tǒng),這類報(bào)警器具有的優(yōu)勢(shì)包括定位較為準(zhǔn)確,所監(jiān)測(cè)的范圍較為大,能夠主動(dòng)報(bào)警,報(bào)警反應(yīng)速度較快,失竊車輛召回概率較高,在汽車出現(xiàn)異常情況時(shí)能夠?qū)?bào)警信息及時(shí)的送達(dá)車主,退一步說,汽車即便被偷竊,該報(bào)警系統(tǒng)仍然能夠幫助警方找回的丟失的汽車。此外,該裝置在夜間車主熟睡的情況下仍然能夠自動(dòng)監(jiān)測(cè)警情并及時(shí)通知車主。該報(bào)警裝置具有如下優(yōu)勢(shì):能夠使得跟蹤控制車輛的過程變得較為簡單,能夠較為高效的找回失竊的汽車。但是與此同時(shí),該類報(bào)警器的缺點(diǎn)也比較明顯,那就是該報(bào)警系統(tǒng)所需要的跟蹤系統(tǒng)比較龐大,也需要用戶24小時(shí)對(duì)車輛進(jìn)行人工監(jiān)控,與上述報(bào)警系統(tǒng)相比價(jià)格比較昂貴。以上所述幾種防盜報(bào)警裝置各有優(yōu)缺點(diǎn),汽車防盜報(bào)警系統(tǒng)正在不斷朝著芯片式和GPS網(wǎng)絡(luò)式發(fā)展,這也是本文所重點(diǎn)考慮的設(shè)計(jì)方向。1.3本設(shè)計(jì)應(yīng)解決的主要問題本文所介紹的汽車報(bào)警系統(tǒng)以STM32芯片為控制主芯片,基于GPRS通訊技術(shù),完成車主與汽車的雙向交互控制功能,本設(shè)計(jì)的主要任務(wù)如下:能夠采樣汽車的異常信號(hào),并發(fā)出報(bào)警信號(hào),在利用指紋識(shí)別芯片判別系統(tǒng)使用者身份為車主之后,由車主做出針對(duì)車輛異常信息的控制指令,實(shí)現(xiàn)雙向控制功能。綜上所述,本文所設(shè)計(jì)的電子智能防盜報(bào)警系統(tǒng)以STM32為核心芯片,通過相關(guān)的傳感器以及GPRS網(wǎng)絡(luò)實(shí)現(xiàn)了汽車較為精準(zhǔn)的實(shí)時(shí)防盜報(bào)警功能,及時(shí)反饋給車主汽車信息,車主得到信息后能夠?qū)ζ嚢l(fā)出控制指令做出反應(yīng),實(shí)現(xiàn)了用戶和汽車之間的雙向控制功能。2.系統(tǒng)總體設(shè)計(jì)與框架圖本章主要介紹后了本文所設(shè)計(jì)的基于GPRS的STM32單片機(jī)為核心芯片的汽車報(bào)警控制系統(tǒng)。本系統(tǒng)所采用的核心芯片為STM32系列的單片機(jī),該類單片機(jī)將主要控制部分集成在一個(gè)控制芯片上面,這些主要部分包括了中央處理器,隨機(jī)存儲(chǔ)器,只讀存儲(chǔ)器,中斷系統(tǒng),定時(shí)器以及定時(shí)器,還有I/O接口。單片機(jī)具有所占空間較小,能夠完成計(jì)算機(jī)系統(tǒng)的功能,本文中所使用的單片機(jī)主要利用了該芯片的控制功能。圖2.1控制框架圖如上圖所示該汽車報(bào)警系統(tǒng)包括了如下幾個(gè)模塊:給系統(tǒng)其他模塊供電的電源模塊,利用GPRS業(yè)務(wù)以及SIM800A芯片模塊的GPRS模塊,該GPRS模塊能夠完成信息的傳輸和發(fā)送功能。另外還有振動(dòng)傳感器模塊,人體紅外傳感器模塊,as608芯片模塊,oled芯片模塊以及用于報(bào)警的蜂鳴器模塊。3.系統(tǒng)硬件設(shè)計(jì)介紹3.1STM32F103C8T6單片機(jī)現(xiàn)如今的單片機(jī)發(fā)展太迅速,像之前學(xué)習(xí)的C51系列的單片機(jī)漸漸的退出歷史舞臺(tái),而本設(shè)計(jì)使用的STM32單片機(jī),漸漸取代C51系列的單片機(jī)的地位,C51單片機(jī)能達(dá)到的要求,STM32單片機(jī)也能達(dá)到,并且STM32處理數(shù)據(jù)的速度比C51單片機(jī)快得多。STM32F103C8T6單片機(jī)是具有基于ARM的32位微控制器,是通用類型,增強(qiáng)型,具有48個(gè)引腳和256k字節(jié)的閃存存儲(chǔ)器,封裝為LQFP,具有32KB存儲(chǔ)量??傠娫凑龢O接單片機(jī)5V電源端口。端口具有通用定時(shí)器(TIMx),普通I/O端口,I2C總線端口,SPI串行外設(shè)接口,ADC接口等等。STM32單片機(jī)的調(diào)試端口有兩種,一種是SWD,一種是JTAG接口調(diào)試,JTAG接口使用最為普遍,現(xiàn)如今基本上都是使用JTAG接口,而SWD一樣可以進(jìn)行調(diào)試,并且SWD接線比起JTAG接口少得多,本設(shè)計(jì)使用到的是JTAG接口。在STM32的外面有4個(gè)接口供用戶使用,該端口是接連單片機(jī)內(nèi)部的JTAG調(diào)試模塊上的,用戶可以根據(jù)需要進(jìn)行接連調(diào)試。STM32F103C8T6單片機(jī)是整個(gè)系統(tǒng)的中心處理器,就像人的大腦一樣,可以命令自己的四肢一樣,如果沒有單片機(jī),整個(gè)系統(tǒng)也運(yùn)行不起來,本設(shè)計(jì)鐘的單片機(jī)的作用是把六個(gè)模塊連接起來,模塊之間根據(jù)單片機(jī)內(nèi)的編程代碼,可以使得模塊之間相互配合運(yùn)行,以此來滿足用戶安全性的要求。3.2SIM800AGPRS模塊GPRS模塊所使用的是SIM800a模塊,該模塊的主要特點(diǎn)介紹如下:SIM800A采用高性能工業(yè)級(jí)GSM/GPRS模塊:SIM800A工作頻段:GSM900/1800MHZ可以實(shí)現(xiàn)電話語音,發(fā)送短信和彩信GPRS數(shù)據(jù)傳輸功能外(支持透傳模式,域名解析和IP模式)還具有DTMF解碼(可以識(shí)別對(duì)方按鍵)6)音頻接口:音頻的輸出和輸入接口通過排針引腳,以供用戶靈活使用。2)具有TTL串口和RS232串口(USART串口)8)一路SIM卡接口9)支持藍(lán)牙功能該模塊的主要參數(shù)如下所示:供電:電壓范圍:5V~18V頻段:GSM900該模塊支持的串行接口形式為8線制,傳輸速率寬帶范圍為1.2kbps-115.2kbps。該模塊提供了兩個(gè)異步串行接口,這兩個(gè)接口分別用于通訊功能和軟件調(diào)試功能。該模塊的TXD發(fā)送數(shù)據(jù)到處理器的RXD上,RXD在處理器的TXD數(shù)據(jù)線3上進(jìn)行數(shù)據(jù)的接收。在進(jìn)行SIM800a模塊與STM32單片機(jī)芯片之間進(jìn)行數(shù)據(jù)傳輸?shù)倪^程中用到了AT命令。GPRS模塊具有標(biāo)準(zhǔn)的SIM卡的接口。在對(duì)GPRS模塊進(jìn)行硬件電路設(shè)計(jì)的過程中需要分為以下幾個(gè)模塊來進(jìn)行具體設(shè)計(jì):該芯片的的供電模塊,SIM卡模塊,SIM卡模塊的開機(jī)硬件設(shè)計(jì)。模塊電源可以控制模塊的重啟,該模塊高電平供電,低電平斷電,當(dāng)模塊出現(xiàn)程序混亂或者是死機(jī)的情況下,可以斷開電源的方式進(jìn)行模塊的復(fù)位,而且該模塊具有上電自動(dòng)開機(jī)的功能,無需使用開關(guān),使用時(shí)簡單方便。SIM800AGPRS模塊在系統(tǒng)中即是輸入端也是輸出端,用戶可以借助該模塊控制系統(tǒng)的運(yùn)作。用戶發(fā)送信息到該模塊上,模塊會(huì)把信息傳給單片機(jī),單片機(jī)根據(jù)發(fā)送的信息內(nèi)容進(jìn)行指紋的錄入,或者是啟動(dòng)安全模式。而當(dāng)進(jìn)入安全模式后,當(dāng)外界發(fā)生異常情況,單片機(jī)命令該模塊把出現(xiàn)異常的情況以信息的方式發(fā)送到車主的手機(jī)上,這樣的設(shè)計(jì)使用戶控制時(shí)更加方便,也便于車主在第一時(shí)間作出反應(yīng)。3.3指紋識(shí)別as608模塊指紋識(shí)別模塊as608傳感器主要用于車主身份的識(shí)別,在MCU將識(shí)別的信號(hào)處理之后,經(jīng)過對(duì)該信號(hào)的判別即可做出控制響應(yīng)。下面我們來見到介紹一下數(shù)字智能熱釋電紅外傳感器AS608的基本原理和主要特性AS608傳感器芯片是由AS608指紋識(shí)別芯片所制作的指紋芯片,在我們使用該芯片時(shí),廠家已經(jīng)設(shè)計(jì)好外圍電路,已經(jīng)集成出了一個(gè)指紋芯片,該指紋芯片可以提供二次開發(fā)?;谠撔酒闹讣y識(shí)別模塊的控制電路與控制協(xié)議基本上相同。硬件接口AS608模塊采用8pin的控制接口,供電電壓為3.3V,通信總線的具體形式分為以下兩類,包括了串口通信方式和USB通訊方式;在采用第一種通訊模式下,編程的步驟較為簡明,比較常用,但是兼容性能較差;采用USB通訊的模式之下,編程較為困難,但是兼容性較好。在實(shí)際控制接線中,該模塊的touch引腳接到單片機(jī)芯片的普通I/O口上,當(dāng)檢測(cè)到有指紋按下時(shí),該引腳觸發(fā)一個(gè)高電平信號(hào);TX,RX引腳接到單片機(jī)模塊的串口引腳上。需要特別注意的是該指紋識(shí)別模塊只能使用3.3V電壓供電,不能使用5V電壓供電。在單片機(jī)對(duì)指紋識(shí)別模塊進(jìn)行控制過程中,需要基于指紋識(shí)別模塊所規(guī)定的通訊格式,將串口數(shù)據(jù)進(jìn)行發(fā)送以及處理,另外該指紋識(shí)別模塊的其他控制功能也必須基于上述的通訊格式來執(zhí)行??刂浦噶罘譃槿?,包括了指令包,數(shù)據(jù)包,結(jié)束包。一般情況下單片機(jī)將指令包一般指令包發(fā)送給指紋識(shí)別芯片當(dāng)中,該芯片在接收到控制指令后,將相對(duì)應(yīng)的數(shù)據(jù)包返回給單片機(jī);指令包主要包括了包頭,芯片地址,包標(biāo)識(shí),包長度,控制參數(shù)以及校驗(yàn)和;數(shù)據(jù)包與指令包的區(qū)別在于將控制參數(shù)替換為數(shù)據(jù)。數(shù)據(jù)包與結(jié)束包的區(qū)別在于包標(biāo)識(shí)。AS608指紋模塊有兩個(gè)功能,第一個(gè)功能就是錄入用戶的指紋存于單片機(jī)內(nèi),而另一個(gè)功能就是系統(tǒng)驗(yàn)證是否車主本人的一個(gè)依據(jù),當(dāng)汽車報(bào)警系統(tǒng)出現(xiàn)異常后,用戶可以使用本人的指紋關(guān)閉系統(tǒng)的報(bào)警狀態(tài)。3.4信號(hào)采集與控制模塊下面來介紹一下本文所設(shè)計(jì)的控制系統(tǒng)當(dāng)中的信號(hào)采集模塊,該模塊利用傳感器芯片來將外界對(duì)汽車的作用采集起來,然后對(duì)這些外部信號(hào)進(jìn)行分辨與檢測(cè)。在汽車被強(qiáng)行拖車或者打開車門,發(fā)生碰撞都屬于需要采集的信號(hào),本系統(tǒng)所側(cè)重采集的就是諸如此類的汽車異常信號(hào),因此本系統(tǒng)采用的震動(dòng)傳感器以判別汽車的異常狀態(tài)。本系統(tǒng)所選用的震動(dòng)傳感器通過內(nèi)部微球來檢測(cè)判斷汽車車體所受到的震動(dòng)情況,這里所使用的內(nèi)部微球起到了如下所用:該微球是兩個(gè)觸點(diǎn)傳感器的內(nèi)部電極相互連接的部分,這樣就能夠使得兩個(gè)外部連接墊片電阻的電阻數(shù)值下降。汽車發(fā)生的異常情況的信息在得到傳感器的采集之后,通過GPRS網(wǎng)絡(luò)由車主發(fā)送應(yīng)對(duì)異常信息的指令控制模塊電路來實(shí)現(xiàn)對(duì)汽車的控制。車主對(duì)車輛的控制措施當(dāng)中由緊急報(bào)警等具體功能。收集外界信號(hào)有兩個(gè)模塊,人體紅外傳感器和震動(dòng)傳感器,兩個(gè)傳感器均是輸出端,是收集外界異常的兩個(gè)模塊,也是觸發(fā)報(bào)警的源頭,報(bào)警器安全性的高低,很大程度上是傳感器的質(zhì)量,傳感器收集數(shù)據(jù)越準(zhǔn)確,報(bào)警器的安全性往往就越高,而本設(shè)計(jì)使用的人體紅外傳感器和震動(dòng)傳感器也是報(bào)警器中常用的傳感器。3.5OLED顯示模塊

本文所設(shè)計(jì)的控制系統(tǒng)所選用的顯示芯片為OLED芯片,該芯片名稱表示有機(jī)發(fā)光二極管顯示器。傳統(tǒng)的LCD液晶顯示相比本文所采用的OLED芯片而言,諸多性能不如后者。主要包括了,傳統(tǒng)的LCD液晶顯示需要單獨(dú)給背光的操作才能夠使得顯示屏所顯示的信息較為明顯的呈現(xiàn)出來。另外,LCD顯示屏的黑位水平、對(duì)比度、厚度、視角、顏色均勻性等方面的性能,與本文所選用的OLED芯片相比較為落后。

本文所選用的OLED顯示模塊的正常工作維度范圍在-40~+70℃之間,內(nèi)部自帶升壓電路,分辨率為128*64像素,供電電壓在3-5V即可。本文所選用的通信接口方式設(shè)置為SPI串口模式。

本文所設(shè)計(jì)的控制系統(tǒng)當(dāng)中OLED顯示模塊采用的通信接口方式為SPI串口通信接口模式。

在該通信接口模式中,STM32單片機(jī)與該模塊通信依靠排針連接,單片機(jī)連接引腳與普通的LCD液晶模塊的連接引腳基本一致:在這些連接引腳中必須包括電源引腳與接地引腳,主其他主要的引腳包括了如下幾個(gè):CS片選信號(hào);RES復(fù)位線;DC數(shù)據(jù)或指令選擇信號(hào);D0為SPI時(shí)鐘線,D1為SPI數(shù)據(jù)線等。在控制該模塊時(shí),首先需要選擇輸入的是指令抑或是數(shù)據(jù),之后將片選引腳的電位取為低電平,然后將寫信號(hào)使能設(shè)置好,將數(shù)據(jù)寫入到所用到的數(shù)據(jù)線內(nèi),這樣就能進(jìn)行數(shù)據(jù)的讀寫操作。因?yàn)槟K為串行通信,為了與STM32單片機(jī)兼容連接,模塊中的D0,D1端口需要連接單片機(jī)串行口,具體連接是:VCC引腳接系統(tǒng)總電源正極,GND引腳接總電源負(fù)極,D0引腳接PA0引腳,D1引腳接PA1引腳,CS引腳接PB0引腳。OLED顯示模塊主要是顯示AS608指紋識(shí)別模塊上的內(nèi)部的程序運(yùn)行,模塊上顯示的內(nèi)容可以讓車主清楚AS608指紋錄入是否成功,識(shí)別是否成功,如果沒有顯示模塊,車主并不知道指紋是否傳達(dá)給單片機(jī),使用時(shí)也不知道匹配是否成功,所以該模塊是非常方便用戶識(shí)別指紋錄入和識(shí)別的情況。4.系統(tǒng)軟件設(shè)計(jì)介紹開始開始單片機(jī)初始化單片機(jī)初始化否是否收到信息否是否收到信息否否否否是是SIM800AGPRS是否接受到ADDSIM800AGPRSSIM800AGPRS是否接受到ADDSIM800AGPRS是否接受到SAFE是是是是啟動(dòng)AS608指紋模塊錄入指紋啟動(dòng)汽車報(bào)警系統(tǒng)啟動(dòng)AS608指紋模塊錄入指紋啟動(dòng)汽車報(bào)警系統(tǒng)否否觸發(fā)震動(dòng)傳感器,人體紅外傳感器,否否觸發(fā)震動(dòng)傳感器,人體紅外傳感器,AS608指紋識(shí)別失敗錄入指紋是否成功錄入指紋是否成功是是將用戶指紋存于單片機(jī)是將用戶指紋存于單片機(jī)是蜂鳴器發(fā)聲蜂鳴器發(fā)聲用戶指紋識(shí)別成功用戶指紋識(shí)別成功蜂鳴器停止發(fā)聲SIM800AGPRS模塊發(fā)送信息wrong到用戶手機(jī)蜂鳴器停止發(fā)聲SIM800AGPRS模塊發(fā)送信息wrong到用戶手機(jī)圖4.1軟件邏輯流程圖系統(tǒng)采用C語言進(jìn)行編程,然后將編寫好的程序?qū)懭雴纹瑱C(jī)閃存內(nèi)。主要控制流程如下所示:首先進(jìn)行系統(tǒng)的初始化過程,在初始化結(jié)束后對(duì)系統(tǒng)是否在要轉(zhuǎn)變?yōu)榫錉顟B(tài)進(jìn)行判斷;在判斷為要轉(zhuǎn)變?yōu)榫鋺B(tài)后,將GPRS模塊和各種傳感器模塊進(jìn)行使能,開啟以上功能。在汽車受到外部影響進(jìn)入異常狀態(tài)的情況下,系統(tǒng)內(nèi)部的各種傳感器會(huì)將高低電平的切換信息進(jìn)行采集,與此同時(shí),單片機(jī)的串口發(fā)出響應(yīng)操作,控制系統(tǒng)將外部異常信息通知車主,并同時(shí)通過GPRS網(wǎng)絡(luò)將所采集到的信息傳輸給信息中心。在車主得到傳送過來的警情信息后,可以立即給出控制指令來對(duì)汽車進(jìn)行控制以反饋得到的警情信息。在該系統(tǒng)中,GPRS模塊在啟動(dòng)之后就一直處于循環(huán)的問詢之下,車主可以據(jù)此了解車輛的實(shí)時(shí)信息,并且據(jù)此發(fā)出實(shí)時(shí)指令,所發(fā)出的控制指令在經(jīng)過單片機(jī)控制芯片進(jìn)行處理之后,將其發(fā)送到GPRS模塊,然后車主再GPRS網(wǎng)絡(luò)來得到所反映的車輛信息。與此同時(shí),在車主要使用時(shí),可以通過指紋識(shí)別系統(tǒng)判別出車主身份。4.1指紋識(shí)別模塊軟件設(shè)計(jì)本設(shè)計(jì)所采用的指紋識(shí)別模塊的控制軟件程序設(shè)計(jì)包括以下幾個(gè)環(huán)節(jié):錄入圖像,生成特征,搜索指紋,自動(dòng)驗(yàn)證指紋,自動(dòng)注冊(cè)模板,刪除指紋。錄入指紋需要在系統(tǒng)中錄入指紋信息,需要:錄入圖像,生成特征,快速查找圖像,自動(dòng)注冊(cè)模板。程序可分為以下幾個(gè)具體步驟:1)錄入圖像指令2)生成特征指令存入指紋圖像,存入單片機(jī)模塊給定的緩沖區(qū)號(hào)中;3)快速查找圖像生成圖像后要驗(yàn)證是否在緩沖區(qū)號(hào)之內(nèi)4)自動(dòng)注冊(cè)模板最后將緩沖區(qū)號(hào)里面的圖像存入Flash里面5)在自動(dòng)驗(yàn)證指紋錄入指紋后,就可以匹配本人的指紋完成身份識(shí)別,只許要發(fā)送自動(dòng)驗(yàn)證指紋指令,返回的確認(rèn)碼為0x00,即為匹配成功,不為則匹配失敗。6)刪除指紋:管理員如果需要?jiǎng)h除系統(tǒng)中錄入的指紋信息,需要寫入刪除所需刪除的指紋的ID號(hào)碼,然后發(fā)送刪除指紋指令即可刪除相應(yīng)的指紋。其具體程序代碼見附表中指紋采樣代碼。具體代碼實(shí)現(xiàn)的功能:讀摸出感應(yīng)狀態(tài)判斷中斷接收的數(shù)組有沒有應(yīng)答包探測(cè)手指,探測(cè)到后錄入指紋圖像存入ImageBuffer(錄入圖像)將ImageBuffer中的原始圖像生成指紋特征文件存于charBuffer1或charBuffer2(生成特征)5)精確比對(duì)CharBuffer1與CharBuffer2中的特征文件6)以CharBuffer1或CharBuffer2中的特征文件搜索整個(gè)或部分指紋庫.若搜索到,則返回頁碼。7)將CharBuffer1與CharBuffer2中的特征文件合并生成模板,結(jié)果存于CharBuffer1與CharBuffer28)將CharBuffer1或CharBuffer2中的模板文件存到PageID號(hào)flash數(shù)據(jù)庫位置。9)

刪除flash數(shù)據(jù)庫中指定ID號(hào)開始的N個(gè)指紋模板10)

刪除flash數(shù)據(jù)庫中所有指紋模板11)

寫模塊寄存器12)

讀取模塊的基本參數(shù)(波特率,包大小等)13)設(shè)置模塊地址14)模塊內(nèi)部為用戶開辟了256bytes的FLASH空間用于存用戶記事本,該記事本邏輯上被分成16個(gè)15)

讀取FLASH用戶區(qū)的128bytes數(shù)據(jù)頁。16)以CharBuffer1或CharBuffer2中的特征文件高速搜索整個(gè)或部分指紋庫。

若搜索到,則返回頁碼,該指令對(duì)于的確存在于指紋庫中,且登錄時(shí)質(zhì)量很好的指紋,會(huì)很快給出搜索結(jié)果。17)讀有效模板個(gè)數(shù)18)解析確認(rèn)碼錯(cuò)誤信息返回信息代碼設(shè)置中,每當(dāng)有新指紋進(jìn)入時(shí),系統(tǒng)會(huì)刪除存在flash中的指紋,所以本設(shè)計(jì)中的指紋模塊個(gè)數(shù)為1,其目的是為了更加方便調(diào)試。4.2OLED程序設(shè)計(jì)

4.2.1初始化程序設(shè)計(jì)

本文所選用的OLED模塊也需要進(jìn)行程序的初始化,初始化程序包括了該顯示控制芯片的一系列的設(shè)置操作,這些設(shè)置操作包括了關(guān)閉顯示、設(shè)置時(shí)鐘分頻因子、設(shè)置顯示偏移、設(shè)置內(nèi)存地址、行列起始地址等。本文編寫初始化程序直接參考廠家所提供的源碼。

4.2.2讀出數(shù)據(jù)/指令

進(jìn)行顯示屏模塊的讀出操作,實(shí)際上就是與模塊內(nèi)的控制芯片進(jìn)行通信。讀出的指令遵循的是SPI通信協(xié)議。由于OLED硬件的設(shè)定,該模塊上的DO端口上,接的是SPI的時(shí)鐘線,而D1端口則是SPI的輸出線,是單片機(jī)輸出給模塊的線,工作時(shí),SCK時(shí)鐘線為上沿時(shí)采集數(shù)據(jù),時(shí)鐘為初始狀態(tài)時(shí)為高電平。在傳輸信號(hào)的過程在,模塊可以根據(jù)SCK時(shí)鐘線來決定數(shù)據(jù)線什么時(shí)候傳輸,傳輸多少信號(hào)。本設(shè)計(jì)中的顯示模塊與AS608指紋模塊結(jié)合,顯示模塊的主要作用是為了顯示指紋錄入的情況和識(shí)別的情況,讓用戶知曉指紋模塊中的運(yùn)行情況,因指紋模塊分為錄入指紋與識(shí)別指紋兩種功能,顯示模塊設(shè)置軟件時(shí),也需把兩種功能都顯示出來。4.2.3OLED顯示模塊與AS608指紋識(shí)別模塊的結(jié)合編程(1)指紋錄入:當(dāng)指紋模塊中有指紋生成特征charBuffer1時(shí),顯示模塊顯示指紋正常,而后顯示再按一次,當(dāng)用戶再按一次時(shí),指紋生成特征charBuffer2時(shí),模塊再次顯示指紋正常。上述完成后,指紋模塊將會(huì)精確對(duì)比charBuffer1與charBuffer2中的特征文件,這時(shí)會(huì)顯示模塊會(huì)顯示對(duì)比指紋,如果成功,顯示模塊會(huì)顯示對(duì)比成功,反之則會(huì)顯示對(duì)比失敗。上述完成后,指紋模塊就會(huì)將charBuffer1和charBuffer2生成模塊存于charBuffer1與charBuffer2中,當(dāng)執(zhí)行時(shí),會(huì)顯示生成模板,當(dāng)完成生成模塊存入后,顯示模塊會(huì)顯示生成成功,上訴完成后,指紋模塊將charBuffer1或charBuffer2中的模板文件存到pageID號(hào)flash數(shù)據(jù)庫位置后,顯示模塊會(huì)顯示錄用成功。假如模塊啟動(dòng)錄入指紋一段時(shí)間沒有按手指,模塊會(huì)自動(dòng)退出錄入指紋模式。(2)識(shí)別指紋:當(dāng)錄入指紋后,獲取圖像成功,生成特征成功,以charBuffer1或charBuffer2中的特征文件高速搜索整個(gè)或部分指紋庫,若搜索到,則顯示驗(yàn)證成功,否則顯示驗(yàn)證失敗。4.3雙向通信控制軟件設(shè)計(jì)車主在接收到車輛異常信息之后需要發(fā)出控制指令進(jìn)行響應(yīng),而車主所發(fā)出的指令需要GPRS模塊進(jìn)行解析。這一部分的操作主要包括了SMS的存儲(chǔ)操作、讀取以及解析步驟。本文所采用的軟件代碼以GSM字符集為7位編碼,可以將其理解為ASCII碼(ASCII值小于80Hex,因此,Bit8被忽略),在此過程中將下一7位編碼的后幾位依照次序逐次移動(dòng)到前面,這樣就形成了形成新的8位編碼。然后通過函數(shù)的處理,這些固定格式的指令的解析步驟是在SMS里完成,得到的解析指令發(fā)送給計(jì)算機(jī)以便其作出響應(yīng)。另一方面為了得到車主短信的指令,需要對(duì)其進(jìn)行解析,然后利用GPRS模塊將這些解析后的短信指令發(fā)送到STM32單片機(jī)處理器,就可以做出響應(yīng)。具體編程為:設(shè)置發(fā)送指令設(shè)置Sim800a模塊發(fā)送信息的SIM卡號(hào)碼設(shè)置模塊讀取開啟添加指紋與開始報(bào)警模式,向Sim800a模塊上的SIM發(fā)送ADD即可開啟添加指紋模式,向Sim800a上的SIM卡發(fā)送SAFE即可開始報(bào)警系統(tǒng)設(shè)置發(fā)送消息到SIM卡上的消息格式5.結(jié)論本文設(shè)計(jì)了一種基于STM32系列單片機(jī)芯片與GPRS的汽車報(bào)警系統(tǒng),該系統(tǒng)利用了全球移動(dòng)通信網(wǎng)絡(luò)以及單片機(jī)控制技術(shù)。本文分別介紹了該汽車報(bào)警系統(tǒng)的硬件設(shè)計(jì)部分及軟件設(shè)計(jì)部分,采集外部環(huán)境對(duì)汽車作用所產(chǎn)生的異常信息用到了振動(dòng)傳感器模塊,人體紅外傳感器,利用指紋識(shí)別模塊判別車主身份,由STM32處理器解析GPRS通訊系統(tǒng)傳輸?shù)男盘?hào),這一控制系統(tǒng)能夠?qū)崿F(xiàn)對(duì)汽車異常狀況的實(shí)時(shí)監(jiān)測(cè),車主在車輛發(fā)生異常情況時(shí)能及時(shí)做出反應(yīng),提高了該報(bào)警系統(tǒng)的實(shí)時(shí)性能,同時(shí)車主也能對(duì)汽車進(jìn)行遠(yuǎn)程的控制。參考文獻(xiàn)1.基于單片機(jī)的汽車防盜報(bào)警系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[期刊論文]宮喚春-《汽車工程師》-2018年5期2.基于LM741的汽車蓄電池低電量報(bào)警系統(tǒng)設(shè)計(jì)[期刊論文]劉方林素敏單魚洋-《湖北農(nóng)業(yè)科學(xué)》CSTPCD北大核心-2019年11期3.基于STM32單片機(jī)實(shí)現(xiàn)汽車報(bào)警系統(tǒng)的設(shè)計(jì)[期刊論文]張歆彤-《電子世界》-2018年6期4.基于單片機(jī)的汽車防盜報(bào)警系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[期刊論文]王文安-《電子制作》-2018年10期5.基于STC89C52的汽車智能報(bào)警系統(tǒng)的設(shè)計(jì)[期刊論文]戴庚-《電子技術(shù)與軟件工程》-2018年001期6.基于單片機(jī)的汽車防盜報(bào)警系統(tǒng)設(shè)計(jì)[期刊論文]余亞美彭森-《卷宗》-2017年13期7.基于GPS和GSM的汽車防盜報(bào)警系統(tǒng)設(shè)計(jì)[期刊論文]楊民生唐俊遙肖杰-《科學(xué)與財(cái)富》-2015年9期8.基于RFID和GSM的汽車防盜報(bào)警系統(tǒng)設(shè)計(jì)[期刊論文]王素青許根源-《自動(dòng)化與儀表》CSTPCDSA-2015年9期9.基于單片機(jī)的汽車防盜報(bào)警系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[期刊論文]曹莉凌簡佳輝-《電子設(shè)計(jì)工程》CSTPCD-2015年15期10.一種新型汽車防盜報(bào)警系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[期刊論文]楊帆-《電腦知識(shí)與技術(shù)》-2015年21期謝辭本設(shè)計(jì),可以說是人生以來自己做的最難,也是最有挑戰(zhàn)的一個(gè)項(xiàng)目,從一開始的什么都不懂,到后來慢慢的了解,完成實(shí)物的安裝,完成編程等等,到最后寫的論文,一步一個(gè)腳印走來,剛開始的時(shí)候真的想放棄了,后來經(jīng)過朋友的開導(dǎo),慢慢到網(wǎng)上去了解單片機(jī)的知識(shí),從模塊的選取到端口的連接,再到邏輯的思考,到最終完成論文。完成這個(gè)汽車報(bào)警系統(tǒng),也意味著整個(gè)大學(xué)生涯,甚至是整個(gè)校園時(shí)代生涯的結(jié)束,這次的畢業(yè)設(shè)計(jì),也算是在我進(jìn)入社會(huì)之前的一次自我的挑戰(zhàn),讓我知道只要有心去做一件事,沒什么是完成不了的,謝謝在我畢業(yè)設(shè)計(jì)完成道路上給予我?guī)椭娜?,謝謝在我從一無所知,鼓勵(lì)我漸漸深入了解各項(xiàng)模塊的同學(xué),謝謝,謝謝你們!附錄電路圖設(shè)計(jì)程序指紋采樣代碼#include<string.h>#include"delay.h" #include"usart2.h"#include"as608.h"#include"oled.h"#include"beep.h"#include"sim800a.h"u32AS608Addr=0XFFFFFFFF;//默認(rèn)SysParaAS608Para;//指紋模塊AS608參數(shù)u16ValidN;//模塊內(nèi)有效指紋個(gè)數(shù)//初始化PA6為下拉輸入 //讀摸出感應(yīng)狀態(tài)(觸摸感應(yīng)時(shí)輸出高電平信號(hào))voidPS_StaGPIO_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA時(shí)鐘//初始化讀狀態(tài)引腳GPIOAGPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//輸入下拉模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHzGPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIO }//串口發(fā)送一個(gè)字節(jié)staticvoidMYUSART_SendData(u8data){ while((USART2->SR&0X40)==0); USART2->DR=data;}//發(fā)送包頭staticvoidSendHead(void){ MYUSART_SendData(0xEF); MYUSART_SendData(0x01);}//發(fā)送地址staticvoidSendAddr(void){ MYUSART_SendData(AS608Addr>>24); MYUSART_SendData(AS608Addr>>16); MYUSART_SendData(AS608Addr>>8); MYUSART_SendData(AS608Addr);}//發(fā)送包標(biāo)識(shí),staticvoidSendFlag(u8flag){ MYUSART_SendData(flag);}//發(fā)送包長度staticvoidSendLength(intlength){ MYUSART_SendData(length>>8); MYUSART_SendData(length);}//發(fā)送指令碼staticvoidSendcmd(u8cmd){ MYUSART_SendData(cmd);}//發(fā)送校驗(yàn)和staticvoidSendCheck(u16check){ MYUSART_SendData(check>>8); MYUSART_SendData(check);}//判斷中斷接收的數(shù)組有沒有應(yīng)答包//waittime為等待中斷接收數(shù)據(jù)的時(shí)間(單位1ms)//返回值:數(shù)據(jù)包首地址staticu8*JudgeStr(u16waittime){ char*data; u8str[8]; str[0]=0xef;str[1]=0x01;str[2]=AS608Addr>>24; str[3]=AS608Addr>>16;str[4]=AS608Addr>>8; str[5]=AS608Addr;str[6]=0x07;str[7]='\0'; USART2_RX_STA=0; while(--waittime) { delay_ms(1); if(USART2_RX_STA&0X8000)//接收到一次數(shù)據(jù) { USART2_RX_STA=0; data=strstr((constchar*)USART2_RX_BUF,(constchar*)str); if(data) return(u8*)data; } } return0;}//錄入圖像PS_GetImage//功能:探測(cè)手指,探測(cè)到后錄入指紋圖像存于ImageBuffer。//模塊返回確認(rèn)字u8PS_GetImage(void){u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x03); Sendcmd(0x01);temp=0x01+0x03+0x01; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//生成特征PS_GenChar//功能:將ImageBuffer中的原始圖像生成指紋特征文件存于CharBuffer1或CharBuffer2 //參數(shù):BufferID-->charBuffer1:0x01 charBuffer1:0x02 //模塊返回確認(rèn)字u8PS_GenChar(u8BufferID){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x04); Sendcmd(0x02); MYUSART_SendData(BufferID); temp=0x01+0x04+0x02+BufferID; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//精確比對(duì)兩枚指紋特征PS_Match//功能:精確比對(duì)CharBuffer1與CharBuffer2中的特征文件//模塊返回確認(rèn)字u8PS_Match(void){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x03); Sendcmd(0x03); temp=0x01+0x03+0x03; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//搜索指紋PS_Search//功能:以CharBuffer1或CharBuffer2中的特征文件搜索整個(gè)或部分指紋庫.若搜索到,則返回頁碼。 //參數(shù):BufferID@refCharBuffer1 CharBuffer2//說明:模塊返回確認(rèn)字,頁碼(相配指紋模板)u8PS_Search(u8BufferID,u16StartPage,u16PageNum,SearchResult*p){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x08); Sendcmd(0x04); MYUSART_SendData(BufferID); MYUSART_SendData(StartPage>>8); MYUSART_SendData(StartPage); MYUSART_SendData(PageNum>>8); MYUSART_SendData(PageNum); temp=0x01+0x08+0x04+BufferID +(StartPage>>8)+(u8)StartPage +(PageNum>>8)+(u8)PageNum; SendCheck(temp); data=JudgeStr(2000); if(data) { ensure=data[9]; p->pageID=(data[10]<<8)+data[11]; p->mathscore=(data[12]<<8)+data[13]; } else ensure=0xff; returnensure; }//合并特征(生成模板)PS_RegModel//功能:將CharBuffer1與CharBuffer2中的特征文件合并生成模板,結(jié)果存于CharBuffer1與CharBuffer2 //說明:模塊返回確認(rèn)字u8PS_RegModel(void){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x03); Sendcmd(0x05); temp=0x01+0x03+0x05; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure; }//儲(chǔ)存模板PS_StoreChar//功能:將CharBuffer1或CharBuffer2中的模板文件存到PageID號(hào)flash數(shù)據(jù)庫位置。 //參數(shù):BufferID@refcharBuffer1:0x01 charBuffer1:0x02//PageID(指紋庫位置號(hào))//說明:模塊返回確認(rèn)字u8PS_StoreChar(u8BufferID,u16PageID){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x06); Sendcmd(0x06); MYUSART_SendData(BufferID); MYUSART_SendData(PageID>>8); MYUSART_SendData(PageID); temp=0x01+0x06+0x06+BufferID +(PageID>>8)+(u8)PageID; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure; }//刪除模板PS_DeletChar//功能:刪除flash數(shù)據(jù)庫中指定ID號(hào)開始的N個(gè)指紋模板//參數(shù):PageID(指紋庫模板號(hào)),N刪除的模板個(gè)數(shù)。//說明:模塊返回確認(rèn)字u8PS_DeletChar(u16PageID,u16N){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x07); Sendcmd(0x0C); MYUSART_SendData(PageID>>8); MYUSART_SendData(PageID); MYUSART_SendData(N>>8); MYUSART_SendData(N); temp=0x01+0x07+0x0C +(PageID>>8)+(u8)PageID +(N>>8)+(u8)N; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//清空指紋庫PS_Empty//功能:刪除flash數(shù)據(jù)庫中所有指紋模板//參數(shù):無//說明:模塊返回確認(rèn)字u8PS_Empty(void){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x03); Sendcmd(0x0D); temp=0x01+0x03+0x0D; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//寫系統(tǒng)寄存器PS_WriteReg//功能:寫模塊寄存器//參數(shù):寄存器序號(hào)RegNum:4\5\6//說明:模塊返回確認(rèn)字u8PS_WriteReg(u8RegNum,u8DATA){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x05); Sendcmd(0x0E); MYUSART_SendData(RegNum); MYUSART_SendData(DATA); temp=RegNum+DATA+0x01+0x05+0x0E; SendCheck(temp); data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; if(ensure==0) printf("\r\n設(shè)置參數(shù)成功!"); else printf("\r\n%s",EnsureMessage(ensure)); returnensure;}//讀系統(tǒng)基本參數(shù)PS_ReadSysPara//功能:讀取模塊的基本參數(shù)(波特率,包大小等)//參數(shù):無//說明:模塊返回確認(rèn)字+基本參數(shù)(16bytes)u8PS_ReadSysPara(SysPara*p){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x03); Sendcmd(0x0F); temp=0x01+0x03+0x0F; SendCheck(temp); data=JudgeStr(1000); if(data) { ensure=data[9]; p->PS_max=(data[14]<<8)+data[15]; p->PS_level=data[17]; p->PS_addr=(data[18]<<24)+(data[19]<<16)+(data[20]<<8)+data[21]; p->PS_size=data[23]; p->PS_N=data[25]; } else ensure=0xff; if(ensure==0x00) { printf("\r\n模塊最大指紋容量=%d",p->PS_max); printf("\r\n對(duì)比等級(jí)=%d",p->PS_level); printf("\r\n地址=%x",p->PS_addr); printf("\r\n波特率=%d",p->PS_N*9600); } else printf("\r\n%s",EnsureMessage(ensure)); returnensure;}//設(shè)置模塊地址PS_SetAddr//功能:設(shè)置模塊地址//參數(shù):PS_addr//說明:模塊返回確認(rèn)字u8PS_SetAddr(u32PS_addr){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x07); Sendcmd(0x15); MYUSART_SendData(PS_addr>>24); MYUSART_SendData(PS_addr>>16); MYUSART_SendData(PS_addr>>8); MYUSART_SendData(PS_addr); temp=0x01+0x07+0x15 +(u8)(PS_addr>>24)+(u8)(PS_addr>>16) +(u8)(PS_addr>>8)+(u8)PS_addr; SendCheck(temp); AS608Addr=PS_addr;//發(fā)送完指令,更換地址data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; AS608Addr=PS_addr; if(ensure==0x00) printf("\r\n設(shè)置地址成功!"); else printf("\r\n%s",EnsureMessage(ensure)); returnensure;}//功能:模塊內(nèi)部為用戶開辟了256bytes的FLASH空間用于存用戶記事本,// 該記事本邏輯上被分成16個(gè)頁。//參數(shù):NotePageNum(0~15),Byte32(要寫入內(nèi)容,32個(gè)字節(jié))//說明:模塊返回確認(rèn)字u8PS_WriteNotepad(u8NotePageNum,u8*Byte32){ u16temp;u8ensure,i; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(36); Sendcmd(0x18); MYUSART_SendData(NotePageNum); for(i=0;i<32;i++) { MYUSART_SendData(Byte32[i]); temp+=Byte32[i]; }temp=0x01+36+0x18+NotePageNum+temp; SendCheck(temp);data=JudgeStr(2000); if(data) ensure=data[9]; else ensure=0xff; returnensure;}//讀記事PS_ReadNotepad//功能:讀取FLASH用戶區(qū)的128bytes數(shù)據(jù)//參數(shù):NotePageNum(0~15)//說明:模塊返回確認(rèn)字+用戶信息u8PS_ReadNotepad(u8NotePageNum,u8*Byte32){ u16temp;u8ensure,i; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x04); Sendcmd(0x19); MYUSART_SendData(NotePageNum); temp=0x01+0x04+0x19+NotePageNum; SendCheck(temp);data=JudgeStr(2000); if(data) { ensure=data[9]; for(i=0;i<32;i++) { Byte32[i]=data[10+i]; } } else ensure=0xff; returnensure;}//高速搜索PS_HighSpeedSearch//功能:以CharBuffer1或CharBuffer2中的特征文件高速搜索整個(gè)或部分指紋庫。// 若搜索到,則返回頁碼,該指令對(duì)于的確存在于指紋庫中,且登錄時(shí)質(zhì)量// 很好的指紋,會(huì)很快給出搜索結(jié)果。//參數(shù):BufferID,StartPage(起始頁),PageNum(頁數(shù))//說明:模塊返回確認(rèn)字+頁碼(相配指紋模板)u8PS_HighSpeedSearch(u8BufferID,u16StartPage,u16PageNum,SearchResult*p){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x08); Sendcmd(0x1b); MYUSART_SendData(BufferID); MYUSART_SendData(StartPage>>8); MYUSART_SendData(StartPage); MYUSART_SendData(PageNum>>8); MYUSART_SendData(PageNum); temp=0x01+0x08+0x1b+BufferID +(StartPage>>8)+(u8)StartPage +(PageNum>>8)+(u8)PageNum; SendCheck(temp); data=JudgeStr(2000); if(data) { ensure=data[9]; p->pageID =(data[10]<<8)+data[11]; p->mathscore=(data[12]<<8)+data[13]; } else ensure=0xff; returnensure;}//讀有效模板個(gè)數(shù)PS_ValidTempleteNum//功能:讀有效模板個(gè)數(shù)//參數(shù):無//說明:模塊返回確認(rèn)字+有效模板個(gè)數(shù)ValidNu8PS_ValidTempleteNum(u16*ValidN){ u16temp;u8ensure; u8*data; SendHead(); SendAddr(); SendFlag(0x01);//命令包標(biāo)識(shí) SendLength(0x03); Sendcmd(0x1d); temp=0x01+0x03+0x1d; SendCheck(temp);data=JudgeStr(2000); if(data) { ensure=data[9]; *ValidN=(data[10]<<8)+data[11]; } else ensure=0xff; if(ensure==0x00) { printf("\r\n有效指紋個(gè)數(shù)=%d",(data[10]<<8)+data[11]); } else printf("\r\n%s",EnsureMessage(ensure)); returnensure;}//與AS608握手PS_HandShake//參數(shù):PS_Addr地址指針//說明:模塊返新地址(正確地址) u8PS_HandShake(u32*PS_Addr){ SendHead(); SendAddr(); MYUSART_SendData(0X01); MYUSART_SendData(0X00); MYUSART_SendData(0X00); delay_ms(200); if(USART2_RX_STA&0X8000)//接收到數(shù)據(jù) { if(//判斷是不是模塊返回的應(yīng)答包 USART2_RX_BUF[0]==0XEF &&USART2_RX_BUF[1]==0X01 &&USART2_RX_BUF[6]==0X07 ) { *PS_Addr=(USART2_RX_BUF[2]<<24)+(USART2_RX_BUF[3]<<16) +(USART2_RX_BUF[4]<<8)+(USART2_RX_BUF[5]); USART2_RX_STA=0; return0; } USART2_RX_STA=0; } return1; }//模塊應(yīng)答包確認(rèn)碼信息解析//功能:解析確認(rèn)碼錯(cuò)誤信息返回信息//參數(shù):ensureconstchar*EnsureMessage(u8ensure){ constchar*p; switch(ensure) { case0x00: p="OK";break; case0x01: p="數(shù)據(jù)包接收錯(cuò)誤";break; case0x02: p="傳感器上沒有手指";break; case0x03: p="錄入指紋圖像失敗";break; case0x04: p="指紋圖像太干、太淡而生不成特征";break; case0x05: p="指紋圖像太濕、太糊而生不成特征";break; case0x06: p="指紋圖像太亂而生不成特征";break; case0x07: p="指紋圖像正常,但特征點(diǎn)太少(或面積太小)而生不成特征";break; case0x08: p="指紋不匹配";break; case0x09: p="沒搜索到指紋";break; case0x0a: p="特征合并失敗";break; case0x0b: p="訪問指紋庫時(shí)地址序號(hào)超出指紋庫范圍"; case0x10: p="刪除模板失敗";break; case0x11: p="清空指紋庫失敗";break; case0x15: p="緩沖區(qū)內(nèi)沒有有效原始圖而生不成圖像";break; case0x18: p="讀寫FLASH出錯(cuò)";break; case0x19: p="未定義錯(cuò)誤";break; case0x1a: p="無效寄存器號(hào)";break; case0x1b: p="寄存器設(shè)定內(nèi)容錯(cuò)誤";break; case0x1c: p="記事本頁碼指定錯(cuò)誤";break; case0x1f: p="指紋庫滿";break; case0x20: p="地址錯(cuò)誤";break; default: p="模塊返回確認(rèn)碼有誤";break; }returnp; }//顯示確認(rèn)碼錯(cuò)誤信息voidShowErrMessage(u8ensure){//OLED_ShowCH(5,0,(u8*)EnsureMessage(ensure));}externu8ZW_MODE;externu8Waring_MODE;voidAdd_FR(){u8i,ensure,processnum=0;u8ID_NUM=0;while(1) { switch(processnum){case0:i++; OLED_ShowChinese(0,0,15,16);//請(qǐng) OLED_ShowChinese(18,0,16,16);//按 OLED_ShowChinese(36,0,17,16);//手 OLED_ShowChinese(54,0,0,16);//指 OLED_Refresh(); ensure=PS_GetImage();if(ensure==0x00){ensure=PS_GenChar(CharBuffer1);//生成特征if(ensure==0x00) { OLED_ShowChinese(0,18,0,16);//指紋正常 OLED_ShowChinese(18,18,1,16); OLED_ShowChinese(36,18,18,16); OLED_ShowChinese(54,18,19,16); OLED_Refresh(); i=0;processnum=1;//跳到第二步 } elseShowErrMessage(ensure); } elseShowErrMessage(ensure); break;case1:i++;OLED_ShowChinese(0,18,20,16);//再按一次 OLED_ShowChinese(18,18,16,16); OLED_ShowChinese(36,18,21,16); OLED_ShowChinese(54,18,22,16);OLED_Refresh(); ensure=PS_GetImage();if(ensure==0x00){ensure=PS_GenChar(CharBuffer2);//生成特征if(ensure==0x00){OLED_ShowChinese(0,18,0,16);//指紋正常 OLED_ShowChinese(18,18,1,16); OLED_ShowChinese(36,18,18,16); OLED_ShowChinese(54,18,19,16); OLED_Refresh();i=0;processnum=2;//跳到第三步}elseShowErrMessage(ensure);}elseShowErrMessage(ensure);break;case2:OLED_ShowChinese(0,18,23,16);//對(duì)比指紋 OLED_ShowChinese(18,18,24,16); OLED_ShowChinese(36,18,0,16); OLED_ShowChinese(54,18,1,16); OLED_Refresh();ensure=PS_Match();if(ensure==0x00){OLED_ShowChinese(0,18,23,16);//對(duì)比成功 OLED_ShowChinese(18,18,1,16); OLED_ShowChinese(36,18,26,16); OLED_ShowChinese(54,18,27,16);OLED_Refresh(); processnum=3;//跳到第四步}else{OLED_ShowChinese(0,18,23,16);//對(duì)比失敗 OLED_ShowChinese(18,18,24,16); OLED_ShowChinese(36,18,28,16); OLED_ShowChinese(54,18,29,16); OLED_Refresh();ShowErrMessage(ensure);i=0;processnum=0;//跳回第一步}delay_ms(500);break; case3:OLED_ShowChinese(0,18,30,16);//生成模板 OLED_ShowChinese(18,18,26,16); OLED_ShowChinese(36,18,2,16); OLED_ShowChinese(54,18,31,16); OLED_Refresh();delay_ms(500);ensure=PS_RegModel();if(ensure==0x00){OLED_ShowChinese(0,18,30,16);//生成成功 OLED_ShowChinese(18,18,26,16); OLED_ShowChinese(36,18,26,16); OLED_ShowChinese(54,18,27,16); OLED_Refresh();processnum=4;//跳到第五步}else{processnum=0;ShowErrMessage(ensure);}delay_ms(1000);break; case4: ID_NUM=1; ensure=PS_StoreChar(CharBuffer2,ID_NUM);//儲(chǔ)存模板 if(ensure==0x00){ ZW_MODE=2;OLED_Clear();OLED_ShowChinese(0,18,35,16);//錄用成功 OLED_ShowChinese(18,18,36,16); OLED_ShowChinese(36,18,26,16); OLED_ShowChinese(54,18,27,16); OLED_Refresh();return;}else{OLED_Clear();processnum=0;ShowErrMessage(ensure);}break; } delay_ms(400);if(i==10)//超過5次沒有按手指則退出{break;} }}SysParaAS608Para;//指紋模塊AS608參數(shù)externu8ZW_MODE;externu8Waring_MODE;voidpress_FR(void){SearchResultseach;u8ensure;//charstr[20];OLED_ShowChinese(0,0,15,16);//請(qǐng) OLED_ShowChinese(18,0,16,16);//按OLED_ShowChinese(36,0,17,16);//手OLED_ShowChinese(54,0,0,16);//指OLED_Refresh();ensure=PS_GetImage();if(ensure==0x00)//獲取圖像成功{ensure=PS_GenChar(CharBuffer1);if(ensure==0x00)//生成特征成功{ensure=PS_HighSpeedSearch(CharBuffer1,0,99,&seach);if(ensure==0x00)//搜索成功{ Waring_MODE=0; BEEP=0; SIM800A_SendCmd_OK("AT+CMGD=1",20);OLED_ShowChinese(0,18,13,16);//驗(yàn)證成功 OLED_ShowChinese(18,18,14,16); OLED_ShowChinese(36,18,26,16); OLED_ShowChinese(54,18,27,16); OLED_Refresh();delay_ms(1500);delay_ms(1500);}else{OLED_ShowChinese(0,18,13,16);//驗(yàn)證失敗 OLED_ShowChinese(18,18,14,16); OLED_ShowChinese(36,18,28,16); OLED_ShowChinese(54,18,29,16); OLED_Refresh();delay_ms(1500);}}else {};OLED_Clear();OLED_ShowChinese(0,0,15,16);//請(qǐng) OLED_ShowChinese(18,0,16,16);//按 OLED_ShowChinese(36,0,17,16);//手 OLED_ShowChinese(54,0,0,16);//指OLED_Refresh();} }voidDEL_FR(void){u8ensure;u16ID_NUM=0;ensure=PS_Empty();//清空指紋庫

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論