語音及文字警示系統(tǒng)論文_第1頁
語音及文字警示系統(tǒng)論文_第2頁
語音及文字警示系統(tǒng)論文_第3頁
語音及文字警示系統(tǒng)論文_第4頁
語音及文字警示系統(tǒng)論文_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

word文檔可自由復(fù)制編輯摘要為改善鐵路平面交叉道口尤其是站內(nèi)道口的安全狀況,有必要設(shè)計(jì)一種具有高可靠性的道口報(bào)警設(shè)備,當(dāng)列車接近道口時(shí)告警,提示道口值班人員及行人、車輛注意,以確保列車安全通過,減少以至杜絕各種道口交通事故的發(fā)生[1]。本論文所研究的語音及文字警示系統(tǒng)主要用于鐵路道口的警示;采取語音播放及文字信息顯示等措施,其中語音部分可采用兩種方式,一是自動(dòng)播放系統(tǒng)預(yù)先存儲(chǔ)或錄制的語音內(nèi)容,二是通過系統(tǒng)連接的話筒進(jìn)行人工語音播放;文字部分采用LCD顯示屏顯示預(yù)先存儲(chǔ)的文字信息,該文字信息可與語音信息同步顯示相同的內(nèi)容,需要顯示的文字信息和播放的語音內(nèi)容均采用SD卡存儲(chǔ)方式,易于修改(針對(duì)不同的應(yīng)用場(chǎng)合只需修改SD卡上的數(shù)據(jù)內(nèi)容即可),語音播放及文字顯示可采用自動(dòng)觸發(fā)(系統(tǒng)外接主動(dòng)紅外入侵探測(cè)器等設(shè)備等)或人工操作兩種方式。關(guān)鍵詞:SD卡,MP3語音,TXT,警示,C8051F340,VS1003ABSTRACTToimprovethesecurityofthelevelcrossingparticularlyinsidecrossing,itisnecessarytodesignahighlyreliablecrossingalarmequipment,whenthetrainisapproachingthecrossing,suggestdutypedestrianandthevehiclestakingcareofit.Toensurethesafepassageoftrains,reduceandeventuallyeliminateallcrossingtrafficaccidents[1].Thisthesisstudiedvoiceandtextalertssystemismainlyusedfortherailwaycrossingwarning;takevoiceplaybackandtextinformationdisplayandothermeasures,includingpartsofspeechcanbeusedintwoways,oneisautomaticplaybacksystempre-storedorrecordedaudiocontent,Second,thesystemconnectorofthemicrophoneforartificialvoiceplayback;textportionofLCDdisplaypreviouslystoredtextmessage,thetextmessagecanbesynchronizedwiththevoiceinformationwiththesamecontent,thetextinformationtobedisplayedandplaybackaudiocontentareusedSDcardstorage,easytomodify(fordifferentapplicationssimplymodifythecontentsofthedataontheSDcardcanbe),voiceplaybackandtextdisplaycanbetriggeredautomatically(systemexternalactiveinfraredintrusiondetectorsandotherequipment,etc.),ormanualoperationtwoways.KEYWORDS:SDcard,MP3,TXT,warning,C8051F340,VS1003word文檔可自由復(fù)制編輯目錄TOC\o"1-4"\h\z\u前言 word文檔可自由復(fù)制編輯前言在鐵路網(wǎng)比較發(fā)達(dá)的歐洲,道口密度大,事故風(fēng)險(xiǎn)也相對(duì)比較高。其中,英國安全工作做的比較好,近年來其道口事故發(fā)生率和每個(gè)道口平均死亡人數(shù)均比其他各國低。這主要得益于英國政府增加警力,強(qiáng)行控制道口違章行為。在駕校增設(shè)關(guān)于平交道口的安全教育,開展平交道口危險(xiǎn)性的宣傳活動(dòng)。同時(shí),英國西屋鐵路系統(tǒng)公司在別國成功技術(shù)的基礎(chǔ)上,研制了一種新型的平交道口預(yù)測(cè)器(英文名稱縮寫LCP)。其工作過程是在道口裝一個(gè)LCP單元,兩邊軌道的端點(diǎn)處各裝一個(gè)無源轉(zhuǎn)轍器。當(dāng)列車經(jīng)過前轉(zhuǎn)轍器時(shí),軌道電路的阻抗和電壓會(huì)線形減少,呈現(xiàn)下斜圖形,反映列車接近軌道口的位置,LCP根據(jù)圖形斜率計(jì)算列的速度,確定列車經(jīng)過道口的時(shí)間,從而產(chǎn)生報(bào)警,當(dāng)列車經(jīng)過后轉(zhuǎn)轍器以后,報(bào)警結(jié)束。該設(shè)備符合道口報(bào)警設(shè)備的一般設(shè)計(jì)原理,但是其價(jià)格昂貴,同時(shí)英國鐵路軌道電路與我國軌道電路有諸多不同之處,所以無法將其移用至我國鐵路道口中[2,3]。本文以鐵路道口應(yīng)用為例設(shè)計(jì)了一款基于SD卡的文字聲光警示系統(tǒng)。通過現(xiàn)有技術(shù)加強(qiáng)我國鐵路道口的現(xiàn)代化改造,必將提高道口管理的自動(dòng)化水平,提升道口通過的安全性,對(duì)于減少道口事故、保障人民生命財(cái)產(chǎn)安全、提高鐵路公路運(yùn)營效率有著十分重要的意義。于該警示系統(tǒng)是用SD卡存儲(chǔ)警示內(nèi)容,內(nèi)容方便修改,因此可以使用于其他的場(chǎng)合。例如安防、普通十字路口、施工現(xiàn)場(chǎng)、學(xué)校、博物館等,只需要將SD卡中的警示內(nèi)容更改為場(chǎng)合相對(duì)應(yīng)的警示內(nèi)容即可,無需改變軟件程序。本論文共分為五章。第1章是緒論,主要闡述了設(shè)計(jì)中的一些基本原理和系統(tǒng)總體方案設(shè)計(jì)。第2章是硬件設(shè)計(jì),單片機(jī)最小系統(tǒng)模塊、MP3解碼模塊、SD卡模塊、串口通信模塊、手持話筒模塊,功率放大模塊硬件設(shè)計(jì)。第3章是軟件設(shè)計(jì),MP3解碼模塊、SD卡模塊以及串口通信模塊等的軟件設(shè)計(jì)。第4章是調(diào)試與分析,通過測(cè)試程序,驗(yàn)證各模塊的功能,并對(duì)調(diào)試過程中產(chǎn)生的問題進(jìn)行了分析與總結(jié)。第5章是系統(tǒng)設(shè)計(jì)的結(jié)論與展望,在這一章中,結(jié)論對(duì)系統(tǒng)的設(shè)計(jì)結(jié)果作了簡(jiǎn)單的總結(jié),展望則根據(jù)系統(tǒng)中存在的不足提出了一些相應(yīng)的改進(jìn)的方法。第1章緒論本章主要對(duì)SD文件系統(tǒng)和znFAT及SPI通信做介紹和說明。1.1SD卡原理及內(nèi)部結(jié)構(gòu)SD卡(SecureDigitalMemoryCard)是一種為滿足安全性、容量、性能和使用環(huán)境等各方面的需求而設(shè)計(jì)的一種新型存儲(chǔ)器件,SD卡允許在兩種模式下工作,即SD模式和SPI模式,本系統(tǒng)采用SPI模式[19]。圖1-1SD卡內(nèi)部圖表1-1SPI總線模式定義引腳名稱類型功能描述1CS輸入片選2DATAIN輸入主卡命令和數(shù)據(jù)3VSS1服務(wù)接地4VDD服務(wù)接電源5CLK輸入時(shí)鐘6VSS2服務(wù)接地7DATAOUT輸出主卡數(shù)據(jù)和狀態(tài)8RSV(2)輸入接受9RSV(2)輸入接受1、SD卡主要引腳和功能如下。(1)CLK(時(shí)鐘信號(hào)),每個(gè)時(shí)鐘周期傳輸一個(gè)命令或數(shù)據(jù)位,頻率可在0~25MHz之間變化,SD卡的總線管理器可以不受任何限制的自由產(chǎn)生0~25MHz的頻率;(2)CMD(雙向命令和回復(fù)線),命令是一次主機(jī)到從卡操作的開始,命令可以是從主機(jī)到單卡尋址,也可以是到所有卡;回復(fù)是對(duì)之前命令的回答,回復(fù)可以來自單卡或所有卡;(3)DAT0~3(數(shù)據(jù)線),數(shù)據(jù)可以從卡傳向主機(jī)也可以從主機(jī)傳向卡。SD卡以命令形式來控制SD卡的讀寫等操作??筛鶕?jù)命令對(duì)多塊或單塊進(jìn)行讀寫操作。在SPI模式下其命令由6個(gè)字節(jié)構(gòu)成,其中高位在前。圖1-2SD卡分區(qū)圖表1-2主啟動(dòng)記錄和分區(qū)表BP長度文件名內(nèi)容0446主啟動(dòng)記錄不限44616分區(qū)表(第一部分)見下表46216分區(qū)表(第二部分)全是0x0047816分區(qū)表(第三部分)全是0x0049416分區(qū)表(第四部分)全是0x005102信號(hào)字(SignatureWord)0x55,0xaa2、主啟動(dòng)記錄和分區(qū)注釋如下。(1)0到445主啟動(dòng)記錄此間內(nèi)容不被敘述。(2)446到461分區(qū)表(第一部分)這個(gè)部分?jǐn)⑹隽说谝环謪^(qū)在體系中的信息。這個(gè)分區(qū)意味著使用者可以沒有相互的證明使用普通區(qū)域。(3)462到477分區(qū)表(第二部分)如果體系只有一個(gè)分區(qū),此間內(nèi)容為0。(4)478到493分區(qū)表(第三部分)如果體系只有一個(gè)分區(qū),此間內(nèi)容為0。(5)494到509分區(qū)表(第四部分)如果體系只有一個(gè)分區(qū),此間內(nèi)容為0。(6)510到511信號(hào)字(SignatureWord)此處記錄了0x55(BP510)和0xaa。表1-3分區(qū)表BP長度文件名內(nèi)容01啟動(dòng)指示0x00或0x8011啟始磁頭數(shù)值22啟始柱面和扇區(qū)數(shù)值41系統(tǒng)ID號(hào)0x01或0x04或0x0651終止磁頭數(shù)值62終止柱面和扇區(qū)數(shù)值84RelativeSector數(shù)值124總扇區(qū)數(shù)值3、SD卡文件分區(qū)注釋。(1)BP0啟動(dòng)指示如果以SD卡作為啟動(dòng)(盤),記錄0x80,否則記錄0x00。(2)BP1啟始磁頭此處敘述分區(qū)的起始磁頭。(3)BP2和3啟始柱面和扇區(qū)此處將敘述分區(qū)的啟始柱面和扇區(qū)。6個(gè)位(在BP2中0到5位),將作為啟始扇區(qū)。10個(gè)位(在BP2中的6和7位,在BP3中的0到7的)將作為啟始柱面。(4)BP4系統(tǒng)ID號(hào)此處敘述文件系統(tǒng)類型。如果分區(qū)大小是少于32680個(gè)扇區(qū),它將被記錄0x01。如果少于65536個(gè)扇區(qū),它將被記錄0x04。否則,它將被記錄0x06。(5)BP5終止磁頭此處記錄終止磁頭。(6)BP6和7終止柱面和扇區(qū)此處記錄終止柱面和扇區(qū)。6個(gè)位(在BP6中的0到位5位)作為結(jié)束扇區(qū)。10個(gè)位(在BP6中的位6和7位,在BP7中的0到7位)作為結(jié)束柱面。(7)BP8到11RelativeSector此處敘述這此分區(qū)的起始扇區(qū)之前存在的數(shù)目。(8)BP12到15總扇區(qū)此處記錄總扇區(qū)數(shù)量。(9)申請(qǐng)分配表(FAT)FAT將包含一個(gè)格式ID號(hào)和一些項(xiàng)目,每個(gè)使用者區(qū)域的指示群集。這些項(xiàng)目連續(xù)的將是有限的出發(fā)由于2而且項(xiàng)目數(shù)目將和~相等對(duì)應(yīng)的群集數(shù)目。每個(gè)項(xiàng)目在FAT中將指示對(duì)應(yīng)的群集狀態(tài)。FAT項(xiàng)目將用來識(shí)別被分派到每個(gè)文件的群集組[18]。1.2znFATznFAT是一種高效、完備、精簡(jiǎn)且具有高可移植性的嵌入式FAT32文件系統(tǒng)解決方案。其主要特性如下。1、可通用于多種嵌入式CPU,如51、AVR、PIC、ARM、Cortex、DSP、MSP430、freescaleS12等等。2、所占用的RAM與ROM資源極少,并可由使用者視目標(biāo)平臺(tái)資源情況進(jìn)行靈活配置,最簡(jiǎn)配置情況下,RAM的使用量約在800~900字節(jié)左右。3、內(nèi)建獨(dú)特的數(shù)據(jù)寫入加速算法以及扇區(qū)級(jí)的基于“預(yù)建文件”的數(shù)據(jù)寫入機(jī)制。4、底層提供簡(jiǎn)單的單扇區(qū)讀寫驅(qū)動(dòng)接口以及可選的硬件級(jí)多扇區(qū)連續(xù)讀寫驅(qū)動(dòng)接口。(在提供多扇區(qū)連續(xù)讀寫驅(qū)動(dòng)的情況下,數(shù)據(jù)讀寫速度將有近2~4倍的提升,甚至更高。)5、提供清晰而強(qiáng)大的對(duì)函數(shù)模塊裁剪的功能,極大限度的減小最終生成的可執(zhí)行文件的體積。6、提供數(shù)據(jù)讀取的重定向功能,使讀到的數(shù)據(jù)無需緩沖暫存,直接流向應(yīng)用目的。7、支持長文件名,長文件名最大長度可配置。默認(rèn)配備并使用GB2312中文字符,并可選擇是否使用OEM字符集,以減少程序體積。8、支持與Windows、Linux等操作系統(tǒng)兼容的路徑表示,路徑分隔可使用/或\。支持無限深目錄,支持長名目錄。9、提供數(shù)據(jù)寫入的實(shí)時(shí)模式,寫入的任何數(shù)據(jù),只怕只有一個(gè)字節(jié),立即落實(shí)到物理存儲(chǔ)器,防止因惡劣工作環(huán)境、干擾或其它原因引起的目標(biāo)平臺(tái)不可預(yù)見的死機(jī)或故障,造成數(shù)據(jù)丟失(實(shí)時(shí)模式數(shù)據(jù)寫入速度不高,內(nèi)存中不緩沖任何數(shù)據(jù))。10、支持對(duì)存儲(chǔ)設(shè)備的格式化,文件系統(tǒng)為FAT32。11、支持*與?通配,長名亦支持通配。12、支持文件與目錄的刪除,目錄支持內(nèi)含子目錄與無限深級(jí)子目錄結(jié)構(gòu)的刪除。13、支持無限級(jí)目錄創(chuàng)建。14、支持多文件同時(shí)操作。15、支持多設(shè)備,即同時(shí)掛載多種存儲(chǔ)設(shè)備,可在多種存儲(chǔ)設(shè)備間任意切換。1.3SPI串行通信SPI是英語SerialPeripheralInterface的縮寫,顧名思義就是串行外圍設(shè)備接口。時(shí)鐘由Master控制,在移位時(shí)鐘的脈沖下,數(shù)據(jù)按位傳輸,高位在前,低位在后(MSBfirst),目前應(yīng)用中的數(shù)據(jù)速率可達(dá)幾Mbps的水平。其主要特點(diǎn)有:可以同時(shí)發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機(jī)或從機(jī)工作;提供頻率可編程時(shí)鐘;發(fā)送結(jié)束中斷標(biāo)志;寫沖突保護(hù);總線競(jìng)爭(zhēng)保護(hù)等。正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議[19]。1.3.1SPI接口定義SPI總線是一種環(huán)形結(jié)構(gòu),由NSS、SCK、MOSI、MISO構(gòu)成,其時(shí)序其實(shí)很簡(jiǎn)單,主要是在SCK的控制下,兩個(gè)雙向移位寄存器進(jìn)行數(shù)據(jù)交換。典型連接圖如圖1-3所示。1、MOSI:主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入;2、MISO:主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出;3、SCK:時(shí)鐘信號(hào),由主器件產(chǎn)生;4、NSS:從器件使能信號(hào),由主器件控制。圖1-3SPI主從方式典型連接圖1.3.2SPI總線工作方式SPI主器件啟動(dòng)SPI總線上所有的數(shù)據(jù)傳輸。通過將主允許標(biāo)志(MSTEN,SPI0CFG.6)置1將SPI0置于主方式。當(dāng)處于主方式時(shí),向SPI0數(shù)據(jù)寄存器(SPI0DAT)寫入一個(gè)字節(jié)時(shí)是寫發(fā)送緩沖器。如果SPI移位寄存器為空,發(fā)送緩沖器中的數(shù)據(jù)字節(jié)被傳送到移位寄存器,數(shù)據(jù)傳輸開始。SPI0主器件立即在MOSI線上串行移出數(shù)據(jù),同時(shí)在SCK上提供串行時(shí)鐘。在傳輸結(jié)束后SPIF(SPI0CN.7)標(biāo)志被置為邏輯1。如果中斷被允許,在SPIF標(biāo)志置位時(shí)將產(chǎn)生一個(gè)中斷請(qǐng)求。在全雙工操作中,當(dāng)SPI主器件在MOSI線向從器件發(fā)送數(shù)據(jù)時(shí),被尋址的SPI從器件同時(shí)在MISO線上向主器件發(fā)送其移位寄存器中的內(nèi)容。因此,SPI標(biāo)志既作為發(fā)送完成標(biāo)志又作為接收數(shù)據(jù)準(zhǔn)備好標(biāo)志。從器件接收的數(shù)據(jù)字節(jié)以MSB在先的形式傳送到主器件的移位寄存器。當(dāng)一個(gè)數(shù)據(jù)字節(jié)被完全移入移位寄存器時(shí),便被傳送到接收緩沖器,處理器通過讀SPI0DAT來讀該字節(jié)。當(dāng)被配置為主器件時(shí),SPI0可以工作在下面的三種方式之一:多主方式、3線單主方式或4線單主方式。當(dāng)NSSMD1(SPI0CN.3)=0且NSSMD0(SPI0CN.2)=1時(shí),是默認(rèn)的多主方式。在該方式,NSS是器件的輸入,用于禁止主SPI0,以允許另一主器件訪問總線。在該方式,當(dāng)NSS被拉為低電平時(shí),MSTEN(SPI0CN.6)和SPIEN(SPI0CN.0)位被硬件清0,以禁止SPI主器件,且方式錯(cuò)誤標(biāo)志(MODF,SPI0CN.5)被置1。如果中斷被允許,將產(chǎn)生方式錯(cuò)誤中斷。在這種情況下,必須用軟件重新使能SPI0。在多主系統(tǒng)中,當(dāng)器件不作為系統(tǒng)主器件使用時(shí),一般被默認(rèn)為從器件。在多主方式,可以用通用I/O引腳對(duì)從器件單獨(dú)尋址(如果需要)。當(dāng)NSSMD1(SPI0CN.3)=0且NSSMD0(SPI0CN.2)=0時(shí),SPI0工作在3線單主方式。在該方式,NSS未被使用,也不被交叉開關(guān)映射到外部端口引腳。在該方式,應(yīng)使用通用I/O引腳選擇要尋址的從器件。當(dāng)NSSMD1(SPI0CN.3)=1時(shí),SPI0工作在4線單主方式。在該方式,NSS被配置為輸出引腳,可被用作從選擇信號(hào)去選中一個(gè)SPI器件。在該方式,NSS的輸出值由NSSMD0(SPI0CN.2)控制(用軟件)??梢杂猛ㄓ肐/O引腳選擇另外的從器件[19]。1.3.4SPI時(shí)序分析如圖1-4所示,使用SPI0配置寄存器(SPI0CFG)中的時(shí)鐘控制選擇位可以在串行時(shí)鐘相位和極性的4種組合中選擇其一。CKPHA位(SPI0CFG.5)選擇兩種時(shí)鐘相位(鎖存數(shù)據(jù)所用的邊沿)中的一種。CKPOL位(SPI0CFG.4)在高電平有效和低電平有效的時(shí)鐘之間選擇。主器件和從器件必須被配置為使用相同的時(shí)鐘相位和極性。在改變時(shí)鐘相位和極性期間應(yīng)禁止SPI0(通過清除SPIEN位,SPI0CN.0)。這里需要注意的是在主方式,SPI在SCK無效沿(MOSI改變狀態(tài)之際)的前1個(gè)系統(tǒng)時(shí)鐘采樣MISO線,以便為從器件提供最大的建立時(shí)間。SPI0時(shí)鐘速率寄存器(SPI0CKR,見SFR定義20.3)控制方式的串行時(shí)鐘頻率。當(dāng)工作于從方式時(shí)該寄存器被忽略。當(dāng)SPI被配置為主器件時(shí),最大數(shù)據(jù)傳輸率(位/秒)是系統(tǒng)時(shí)鐘頻率的二分之一。當(dāng)SPI被配置為從器件時(shí),全雙工操作的最大數(shù)據(jù)傳輸率(位/秒)是系統(tǒng)時(shí)鐘頻率的十分之一,前提是主器件與系統(tǒng)時(shí)鐘同步發(fā)出SCK、NSS(在4線從方式)和串行輸入數(shù)據(jù)。如果主器件發(fā)出的SCK、NSS及串行輸入數(shù)據(jù)不同步,則最大數(shù)據(jù)傳輸率(位/秒)必須小于系統(tǒng)時(shí)鐘頻率的十分之一。在主器件只想發(fā)送數(shù)據(jù)到從器件而不需要接收從器件發(fā)出的數(shù)據(jù)(即半雙工操作)這一特殊情況下,SPI從器件接收數(shù)據(jù)時(shí)的最大數(shù)據(jù)傳輸率(位/秒)是系統(tǒng)時(shí)鐘頻率的四分之一,這是在假設(shè)由主器件發(fā)出SCK、NSS和串行輸入數(shù)據(jù)與系統(tǒng)時(shí)鐘同步的情況下[11]。圖1-4SPI時(shí)序圖1.4系統(tǒng)方案MCU最小系統(tǒng)中使用的是美國SiliconLaboratories公司生產(chǎn)的C8051F340單片機(jī)。該芯片是完全集成的混合信號(hào)片上系統(tǒng)型MCU,具有片內(nèi)上電復(fù)位、VDD監(jiān)視器、電壓調(diào)整器、看門狗定時(shí)器和時(shí)鐘振蕩器,是真正能獨(dú)立工作的片上系統(tǒng)。FLASH存儲(chǔ)器還具有在系統(tǒng)重新編程能力,可用于非易失性數(shù)據(jù)存儲(chǔ),并允許現(xiàn)場(chǎng)更新8051固件。用戶軟件對(duì)所有外設(shè)具有完全的控制,可以關(guān)斷任何一個(gè)或所有外設(shè)以節(jié)省功耗[12]。1.4.1軟件介紹原理圖和PCB圖的設(shè)計(jì)使用的是AltiumDesigner。AltiumDesignerSummer09是Altium公司新出的一款EDA開發(fā)工具。AltiumDesignerSummer09的發(fā)布延續(xù)了連續(xù)不斷的新技術(shù)的應(yīng)用過程。這必將幫助用戶更輕松地創(chuàng)建下一代電子設(shè)計(jì)。同時(shí),我們將令A(yù)ltiumDesigner更符合電子設(shè)計(jì)師的要求。Altium的一體化設(shè)計(jì)結(jié)構(gòu)將硬件、軟件和變成硬件集合在一個(gè)單一的環(huán)境中,這將使用戶自由地探索新的設(shè)計(jì)構(gòu)想。在整個(gè)設(shè)計(jì)構(gòu)成中,每個(gè)人都使用同一個(gè)設(shè)計(jì)界面。Summer09版本解決了大量歷史遺留問題。其中就包括了增加更多的機(jī)械層設(shè)置、增強(qiáng)原理圖網(wǎng)絡(luò)類定義。可以再Windows7上運(yùn)行,增加了很多類似于Windows的快捷鍵,大大縮短了繪圖周期。對(duì)于初學(xué)者而言更加容易上手[13]。C8051F340程序的開發(fā)環(huán)境采用的是KEILuVISION4。KEILuVISION4是眾多單片機(jī)應(yīng)用開發(fā)軟件中最優(yōu)秀的軟件之一,它支持眾多不同公司的MCS51架構(gòu)的芯片,甚至ARM,它集編輯,編譯,仿真等于一體,它的界面和常用的微軟VC++的界面相似,界面友好,易學(xué)易用,在調(diào)試程序,軟件仿真方面也有很強(qiáng)大的功能[15]。1.4.2系統(tǒng)測(cè)試為了驗(yàn)證系統(tǒng)的可靠性,在系統(tǒng)設(shè)計(jì)完畢后就需要對(duì)各功能模塊進(jìn)行測(cè)試。首先進(jìn)行硬件測(cè)試,上電前仔細(xì)檢查各元器件是否正確焊接在電路板上,上電后用萬用表測(cè)試相應(yīng)引腳電壓值是否與期望值相符;硬件測(cè)試完畢后,對(duì)各功能分別編寫簡(jiǎn)單的測(cè)試程序進(jìn)行調(diào)試;最后進(jìn)行系統(tǒng)總體調(diào)試,驗(yàn)證系統(tǒng)功能。第2章警示系統(tǒng)硬件設(shè)計(jì)在設(shè)計(jì)過程中,將系統(tǒng)功能分為硬件和軟件兩部分來分別實(shí)現(xiàn)。本章詳細(xì)介紹了系統(tǒng)設(shè)計(jì)的硬件部分,主要分幾個(gè)模塊詳細(xì)描述各部分的設(shè)計(jì)方案及其實(shí)現(xiàn)功能。2.1警示系統(tǒng)硬件功能概述硬件設(shè)計(jì)是整個(gè)系統(tǒng)設(shè)計(jì)的基礎(chǔ),是軟件運(yùn)行的平臺(tái)。主要的硬件電路有C8051F340最小系統(tǒng)電路,MP3解碼電路,SD卡電路,串口通信電路。其中各部分功能介紹如下。1、C8051F340最小系統(tǒng)電路C8051F340最小系統(tǒng)電路主要電路有,JTAG調(diào)試電路,復(fù)位電路,供電電路,觸發(fā)源輸入電路。2、MP3解碼電路MP3解碼電路主要有,復(fù)位電路,時(shí)鐘電路,麥克風(fēng)接口電路,供電電路由于VS1003解碼芯片也是采用3.3V供電所以供電電路是和C8051F340同用一個(gè)供電電路使設(shè)計(jì)更加方便。時(shí)鐘采用12.288MHZ的晶振。3、SD卡電路SD卡讀取是為了使本系統(tǒng)的應(yīng)用范圍更廣而設(shè)計(jì)的。SD卡讀取技術(shù)會(huì)使警示系統(tǒng)更加靈活的使用到各種場(chǎng)合。4、串口字符通信電路串口字符電路使用MAX3232作為串口通信芯片,具有通用性,使系統(tǒng)的更加便于使用。5、手持話筒電路手持話筒模塊電路使用以NE5532運(yùn)算放大器為核心器件,具有較強(qiáng)的音頻放大功能的電路。將話筒的MIC頭轉(zhuǎn)換出來的電信號(hào)進(jìn)行放大。NE5532非常常用的音頻放大芯片,在音頻的范圍內(nèi)具有極高的精度,能保證聲音信號(hào)的相對(duì)真實(shí)。6、功率放大電路功率放大電路分為,音頻功率放大、電源供電、控制模塊和模擬開關(guān)模塊。音頻功率放大模塊采用TDA7377為核心器件。控制模塊采用HCF4052為核心器件。模擬開關(guān)模塊采用74LS00為核心器件。本設(shè)計(jì)需要完成上述6個(gè)主要電路的搭建,C8051F340最小系統(tǒng)電路是系統(tǒng)最為重要的部分,所以很多外設(shè)電路都是為最小系統(tǒng)服務(wù)的電路。C8051F340最小系統(tǒng)使用內(nèi)部時(shí)鐘,所以沒有時(shí)鐘電路。本章將介紹以上電路的線路連接。2.2警示系統(tǒng)硬件總體設(shè)計(jì)根據(jù)系統(tǒng)的功能要求,需要完成如下設(shè)計(jì):以C8051F340為核心的最小系統(tǒng)、以VS1003為核心的MP3解碼電路,以SD卡為核心的SD卡讀取電路和以MAX3232為電平轉(zhuǎn)換芯片的串口通信電路。其整體設(shè)計(jì)框圖如圖2-1所示。圖2-1警示系統(tǒng)硬件原理框圖2.3警示系統(tǒng)硬件詳細(xì)設(shè)計(jì)2.3.1C8051F340最小系統(tǒng)C8051F340最小系統(tǒng)包括電源供電電路、復(fù)位電路、JTAG仿真電路、觸發(fā)源輸入電路等模塊。下面分別對(duì)各模塊進(jìn)行介紹。2.3.1.1供電電路本設(shè)計(jì)中需要用到+5V、+3.3V和+2.5V三種電壓,而簡(jiǎn)單易得的USB電源是+5V,但是USB作為電源電壓太低難以驅(qū)動(dòng)繼電器,使繼電器工作。而且工業(yè)常用+12V作為電源。因而需要使用+12V轉(zhuǎn)換以分別產(chǎn)生+5V、+3.3V和+2.5V。其原理圖如圖2-2所示。圖2-2系統(tǒng)供電電路圖2-2中采用三端線性穩(wěn)壓器LM7805先將+12V的電源轉(zhuǎn)化成+5V,然后再用三端穩(wěn)壓器AMS1117把+5V轉(zhuǎn)化為+2.5V,利用C8051F340將+5V電壓轉(zhuǎn)化為+3.3V給系統(tǒng)其它部分供電。2.3.1.2復(fù)位電路在調(diào)試過程和實(shí)際應(yīng)用過程中隨時(shí)可能需要系統(tǒng)復(fù)位,以使程序可以重新運(yùn)行。因此設(shè)置按鍵復(fù)位電路是非常必要的。本設(shè)計(jì)利用RC電路的延遲特性給出復(fù)位需要的低電平時(shí)間。上電瞬間,電容C0兩端電壓不能突變,通過電阻R0進(jìn)行充電,充電時(shí)間由RC乘積值決定,一般要求大于5個(gè)外部時(shí)鐘周期,為防止復(fù)位不完全,參數(shù)可選大一些,本設(shè)計(jì)中采用0.1μF電容和10KΩ電阻,時(shí)間常數(shù)為1ms,滿足系統(tǒng)復(fù)位要求。圖2-3所示電路連接除可以完成上電復(fù)位外還可以完成手動(dòng)復(fù)位。當(dāng)按鈕閉合時(shí),電容C放電,使電容C上的電壓降為0,當(dāng)按鍵斷開時(shí),電容的充電過程與上電復(fù)位類似。從而實(shí)現(xiàn)手動(dòng)復(fù)位。圖2-3C8051F2.3.1.3JTAG電路在系統(tǒng)調(diào)試時(shí),需要一個(gè)C8051F340仿真器,把在計(jì)算機(jī)上編譯并生成的HEX下載到C8051F340中,實(shí)現(xiàn)在線調(diào)試C8051F340硬件和軟件。仿真器接口有兩端接口,其中一端與計(jì)算機(jī)的USB口相連,另一端與C8051F340的JTAG接口相連,這是一個(gè)10針的接口,其硬件連接如圖2-4所示。圖2-4C8051F2.3.1.4觸發(fā)源輸入電路如圖2-5所示,觸發(fā)源輸入電路是為外部觸發(fā)設(shè)計(jì)的。當(dāng)外部有一個(gè)低電平輸入時(shí),就會(huì)觸發(fā)警示系統(tǒng)。系統(tǒng)就會(huì)調(diào)用SD卡上的警示信息,將語音信息傳輸給VS1003解碼輸出人聲語音并通過音響播放,同時(shí)將TXT文件上的文字信息通過串口傳輸給外部顯示模塊進(jìn)行顯示。目前警示系統(tǒng)是以按鍵代替外部觸發(fā),但是實(shí)際使用時(shí)可以將按鍵改為外部觸發(fā),比如主動(dòng)紅外入侵探測(cè)器等設(shè)備。圖2-5外部觸發(fā)源輸入電路2.3.2MP3解碼電路MP3解碼電路包括時(shí)鐘電路,復(fù)位電路,與單片機(jī)通信的串行輸入電路,串行輸出電路,時(shí)鐘電路等。2.3.2.1時(shí)鐘電路MP3解碼芯片VS1003需要一個(gè)12.228MHZ的晶振作為VS1003的時(shí)鐘。VS1003利用內(nèi)部的PLL將12.228MHZ的時(shí)鐘倍頻到更高的頻率,以適應(yīng)不同碼率的音頻解碼的需求。圖2-7VS1003時(shí)鐘電路2.3.2.2復(fù)位電路由于VS1003是低電平復(fù)位,所以將復(fù)位端口電平下拉。使得復(fù)位更加快速和精確。圖2-8VS1003復(fù)位電路2.3.3字符通信電路本設(shè)計(jì)的主要利用以MAX3232作為核心,將字符信息通過串口發(fā)送給外部的顯示設(shè)備。由于TTL電平的特殊性必須將單片機(jī)輸出的電平通過MAX3232轉(zhuǎn)化為EIA電平,以用作串行通信。圖2-9字符通信電路2.3.4SD卡讀取電路如圖2-10所示,SD卡有兩種模式,一種是SD卡模式,另一種是SPI模式。本設(shè)計(jì)采用的是SPI模式。因?yàn)镃8051F340有硬件SPI,而且采用SPI速度更快,能解碼更高碼率的音頻文件。圖2-10SD卡電路2.3.5手持話筒模塊手持話筒模塊主要是將MIC頭轉(zhuǎn)換出來的電信號(hào)進(jìn)行前級(jí)放大。為了低功耗設(shè)計(jì),本論文設(shè)計(jì)了了按鍵,當(dāng)按鍵按下時(shí),系統(tǒng)供電工作。并且當(dāng)系統(tǒng)供電時(shí)三極管導(dǎo)通將A位置電平拉低,輸出一個(gè)低電平,控制功放工作如圖2-11。圖2-11手持話筒模塊電路2.3.6功放模塊功放模塊包括音頻功放模塊、模擬開關(guān)模塊、電源供電模塊和控制模塊。2.3.6.1音頻功放模塊音頻功放模塊主要以TDA7377為核心,TDA7377是一種新技術(shù)AB類車用無線電放大器可以在雙橋梁或四單端配置方式下工作,常用在汽車收音機(jī)上。本設(shè)計(jì)使用TDA7377是為了將警示喊話更加清楚,使系統(tǒng)更加實(shí)用。低功耗設(shè)計(jì)方面,本系統(tǒng)利用TDA7377的待機(jī)功能使功放模塊的功耗降到很低。只有在有音頻輸入時(shí)才激活系統(tǒng)如圖2-12。圖2-12音頻功放模塊電路2.3.6.2模擬開關(guān)模塊如圖2-13所示模擬開關(guān)模塊使用HCF4052作為主要器件。HCF4052雙4-通道模擬多路復(fù)用/分解器,其內(nèi)部相當(dāng)于一個(gè)單刀雙擲開關(guān)。HCF4052有兩個(gè)控制端,可以控制4組兩路切換。本設(shè)計(jì)只使用兩路切換故將B控制端接地。圖2-13模擬開關(guān)模塊電路2.3.6.3供電模塊供電模塊是用于整個(gè)功放模塊供電。使用一個(gè)6A10二極管,可以防止電源反接。6A10的反向工作電壓達(dá)到1000V,而電源電壓只有12V,所以6A10可以保證功放模塊的正常運(yùn)行。圖2-14供電模塊電路2.3.6.4控制模塊如圖2-15所示控制模塊采用74LS00與非門作為核心器件。當(dāng)MIC頭有輸出或者有MP3輸出時(shí),使輸出為高電平,控制TDA7377工作。圖2-15控制模塊電路2.4警示系統(tǒng)整體原理圖設(shè)計(jì)系統(tǒng)的原理圖采用AltiumDesignerSummer09軟件繪制,具體原理圖分別見附錄I。2.5警示系統(tǒng)整體PCB圖設(shè)計(jì)系統(tǒng)的原理圖均采用AltiumDesignerSummer09軟件繪制,具體原理圖分別見附錄II。第3章警示系統(tǒng)軟件設(shè)計(jì)硬件設(shè)計(jì)完成之后,需要編寫相應(yīng)的應(yīng)用程序,本章主要分基于znFAT文件系統(tǒng)的SD卡讀取和基于VS1003的MP3解碼兩部分分別進(jìn)行詳細(xì)介紹。3.1警示系統(tǒng)程序功能概述根據(jù)系統(tǒng)功能要求,系統(tǒng)的軟件設(shè)計(jì)可主要分為兩大模塊:基于znFAT文件系統(tǒng)的SD卡讀取和MP3解碼部分,具體功能描述如下。1、實(shí)現(xiàn)SD文件系統(tǒng)的基本功能,讀取和儲(chǔ)存,本設(shè)計(jì)主要用到讀取部分;2、實(shí)現(xiàn)基于SPI的MP3解碼;3、實(shí)現(xiàn)對(duì)繼電器開斷;4、實(shí)現(xiàn)對(duì)觸發(fā)源輸入的及時(shí)響應(yīng);3.2警示系統(tǒng)程序總體設(shè)計(jì)系統(tǒng)程序流程圖如圖3-1所示,程序結(jié)構(gòu)圖如3-2所示。主程序主要包括觸發(fā)源判斷,znFAT文件系統(tǒng),MP3解碼,觸發(fā)源判斷等3個(gè)主要部分。圖3-1系統(tǒng)程序流程圖圖3-2程序結(jié)構(gòu)圖3.3警示系統(tǒng)程序詳細(xì)設(shè)計(jì)3.3.1基于ZNFAT的SD卡文件系統(tǒng)3.3.1.1znFAT代碼結(jié)構(gòu)主體:znFAT的具體實(shí)現(xiàn)。znFAT.h是對(duì)相關(guān)數(shù)據(jù)結(jié)構(gòu)、宏的定義,以及對(duì)使用者可調(diào)用的功能函數(shù)的聲明。znFAT.c是對(duì)功能函數(shù)的具體實(shí)現(xiàn)。移植相關(guān):znFAT的移植相關(guān)文件。mytype.h中對(duì)類型進(jìn)行重定義。deviceio.c對(duì)存儲(chǔ)設(shè)備物理扇區(qū)讀寫驅(qū)動(dòng)進(jìn)行具體實(shí)現(xiàn)。config.h對(duì)znFAT進(jìn)行一些配置。其它頭文件:cc_macro.h是znFAT中的功能函數(shù)依賴關(guān)系的定義。gb2uni.h是znFAT中GB2312向UNICODE轉(zhuǎn)換的映射表。deviceio.h此文件向znFAT提供扇區(qū)讀寫驅(qū)動(dòng)接口函數(shù)的聲明。template.hznFAT中用于實(shí)現(xiàn)格式化功能的模板數(shù)據(jù)。圖3-3znFAT的代碼結(jié)構(gòu)3.3.1.2znFAT移植方法znFAT的移植其實(shí)非常簡(jiǎn)單,前提是已經(jīng)有了現(xiàn)成的,較為成熟穩(wěn)定的存儲(chǔ)設(shè)備扇區(qū)讀寫等驅(qū)動(dòng)函數(shù)。重新定義數(shù)據(jù)類型,如圖3-4所示。圖3-4重新定義數(shù)據(jù)類型根據(jù)硬件平臺(tái)實(shí)際的數(shù)據(jù)類型對(duì)mytype.h中的類型進(jìn)行重新定義,包括無符號(hào)整型、有符號(hào)整形與固化數(shù)據(jù)的ROM類型。通過deviceio.c將存儲(chǔ)設(shè)備驅(qū)動(dòng)函數(shù)與znFAT標(biāo)準(zhǔn)物理接口進(jìn)行接駁,包括存儲(chǔ)設(shè)備初始化、單扇區(qū)讀取、單扇區(qū)寫入[多扇區(qū)連續(xù)讀取與寫入,多扇區(qū)連續(xù)清0]。1、加入存儲(chǔ)設(shè)備驅(qū)動(dòng)頭文件,如圖3-5。圖3-5加入存儲(chǔ)設(shè)備驅(qū)動(dòng)頭文件2、將存儲(chǔ)設(shè)備初始化函數(shù)與znFAT_Device_Init函數(shù)接駁,如圖3-6。圖3-6將存儲(chǔ)設(shè)備初始化函數(shù)與znFAT_Device_Init函數(shù)接駁除了將實(shí)際存儲(chǔ)設(shè)備的初始化函數(shù)加入接口函數(shù)znFAT_Device_Init中,此函數(shù)中其它代碼請(qǐng)不要改動(dòng)(以下同理)。并且最好按函數(shù)中的格式來寫,在有多個(gè)存儲(chǔ)設(shè)備的情況下,可以方便地知道每一個(gè)存儲(chǔ)設(shè)備的初始化成功與否。將扇區(qū)讀取驅(qū)動(dòng)函數(shù)與znFAT_Device_Read_Sector函數(shù)進(jìn)行接駁,如圖3-7。圖3-7將扇區(qū)讀取驅(qū)動(dòng)函數(shù)與znFAT_Device_Read_Sector函數(shù)進(jìn)行接駁(4)將扇區(qū)寫入驅(qū)動(dòng)函數(shù)與znFAT_Device_Write_Sector函數(shù)進(jìn)行接駁,如圖3-8。圖3-8將扇區(qū)寫入驅(qū)動(dòng)函數(shù)與znFAT_Device_Write_Sector函數(shù)進(jìn)行接駁(5)將多扇區(qū)連續(xù)讀取驅(qū)動(dòng)函數(shù)與znFAT_Device_Read_nSector函數(shù)進(jìn)行接駁,如圖3-9。圖3-9將多扇區(qū)連續(xù)讀取驅(qū)動(dòng)函數(shù)與znFAT_Device_Read_nSector函數(shù)進(jìn)行接駁znFAT中的多扇區(qū)連續(xù)讀取驅(qū)動(dòng)接口函數(shù)采用了兩種實(shí)現(xiàn)方式,使用者可以通過修改config.h中的相應(yīng)宏選擇使用哪種實(shí)現(xiàn)方式。config.h中的宏如圖3-10。圖3-10多扇區(qū)連續(xù)讀取驅(qū)動(dòng)接口函數(shù)選擇如果這個(gè)宏被注釋,則采用單扇區(qū)讀取驅(qū)動(dòng)+循環(huán)的實(shí)現(xiàn)方式;否則,將采用硬件級(jí)的多扇區(qū)連續(xù)讀取驅(qū)動(dòng),此地,使用者必須提供存儲(chǔ)設(shè)備的多扇區(qū)連續(xù)讀取驅(qū)動(dòng)函數(shù)。(6)將多扇區(qū)連續(xù)寫入驅(qū)動(dòng)函數(shù)與znFAT_Device_Write_nSector函數(shù)進(jìn)行接駁(與V同理,config.h中對(duì)應(yīng)的宏為#defineUSE_MULTISEC_W)(7)將多扇區(qū)連續(xù)清零驅(qū)動(dòng)函數(shù)與znFAT_Device_Clear_nSector函數(shù)進(jìn)行接駁(與5與6同理,config.h中對(duì)應(yīng)的宏為#defineUSE_MULTISEC_CLEAR)以上就是znFAT的移植方法。通過此方法將znFAT文件系統(tǒng)移植到C8051F340上。自定義初始化和接口函數(shù)如下。sbitSD_SCL=P0^0;//SD卡同步時(shí)鐘輸入sbitSD_SI=P0^2;//SD卡同步數(shù)據(jù)輸入sbitSD_CS=P0^3;//SD卡片選 輸入sbitSD_SO=P0^1;//SD卡同步數(shù)據(jù)輸出#defineDELAY_TIME2000//SD卡的復(fù)位與初始化時(shí)SPI的延時(shí)參數(shù),根據(jù)實(shí)際速率修改其值,否則會(huì)造成SD卡復(fù)位或初始化失敗#defineTRY_TIME200//向SD卡寫入命令之后,讀取SD卡的回應(yīng)次數(shù),即讀TRY_TIME次,如果在TRY_TIME次中讀不到回應(yīng),產(chǎn)生超時(shí)錯(cuò)誤,命令寫入失敗//錯(cuò)誤碼定義//#defineINIT_CMD0_ERROR0x01//CMD0錯(cuò)誤#defineINIT_CMD1_ERROR0x02//CMD1錯(cuò)誤#defineWRITE_BLOCK_ERROR0x03//寫塊錯(cuò)誤#defineREAD_BLOCK_ERROR0x04//讀塊錯(cuò)誤////函數(shù)聲明unsignedcharSD_Reset();unsignedcharSD_Init();unsignedcharSD_Write_Sector(unsignedlongaddr,unsignedchar*buffer);unsignedcharSD_Read_Sector(unsignedlongaddr,unsignedchar*buffer);#endif3.3.2MP3解碼程序設(shè)計(jì)MP3解碼程序主要包括VS1003驅(qū)動(dòng)部分和SPI通信部分。VS1003驅(qū)動(dòng)部分,MCU初始化完成后,當(dāng)有觸發(fā)源輸入時(shí),清空VS1003緩存,調(diào)用語音文件。其中初始化函數(shù)包括端口初始化、時(shí)鐘初始化、中斷初始化。SPI通信部分,先SPI初始化,然后VS1003與單片機(jī)握手,建立連接。建立連接后,傳輸數(shù)據(jù),待數(shù)據(jù)傳輸完畢后,釋放連接。3.3.2.1VS1003驅(qū)動(dòng)程序VS1003的驅(qū)動(dòng)程序包括端口初始化,VS1003初始化,向VS1003寫字節(jié),從VS1003讀字節(jié),向VS1003發(fā)送音頻數(shù)據(jù),清空VS1003的數(shù)據(jù)緩存等。1、初始化(1)端口初始化sbitVS_XDCS=P2^1;//數(shù)據(jù)片選sbitVS_XCS=P2^2;//片選信號(hào)sbitVS_XRESET=P2^6;//復(fù)位信號(hào)sbitVS_DREQ=P2^0;//數(shù)據(jù)請(qǐng)求(2)VS1003初始化VS_XRESET=1;delay(100);VS_XRESET=0;delay(100);VS_XRESET=1;//硬件復(fù)位,XRESET低電平有效delay(100);VS_Write_Reg(0x00,0x08,0x04);//軟件復(fù)位,向0號(hào)寄存器寫入0x0804SM_SDINEW為1SM_RESET為1VS_Write_Reg(0x03,0x98,0x00);//時(shí)鐘設(shè)置,向3號(hào)寄存器寫入0x9800SC_MULT為4SC_ADD為3SC_FREQ為0VS_Write_Reg(0x0b,0x00,0x00);//音量設(shè)置,左右聲道均最大音量VS_XDCS=0; //打開數(shù)據(jù)片選,注意此時(shí)XCS(片選)為高電平,SDI有效SPI_WriteByte(0);//寫入數(shù)據(jù),這里寫入4個(gè)0,是無關(guān)數(shù)據(jù),用來啟動(dòng)數(shù)據(jù)傳輸SPI_WriteByte(0);SPI_WriteByte(0);SPI_WriteByte(0);VS_XDCS=1; //關(guān)閉數(shù)據(jù)片選,SDI無效2、其他驅(qū)動(dòng)voidVS_Write_Reg(unsignedcharaddr,unsignedcharhdat,unsignedcharldat);//向VS1003的功能寄存器寫入一個(gè)字unsignedintVS_Read_Reg(unsignedcharaddr);//從VS1003的功能寄存器讀取一個(gè)字voidVS_Send_Dat(unsignedchardat);//向VS1003發(fā)送音頻數(shù)據(jù)voidVS_Flush_Buffer();//清空VS1003的數(shù)據(jù)緩沖區(qū)voidVS_sin_test(unsignedcharx);//正弦測(cè)試3.3.3.2SPI通信程序SPI通信程序流程圖如圖3-10所示。圖3-11SPI通信流程圖1、初始化初始化包括端口初始化、中斷初始化、SPI初始化、UART初始化、參考電平初始化等。具體初始化過程如下。(1)端口初始化配置P0.0、P0.1、P0.2、P0.3為SPI總線端口。其中P0.0為SCK,數(shù)字輸入,開漏輸出;P0.1為MISO,數(shù)字輸入,上拉輸出;P0.2為MOSI,數(shù)字輸入,開漏輸出;P0.3為NSS,數(shù)字輸入,開漏輸出。配置P0.4、P0.5為UART1端口。其中P0.4為TX1,數(shù)字輸入,上拉輸出;P0.5為RX1,數(shù)字輸入,開漏輸出。(2)中斷初始化IE=0xC0; //開總中斷及SPI中斷EIE2=0x02; //置位ART1中斷允許位(3)SPI初始化SPI0CN=0x05; //設(shè)四線從方式,且使能SPISPI0CKR=0x17; //設(shè)置SPI0的時(shí)鐘頻率為1M(4)UART初始化SBRLL1=0x1E; //UART波特率發(fā)生器低字節(jié)SBRLH1=0xF6; //UART波特率發(fā)生器高字節(jié)SCON1=0x10;SBCON1=0x43; //波特率發(fā)生器使能,預(yù)分頻1(5)定時(shí)器初始化TCON=0x40;//定時(shí)器1使能TMOD=0x20;//使用方式2,8位自動(dòng)重裝載的定時(shí)器CKCON=0x02;//時(shí)鐘預(yù)置分頻2TH1=0x98;//定時(shí)器1高字節(jié)初始化3.3.4觸發(fā)源判斷程序do{ if(!IO_IN1)//判斷觸發(fā)源一是否有輸入 {Delay_ms(200)//延時(shí)200ms if(!IO_IN1)//再次判斷觸發(fā)源是否有輸入 { JDQ1=1;//繼電器吸合 strcpy((void*)mp3_name,"\\Y0000000.mp3");//調(diào)用Y0000000.MP3 strcpy((void*)char_name,"\\C0000000.txt");//調(diào)用C00000000.txt MP3_Play();//MP3播放 Char_Display();//將文字發(fā)送到LCD屏播放 } } elseif(!IO_IN2)//判斷觸發(fā)源二是否有輸入 { Delay_ms(200)//延時(shí)200ms elseif(!IO_IN2)//再次判斷觸發(fā)源是否有輸入 { JDQ2=1;//繼電器二吸合 strcpy((void*)mp3_name,"\\Y0000001.mp3");/調(diào)用Y0000000.MP3 strcpy((void*)char_name,"\\C0000001.txt");//調(diào)用C00000000.txt MP3_Play();//MP3播放 Char_Display();//將文字發(fā)送到LCD屏播放} }}while(1);}3.4警示系統(tǒng)程序代碼系統(tǒng)程序代碼在KeiluVision4環(huán)境下編寫,具體程序代碼分別見附錄Ⅲ。第4章調(diào)試與分析在完成硬件和軟件的設(shè)計(jì)之后,本章著重講述的是如何調(diào)試,并對(duì)調(diào)試的結(jié)果進(jìn)行了詳細(xì)的記錄和分析。4.1調(diào)試目的調(diào)試的目的是驗(yàn)證系統(tǒng)各部分功能,具體如下。1、驗(yàn)證觸發(fā)源觸發(fā)效果;2、驗(yàn)證SD卡讀??;3、驗(yàn)證語音播放;4、驗(yàn)證繼電器的啟動(dòng);5、驗(yàn)證串口通信;6、驗(yàn)證警示系統(tǒng)。4.2調(diào)試方案1、將按鍵按下,用示波器或者萬用表測(cè)試端口電平。2、在操作SD卡時(shí),在SD卡掛載成功口加串口打印函數(shù),將掛載成功和SD卡讀取成功通過串口顯示出來,并將讀取的SD卡信息通過串口發(fā)送出來在串口助手上顯示。3、當(dāng)SD卡掛載和讀取成功過后,將MP3語音文件通過電腦復(fù)制到SD卡。然后通過調(diào)用MP3語音文件,通過SPI發(fā)送給VS1003播放,聽音響是否有聲音傳出。4、當(dāng)觸發(fā)源輸入是低電平時(shí),觀察繼電器是否吸合。吸合時(shí)有吸合聲,并伴隨LED小燈亮。5、在SD卡掛載和讀取都成功過后,將TXT文本文檔復(fù)制到SD卡中。通過調(diào)用SD卡上的文本文件,通過串口發(fā)送給電腦,在串口助手上顯示。6、在上述步驟都已完成的情況下,連接外部顯示LCD屏和音響。通過觸發(fā)按鍵,觀察LCD的顯示和語音的播放。4.3調(diào)試結(jié)果4.3.1觸發(fā)源測(cè)試在硬件連接好后,系統(tǒng)上電,用示波器測(cè)試觸發(fā)效果。結(jié)果顯示觸發(fā)正常迅速。結(jié)果如圖4-1所示。圖4-1觸發(fā)源輸入測(cè)試4.3.2SD卡讀取調(diào)試將程序燒錄到單片機(jī)中,利用串口將SD卡掛載成功的信息傳到電腦上。原理是在每次操作SD卡時(shí),調(diào)用一次調(diào)試程序?qū)D消息(SD卡讀取OK和SD卡掛載OK)通過串口傳出,如圖4-2所示。圖4-2SD卡讀取測(cè)試4.3.3語音播放測(cè)試將音響接線連接到系統(tǒng)的音頻接口,再給系統(tǒng)上電。最后在觸發(fā)源輸入低電平,聽音響發(fā)出語音。結(jié)果是音響正常發(fā)出語音如圖4-3。圖4-3語音測(cè)試用的號(hào)角喇叭4.3.4繼電器啟動(dòng)測(cè)試硬件連接好后,運(yùn)行程序,觸發(fā)源輸入低電平,觀察繼電器是否吸合,小燈是否亮起。結(jié)果是有繼電器吸合聲,小燈亮起,表明繼電器正常啟動(dòng)如圖4-4。圖4-4繼電器啟動(dòng)測(cè)試4.3.5串口通信測(cè)試硬件連接好后,運(yùn)行程序,打開窗口助手,接受數(shù)據(jù)。觀察數(shù)據(jù)是否為SD卡上所存儲(chǔ)的數(shù)據(jù)。測(cè)試結(jié)果正常,如圖4-5所示,收到字符內(nèi)碼數(shù)據(jù)(A3B1BAC5C9DACEBBB1A8B8E6B1A9D3FCA1A1A1A1A圖4-5串口通信4.3.6整體功能測(cè)試硬件連接好后,將外部的音響和LED顯示屏都接到系統(tǒng)上。上電,運(yùn)行程序。觸發(fā)源輸入低電平。觀察外部顯示屏是否有信息顯示,音響是否有語音警示。測(cè)試結(jié)果正常,系統(tǒng)運(yùn)行正常。運(yùn)行情況如圖4-6,4-7,4-8和4-9所示。圖4-6系統(tǒng)整體展示之一圖4-7系統(tǒng)整體展示之二圖4-8系統(tǒng)整體展示之三圖4-9系統(tǒng)整體展示之四4.4調(diào)試問題與分析在系統(tǒng)的調(diào)試過程中,產(chǎn)生了許許多多的問題。下面就對(duì)這些問題進(jìn)行分析,以及給出相應(yīng)的解決方法。1、觸發(fā)源誤觸發(fā)有可能是硬件的原因,也有可能是軟件的原因,由于硬件是系統(tǒng)的基礎(chǔ),就先對(duì)硬件進(jìn)行了檢查。為避免誤觸發(fā),在硬件上進(jìn)行了改進(jìn)。在測(cè)試過程中,發(fā)現(xiàn)對(duì)單片機(jī)端口進(jìn)行上拉后,誤觸發(fā)明顯減少。由于觸發(fā)源沒有硬件濾波,系統(tǒng)電平波動(dòng)也有可能造成誤觸發(fā)。鑒于上述情況,對(duì)軟件進(jìn)行了改進(jìn)。在觸發(fā)源判斷中加延時(shí),加2次判斷。經(jīng)測(cè)試誤觸發(fā)基本可以避免。結(jié)論:為了避免單片機(jī)端口的誤輸入,一定要加硬件濾波或者軟件濾波。更加保險(xiǎn)的辦法是將端口上拉或者下拉,使得輸入更加準(zhǔn)確。2、SPI通信未能成功再次檢查硬件線路連接和程序代碼無誤后,初步判斷是單片機(jī)被燒掉。在一塊好的單片機(jī)上編寫測(cè)試程序,分別給目標(biāo)最小系統(tǒng)的每個(gè)I/O口置高和置低,然后單步運(yùn)行程序,用萬用表測(cè)量目標(biāo)系統(tǒng)板的每個(gè)I/O口,發(fā)現(xiàn)一切正常。最后,在程序中的從機(jī)片選信號(hào)有效后設(shè)個(gè)斷點(diǎn),運(yùn)行程序至斷點(diǎn),再用萬用表測(cè)相應(yīng)引腳電平,發(fā)現(xiàn)依然是高電平(而實(shí)際應(yīng)該是低電平),找到問題所在,再檢查程序中的I/O端口配置,發(fā)現(xiàn)輸出口未配置成上拉而配成了開漏,修改配置后SPI通信就正常了。結(jié)論:C8051F340的I/O輸入要配置為開漏,輸出要配置為上拉(若不接上拉電阻的情況下),此外,以后檢查程序時(shí)不能忘了檢查初始化配置。3、串口通信不成功在測(cè)試時(shí)由于沒有將串口的接地引腳共地,而是將串口兩端的接地引腳分別接地。造成串口無法正常發(fā)送數(shù)據(jù)。通過檢查發(fā)現(xiàn)就算是同一個(gè)供電源也要將串口的接地引腳接到一起共地。結(jié)論:串口通信接地引腳必須共地,不然無法正常通信。第5章結(jié)論與展望最后本章對(duì)本設(shè)計(jì)進(jìn)行總結(jié),并提出相應(yīng)的不足之處與改進(jìn)方法。5.1結(jié)論在硬件設(shè)計(jì)上,本設(shè)計(jì)完成了SD卡讀取模塊、C8051F340最小系統(tǒng)、串口通信模塊、MP3解碼模塊等設(shè)計(jì)。在軟件上,實(shí)現(xiàn)了基于znFAT文件系統(tǒng)、基于VS1003的MP3解碼、串口字符通信等功能??傊驹O(shè)計(jì)基本完成了系統(tǒng)設(shè)計(jì)的要求。在這次畢業(yè)設(shè)計(jì)過程中,我對(duì)基于SD卡的文件系統(tǒng)、C8051系列的增強(qiáng)型單片機(jī)、SPI總線通信、MP3語音播放有了更深刻的認(rèn)識(shí),同時(shí)也學(xué)到了許多書本上學(xué)不到的東西,這不僅加強(qiáng)了我的動(dòng)手能力,而且也增強(qiáng)了發(fā)現(xiàn)問題、分析問題、解決問題的能力。為期一個(gè)半月的畢業(yè)設(shè)計(jì),使我對(duì)新事物的了解,學(xué)習(xí)及應(yīng)用能力都有了明顯的提高。通過這次畢業(yè)設(shè)計(jì),我不但開闊了視野,而且對(duì)書上的理論知識(shí)有了更加深層次的理解??傊@次畢業(yè)設(shè)計(jì)實(shí)踐使我受益良多,認(rèn)識(shí)到自己有很多不足之處:基礎(chǔ)還不夠扎實(shí),運(yùn)用知識(shí)的能力還不強(qiáng),考慮問題不夠到位等等。所以在以后的學(xué)習(xí)當(dāng)中,我還需要更加努力地充實(shí)自己,不斷提高本身的理論素養(yǎng)和實(shí)踐動(dòng)手能力。5.2展望整個(gè)系統(tǒng)的設(shè)計(jì)基本完成了它的功能,但由于它還存在很多不足之處,所以,這里列舉了一些改進(jìn)的方法,使系統(tǒng)的功能更加趨于完善,并能使系統(tǒng)更有實(shí)用價(jià)值。1、可以將以太網(wǎng)通信加上,使得系統(tǒng)具有遠(yuǎn)程的警示和控制功能。2、可以將各種傳感器模塊加上,使得系統(tǒng)的應(yīng)用范圍更加廣泛。3、本設(shè)計(jì)還可以加上攝像機(jī),通過以太網(wǎng)傳輸數(shù)據(jù),將圖像信息傳到中心機(jī)房,可以使系統(tǒng)的預(yù)警功能更加強(qiáng)大。4、可以將警示或報(bào)警信息通過個(gè)分機(jī)之間的通信傳到中心機(jī)房,還可以將信息存儲(chǔ)到SD卡或分機(jī)中,以便以后提取證據(jù)或者分析數(shù)據(jù)。參考文獻(xiàn)[1]李顯軍.道口報(bào)警系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J],北京:鐵路技術(shù)創(chuàng)新,2004,3:5-6.[2]李玲桂.國外平交道口的安全措施[J],北京:鐵道知識(shí),2005,2:22-23.[3]王夢(mèng)琛.站內(nèi)道口微機(jī)自動(dòng)通知系統(tǒng)的研究與實(shí)現(xiàn)[J],北京:鐵道運(yùn)輸與經(jīng)濟(jì)1997,3:30-32.[4]A.Mirabadi,N.Mort,F.Schmid,ApplicationofSensorFusiontoRailwaySystem,Proceedingsofthe1996IEEE/SICE/RSJInternationalConferenceofMultisensorFusionandIntegrationforIntelligentSystem,1996:1-6.[5]邊春元等編著.單片機(jī)應(yīng)用開發(fā)實(shí)用子程序[M].人民郵電出版社.2005:10-198.[6]張毅坤等編著.單片微型計(jì)算機(jī)原理及應(yīng)用[M].西安電子科技大學(xué)出版社.1997:1-80.[7]高吉祥主編.全國大學(xué)生電子設(shè)計(jì)大賽培訓(xùn)系列教程[M].電子工業(yè)社.2007:1-60.[8]康華光,陳大欽,張林.電子技術(shù)基礎(chǔ)[M].高等教育出版社.2006.1:1-80.[9]張鐵壁,張學(xué)軍.無人值守火車道口報(bào)警系統(tǒng)的設(shè)計(jì)[J],河北:信息化技術(shù)與控制.2009:1-3.[10]邊春元等編著.單片機(jī)應(yīng)用開發(fā)實(shí)用子程序[M].人民郵電出版社.2005:1-58.[11]孟慧霞,呂書勇.基于ARM的SD卡文件系統(tǒng)設(shè)計(jì)[J],河南:通信技術(shù).2009:1-5.[12]C8051F34xDataManual[M].SiliconLaboratories.[13]徐向民.AltiumDesigner快速入門[M].北京:北京航空航天大學(xué)出社,2011:1-244.[14]VS1003DataSheet[M].VLSIsolution.[15]童長飛.C8051F系列單片機(jī)開發(fā)與C語言編程[M].北京:北京航空航天大學(xué)出版社,2005:1-310.[16]MAX3232DataSheet[M].TexasInstruments.[17]AMS1117DataSheet[M].AdvancedMonolithicSystems.[18]李文華,徐國洪,胡華文[J].基于FAT32文件系統(tǒng)的SD卡數(shù)據(jù)儲(chǔ)存結(jié)構(gòu)研究,湖北:長江大學(xué)學(xué)報(bào).2012:1-4.[19]田茂,鮮于李可,潘永才.SPI模式下SD卡驅(qū)動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)[J],湖北:現(xiàn)代電子技術(shù).2009:1-3.[20]張勇.C/C++語言硬件程序設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2005:205-229.致謝經(jīng)過近一個(gè)多月的努力學(xué)習(xí)和工作,畢業(yè)論文終于順利完成。在本論文完成之際,我首先要感謝的是我的指導(dǎo)老師衛(wèi)建華老師。從論文的選題到課題的研究設(shè)計(jì),最后到論文的完成,每一步都得到了衛(wèi)老師的悉心指導(dǎo)和幫助,特別是在系統(tǒng)調(diào)試過程中?;仡欉@段時(shí)間的畢業(yè)設(shè)計(jì),我從他的身上不僅學(xué)到了我應(yīng)該掌握的專業(yè)技能,更重要的是學(xué)到了進(jìn)行科研探索的方法。他淵博的知識(shí)、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和熱忱待人的品格都使我受益匪淺,在此謹(jǐn)向衛(wèi)老師表示由衷的感謝。同時(shí)還要感謝西安工程大學(xué)通信教研室的全體老師、同學(xué),是他們創(chuàng)造了良好的工作和學(xué)習(xí)氛圍。在論文工作過程中給予了極大的支持。最后,向所有關(guān)心和幫助過我的人們表示感謝。附錄Ⅰ警示系統(tǒng)原理圖附錄Ⅱ警示系統(tǒng)PCB圖附錄Ⅲ警示系統(tǒng)部分程序代碼main.c程序代碼如下。voidmain(){ PCA0MD&=~0x40;//看門狗失效Init_Device();//C8051F340處理器初始化znFAT_Device_Init();//存儲(chǔ)設(shè)備初始化pArg=&Init_Arg_SDCARD; //指針指向SD卡文件系統(tǒng)參數(shù)集合,znFAT將從這個(gè)集合中獲取參數(shù)Dev_No=SDCARD;//設(shè)備號(hào)為SDCARD,znFAT依照此設(shè)備號(hào)選擇存儲(chǔ)設(shè)備驅(qū)動(dòng) Delayms(20);znFAT_Init(); //文件系統(tǒng)初始化Delayms(20); QIEHUAN=0; YJKD_flag=0; VS_Reset();//VS1003復(fù)位初始化do{ if(!IO_IN1) { JDQ1=1; strcpy((void*)mp3_name,"\\Y0000000.mp3"); strcpy((void*)char_name,"\\C0000000.txt"); MP3_Play(); Char_Display(); } elseif(!IO_IN2) { JDQ2=1; strcpy((void*)mp3_name,"\\Y0000001.mp3"); strcpy((void*)char_name,"\\C0000001.txt"); MP3_Play(); Char_Display(); } }while(1);}znFAT.c程序代碼如下。#include"znfat.h"#include"sd.h"http://存儲(chǔ)設(shè)備的扇區(qū)讀寫驅(qū)動(dòng),這里是SD卡//#include"ch375.h" //存儲(chǔ)設(shè)備的扇區(qū)讀寫驅(qū)動(dòng),這里是U盤//#include"cf.h"#include"string.h"externunsignedcharSTOP_FLAG;/***************************************************************************************************************///全局變量定義structdirentrytemp_rec;INT8temp_dir_name[13];UINT32temp_dir_cluster;UINT32temp_last_cluster;UINT8znFAT_Buffer[512];//扇區(qū)數(shù)據(jù)讀寫緩沖區(qū),由外部提供/******************************************************************-功能描述:znFAT的存儲(chǔ)設(shè)備初始化函數(shù)-隸屬模塊:znFAT文件系統(tǒng)模塊-函數(shù)屬性:外部(用于對(duì)存儲(chǔ)設(shè)備進(jìn)行初始化)-參數(shù)說明:無-返回說明:無-注:在調(diào)znFAT其它函數(shù)之前,必須先對(duì)存儲(chǔ)設(shè)備進(jìn)行成功的初始化。******************************************************************/voidznFAT_Device_Init(){SD_Reset();SD_Init();}/**************************************************************************-功能描述:獲取剩余容量-隸屬模塊:znFAT文件系統(tǒng)模塊-函數(shù)屬性:外部,使用戶使用-參數(shù)說明:無-返回說明:剩余容量,單位字節(jié)-注:從FSInfo中讀取空閑簇?cái)?shù),而從計(jì)算得到剩余的容量,單位字節(jié)***********************************************************************/#ifdefznFAT_GET_REMAIN_CAPUINT32znFAT_Get_Remain_Cap(void){znFAT_ReadSector(1+pArg->BPB_Sector_No,znFAT_Buffer);if(((structFSInfo*)znFAT_Buffer)->Free_Cluster[0]==0xff&&((structFSInfo*)znFAT_Buffer)->Free_Cluster[1]==0xff&&((structFSInfo*)znFAT_Buffer)->Free_Cluster[2]==0xff&&((structFSInfo*)znFAT_Buffer)->Free_Cluster[3]==0xff)returnpArg->Total_Size;elsereturnLE2BE(((structFSInfo*)znFAT_Buffer)->Free_Cluster,4)*pArg->SectorsPerClust*pArg->BytesPerSector;}#endif-功能描述:從文件某一位置讀取一定長度的數(shù)據(jù),由pfun所指向的函數(shù)來處理-隸屬模塊:znFAT文件系統(tǒng)模塊-函數(shù)屬性:外部,使用戶使用-參數(shù)說明:pfi:FileInfoStruct類型的結(jié)構(gòu)體指針,用于裝載文件參數(shù)信息,文件讀取的過程中,此結(jié)構(gòu)體中的相關(guān)參數(shù)會(huì)更新,比如文件的當(dāng)前偏移量、文件的當(dāng)前扇區(qū),文件的當(dāng)前簇等等offset:要定位的偏移量,要小于文件的大小len:要讀取的數(shù)據(jù)的長度,如果len+offset大于文件的大小,則實(shí)際讀取的數(shù)據(jù)量是從offset開始到文件結(jié)束pfun:對(duì)讀取的數(shù)據(jù)的處理函數(shù),pfun指向處理函數(shù),這樣可以靈活的配置數(shù)據(jù)如何去處理,比如是放在緩沖區(qū)中,還是把數(shù)據(jù)通過串口發(fā)送出去,只需要pfun去指向相應(yīng)的處理函數(shù)可以了-返回說明:讀取到的實(shí)際的數(shù)據(jù)長度,如果讀取失敗,比如指定的偏移量大于了文件大小,則返回0-注:在讀取一個(gè)文件的數(shù)據(jù)前,必須先將該文件用znFAT_Open_File打開**************************************************************************/#ifdefZNFAT_READ_FILEXUINT32znFAT_Read_FileX(structFileInfoStruct*pfi,UINT32offset,UINT32len,void(*pfun)(UINT8)){ UINT32i,j,k,temp; UINT32counter=0; if(offset<pfi->FileSize) { if(offset+len>pfi->FileSize)len=pfi->FileSize-offset; znFAT_Seek_File(pfi,offset); znFAT_ReadSector(pfi->FileCurSector,znFAT_Buffer); for(i=pfi->FileCurPos;i<pArg->BytesPerSector;i++) { if(counter>=len) { returnlen; } (*pfun)(znFAT_Buffer[i]); counter++; pfi->FileCurPos++; pfi->FileCurOffset++; } if(pfi->FileCurSector-(SOC(pfi->FileCurCluster))!=(pArg->SectorsPerClust-1)) { for(j=pfi->FileCurSector+1;j<(SOC(pfi->FileCurCluster))+pArg->SectorsPerClust;j++) { znFAT_ReadSector(j,znFAT_Buffer); pfi->FileCurSector=j; for(i=0;i<pArg->BytesPerSector;i++) { if(counter>=len) { returnlen; } (*pfun)(znFAT_Buffer[i]); counter++; pfi->FileCurPos++; pfi->FileCurOffset++; } } } temp=(len-counter)/(pArg->BytesPerSector*pArg->SectorsPerClust); for(k=0;k<temp;k++) { pfi->FileCurCluster=znFAT_GetNextCluster(pfi->FileCurCluster); for(j=(SOC(pfi->FileCurCluster));j<(SOC(pfi->FileCurCluster))+pArg->SectorsPerClust;j++) { znFAT_ReadSector(j,znFAT_Buffer); pfi->FileCurSector=j; for(i=0;i<pArg->BytesPerSector;i++) { if(counter>=len) { returnlen; } (*pfun)(znFAT_Buffer[i]); counter++; pfi->FileCurOffset++; pfi->FileCurPos++; pfi->FileCurPos%=pArg->BytesPerSector; } } } pfi->FileCurCluster=znFAT_GetNextCluster(pfi->FileCurCluster); temp=(SOC(pfi->FileCurCluster))+((len-counter)/pArg->BytesPerSector); pfi->FileCurSector=(SOC(pfi->FileCurCluster)); for(j=(SOC(pfi->FileCurCluster));j<temp;j++) { znFAT_ReadSector(j,znFAT_Buffer); pfi->FileCurSector=j; for(i=0;i<pArg->BytesPerSector;i++) { if(counter>=len) { returnlen; } (*pfun)(znFAT_Buffer[i]); counter++; pfi->FileCurPos++; pfi->FileCurPos%=pArg->BytesPerSector; pfi->FileCurOffset++; } } pfi->FileCurSector=j; znFAT_ReadSector(pfi->FileCurSector,znFAT_Buffer); temp=len-counter; for(i=0;i<temp;i++) { if(counter>=len) { returnlen; } (*pfun)(znFAT_Buffer[i]); counter++; pfi->FileCurPos++; pfi->FileCurPos%=pArg->BytesPerSector; pfi->FileCurOffset++; } } else { len=0; } returnlen;}#endif-功能描述:文件重命名-隸屬模塊:znFAT文件系統(tǒng)模塊-函數(shù)屬性:外部,使用戶使用-參數(shù)說明:filename:將要重命名的源文件的路徑如\a.txtnewfilename:目標(biāo)文件名如b.txt(注目標(biāo)文件名是單純的文件名,不含路徑)-返回說明:1:源文件打開打敗0:成功-注:無**************************************************************************/#ifdefZNFAT_RENAME_FILEUINT8znFAT_Rename_File(CONSTINT8*filename,CONSTINT8*newfilename){structFileInfoStructfi;UINT8i=0,j=0;if(znFAT_Open_File(&fi,filename,0,1))return1;//文件打開失敗znFAT_ReadSector(fi.Rec_Sec,znFAT_Buffer);for(i=0;i<11;i++)(znFAT_Buffer+fi.nRec)[i]=0x20;i=0;while(newfilename[i]!='.'){(znFAT_Buffer+fi.nRec)[i]=L2U(newfilename[i]);i++;}i++;while(newfilename[i]){(znFAT_Buffer+fi.nRec+8)[j]=L2U(newfilename[i]);i++;j++;}znFAT_WriteSector(fi.Rec_Sec,znFAT_Buffer);return0;}#endif/**************************************************************************-功能描述:文件關(guān)閉-隸屬模塊:znFAT文件系統(tǒng)模塊-函數(shù)屬性:外部,使用戶使用-參數(shù)說明:pfi:指向當(dāng)前打開的文件的文件信息結(jié)構(gòu)-返回說明:0:成功-注:無**************************************************************************/#ifdefZNFAT_FILE_CLOSEUINT8znFAT_File_Close(structFileInfoStruct*pfi){UINT16i=0; for(i=0;i<sizeof(structFileInfoStruct);i++){((UINT8*)p

溫馨提示

  • 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)論