版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 公交報站器設(shè)計</b></p><p> 【摘要】系統(tǒng)硬件以AT89C51單片機作為控制中心,結(jié)合isd1700語音芯片的多段語音錄放功能和LCD1602液晶顯示模塊,采用SPI模式,單片機主要通過四線(SCLK,MOSI,MISO,/SS)SPI協(xié)議對ISD1700進行串行通信,從而實現(xiàn)錄音,放音,擦除等操作。通過手動鍵盤,識別語音播放地址,驅(qū)動語音播放站名
2、并控制LCD1602顯示站名。該公交車報站器結(jié)構(gòu)簡單,使用靈活,功能穩(wěn)定,音質(zhì)自然、清晰,無論對于社會或者科研也有一定的價值。</p><p> 【關(guān)鍵字】51單片機,isd1700,公交報站器</p><p><b> 1.概述</b></p><p> 1.1 課題研究的背景及意義</p><p> 隨著我國
3、城市建設(shè)的發(fā)展,對城市服務(wù)行業(yè)的服務(wù)質(zhì)量要求也越來越高。在私家車越來越多的今天,公交車仍然是人們出行的首選,因為公交車具有方便、快捷、車票便宜等優(yōu)點。公共汽車為外出的人們提供了方便快捷的服務(wù),而公共汽車的報站直接影響服務(wù)的質(zhì)量。公交車服務(wù)質(zhì)量它代表了一個城市交通發(fā)展的水平。隨著我國各大城市公交公司的人員精減,目前各公交公司都在每輛公交車上只配備了一個司機,進行無人售票。這在相當(dāng)大的程度上免除了乘務(wù)人員沿途報站的麻煩,給許多不熟悉公交線路
4、的乘客帶來了方便。隨著電子技術(shù)的不斷發(fā)展,單片機技術(shù)的日益成熟,和多媒體技術(shù)的普遍應(yīng)用,使得公交車語音報站器服務(wù)更加完善。本系統(tǒng)就是把單片機技術(shù)應(yīng)用到公交車語音報站器上,方便乘客,使乘客在移動客車?yán)锔惺艿娇萍紟淼臉啡ぃ构卉嚨墓芾矸奖?、快捷、效率高[10]。</p><p> 1.2 報站器的動態(tài)發(fā)展趨勢 隨著科學(xué)技術(shù)的日益發(fā)展和進步,公共汽車行駛在現(xiàn)代文明程度高的市區(qū),醒目和減少乘務(wù)人員勞動強度的電子
5、報站器,電子顯示路牌,無人售票裝置,前后電視監(jiān)視系統(tǒng)等新技術(shù)的采用也將越來越普及。GPS(Global Positioning System)全球定位系統(tǒng)在各種行業(yè),特別是車輛監(jiān)控與全球定位系統(tǒng)中有廣泛的應(yīng)用。 </p><p> 公交車報站器直接影響到公交車的服務(wù)質(zhì)量,在公交事業(yè)中占有舉足輕重的地位。目前公交報站有三種方式,一種是利用GPS全球衛(wèi)星定位系統(tǒng)的公交車報站系統(tǒng),目前美國部分城市投入使用,國內(nèi)也有此
6、類產(chǎn)品的研制開發(fā),其功能強大,系統(tǒng)穩(wěn)定,但其投資昂貴,尤其是一些中小城市無法承受。目前我國部分城市采用手動電子報站和人工報站的方式,而它們都離不開司務(wù)人員,加大司乘人員的工作強度。手動電子報站一般由司機或者乘務(wù)員控制,經(jīng)常出現(xiàn)錯報,誤報的情況,城市公共交通是市民出行的主要交通工具之一。提供舒適,安全、便捷的乘車環(huán)境,對于公交企業(yè)來說,不僅是應(yīng)盡的責(zé)任,亦是不斷追求的目標(biāo)[9]。</p><p> 1.3 設(shè)計的
7、主要目標(biāo)任務(wù)</p><p> 本課題要求設(shè)計一公交車自動報站系統(tǒng),以實現(xiàn)公交車的語音自動報站,即在進站、出站時候自動播報語音提示信息及服務(wù)用語。本設(shè)計要求利用 AT89C51 作為主控芯片完成主控電路的設(shè)計,輔助電路要求包括電源電路,錄音電路,放音電路,液晶顯示電路。單片機通過程序的設(shè)計,可以通過按鍵控制語音芯片和液晶顯示,例如:按下rec按鍵實現(xiàn)語音的錄制,play按鍵實現(xiàn)錄音的播放,Erase按鍵實現(xiàn)擦除
8、,FWD1實現(xiàn)快進控制,VOL1實現(xiàn)音量控制,FT1實現(xiàn)模式的控制等等。 </p><p><b> 1.4方案的選擇</b></p><p> 公交車自動報站系統(tǒng)的設(shè)計主要是進站、出站自動播報站名及服務(wù)用語,準(zhǔn)確、及時。公交車站自動報站器的設(shè)計,以 AT89C51 為主控芯片,對外來脈沖計數(shù),結(jié)合語音芯片 ISD1700 輸出語音,LCD1602顯示站名。
9、使用 AT89C51 作為主控制芯片,通過控制報站時刻,完全無需人工介入,選用的語音芯片是美國ISD 公司的ISD1700,該芯片與其它語音芯片相比較,其語音音質(zhì)好,錄放時間長。</p><p> CPU控制:當(dāng)?shù)秸緯r就輸出信號控制語言芯片進行報站。</p><p> 控制按鍵:用于手動控制、手動調(diào)整</p><p> 語言芯片:由專用語音芯片ISD1700
10、組成,可擦寫,便于在不同公交線上使用。</p><p> 液晶顯示:LCD1602外圍電路配置簡單,價格便宜,具有很高的性價比。</p><p> 1.5 設(shè)計總體思路</p><p> 公交車報站器系統(tǒng)主要由8個部分組成,即單片機模塊、語音芯片、錄音電路以及放音電路,電源模塊,振蕩電路,復(fù)位電路,液晶顯示電路。單片機用于控制語音芯片進行放音和錄音,電源用于提
11、供單片機和語音芯片的工作電壓。振蕩電路提供給單片機工作所需的時鐘信號。如圖1-1</p><p> 圖1-1 系統(tǒng)設(shè)計思路</p><p><b> 2.硬件的選取</b></p><p> 2.1 51單片機模塊</p><p> 本設(shè)計選用雙列直插的AT89C51芯片,它提供以下標(biāo)準(zhǔn)功能:4K字節(jié)FLASH閃
12、速存儲器,128字節(jié)內(nèi)部RAM,32個I/O口線,兩個16位定時/計數(shù)器,一個5向量兩級中斷結(jié)構(gòu),一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。最顯著的特點是內(nèi)部含有 Flash 存儲器。AT89C51單片機主要接口有:微處理器與擴展器件的接口;微處理器與鍵盤、顯示模塊的接口;微處理器與輸出幅值調(diào)節(jié)電路的接口。AT89C51 單片機的結(jié)構(gòu)框圖如圖2-1 所示。</p><p> 另外,AT89C51 是用靜態(tài)邏輯
13、來設(shè)計的,其工作頻率可下降到0Hz,并提供兩種可用軟件來選擇的省電方式——空閑方式(Idle Mode)和掉電方式(Power Down Mode)。在空閑方式中,CPU 停止工作,而RAM、定時器/計數(shù)器、串行口和中斷系統(tǒng)都繼續(xù)工作。在掉電方式中,片內(nèi)振蕩器停止工作使一切功能都暫停,故只保存片內(nèi)RAM中的內(nèi)容,直到下一個硬件復(fù)位為止。 </p><p> 圖2-1 AT89C51 單片機的結(jié)構(gòu)框圖</p
14、><p> 2.1.1 主要性能指標(biāo) </p><p> 1. 與MCS-51 兼容 </p><p> 2. 4K字節(jié)可編程閃爍存儲器壽命:1000 次寫/擦循環(huán),數(shù)據(jù)保留時間:10年 </p><p> 3. 全靜態(tài)工作:0Hz-24Hz </p><p> 4. 三級程序存儲器鎖定 </p>
15、<p> 5. 128*8 位內(nèi)部RAM </p><p> 6. 32 可編程I/O 線 </p><p> 7. 兩個16 位定時器/計數(shù)器</p><p><b> 8. 6 個中斷源</b></p><p> 9. 可編程串行通道 </p><p> 10. 片內(nèi)振蕩
16、器和時鐘電路[1] </p><p> 2.1.2 引腳功能說明及功能</p><p> AT89C51芯片引腳圖如圖2-2。</p><p> 圖2-2 AT89C51芯片引腳圖</p><p> P3 口也可作為AT89C51 的一些特殊功能口,如表2-1所示:</p><p><b> 表2-
17、1</b></p><p> 2.1.3電源與晶振引腳</p><p> XTAL1:片內(nèi)高增益方向放大器的輸入端,接外部石英晶體和電容的一端。若使用外部輸入時鐘,該引腳必須接地</p><p> XTAL2:片內(nèi)高增益方向放大器的輸出端,接外部石英晶體和電容的另一端。若使用外部輸入時鐘,該引腳作為外部輸入時鐘的輸入端。</p>&l
18、t;p> VCC:供電電壓。GND:接地[1]。</p><p> 2.2 ISD1700語音芯片</p><p> ISD1700系列芯片是華邦公司新推出的單片優(yōu)質(zhì)語音錄放芯片,該芯片提供多項新功能, 包括內(nèi)置專利的多信息管理系統(tǒng), 新信息提示 (vAlert)雙運作模式(獨立&嵌入式),以及可定制的信息操作指示音效。芯片內(nèi)部包含有自動增益控制、麥克風(fēng)前置擴大器、揚聲
19、器驅(qū)動線路、振蕩器與內(nèi)存等的全方位整合系統(tǒng)功能[4]。Isd1700芯片引腳圖如圖2-3。</p><p> 圖2-3 isd1700芯片引腳圖</p><p> 2.2.1 管腳說明[2]</p><p><b> 表2-2</b></p><p> 2.2.2 isd1700具有以下特點:</p>
20、<p> ·可錄、放音十萬次,存儲內(nèi)容可以斷電保留一百年。 </p><p> ·兩種控制方式,兩種錄音輸入方式,兩種放音輸出方式 </p><p> ·可處理多達 255 段以上信息 </p><p> ·有豐富多樣的工作狀態(tài)提示 </p><p> ·多種采樣頻率對
21、應(yīng)多種錄放時間 </p><p> ·音質(zhì)好,電壓范圍寬,應(yīng)用靈活,價廉物美[2]</p><p> 2.2.3 Isd1700的電特性: </p><p> ·工作電壓:2.4V-5.5V,,最高不能超過6V </p><p> ·靜態(tài)電流:0.5 - 1 μA </p><p>
22、; ·工作電流:20mA </p><p> 用戶可利用震蕩電阻來自定芯片的采樣頻率,從而決定芯片的錄放時間和錄放音質(zhì)。表2-3為 ISD1700系列芯片的參數(shù)表:</p><p><b> 表2-3</b></p><p> 而芯片的采樣率可以通過外部振蕩電阻來調(diào)節(jié)如表2-4: </p><p>&
23、lt;b> 表2-4</b></p><p> 2.2.4內(nèi)部寄存器</p><p> 1. 狀態(tài)寄存器SR0是兩字節(jié)數(shù)據(jù),由MISO返回。它包括5個狀態(tài)位 (D4:D0)以及11個地址位(A10:A0)狀態(tài)寄存器</p><p> 2. 狀態(tài)寄存器SR1 </p><p> 2.3LCD1602模塊</p&
24、gt;<p> 在本系統(tǒng)中用液晶顯示模塊顯示公交站名,液晶顯示模塊具有體積小,功耗低,顯示內(nèi)容豐富,超薄輕巧等優(yōu)點,目前字符型液晶顯示模塊已經(jīng)是單片機應(yīng)用設(shè)計中最常用的信息顯示器件。</p><p> 2.3.1 LCD1602的簡介:</p><p> LCD1602液晶顯示模塊,它可以顯示兩行,每行16個字符,采用+5V電源供電,外圍電路簡單,價格便宜,具有較高的性
25、價比。LCD1602的引腳如圖2-4:</p><p> 圖2-4 LCD1602引腳圖</p><p> 2.3.2 LCD1602的引腳功能如表2-5 [7] </p><p><b> 表2-5</b></p><p> 2.3.3 LCD1602控制指令</p><p><b
26、> 1.清屏指令</b></p><p> 功能:<1> 清除液晶顯示器,即將DDRAM的內(nèi)容全部填入"空白"的ASCII碼20H; <2> 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;
27、0; <3> 將地址計數(shù)器(AC)的值設(shè)為0。</p><p><b> 2.顯示開關(guān)控制</b></p><p> 功能:設(shè)置顯示,光標(biāo)及閃爍開,關(guān)</p><p> 其中:D表示顯示:1為開,0為關(guān);<
28、;/p><p> C表示光標(biāo):1為開,0為關(guān)</p><p> B表示閃爍:1為開,0為關(guān)</p><p><b> 3.光標(biāo),畫面移動</b></p><p> 功能:光標(biāo),畫面移動,不影響DDRAM</p><p> 其中:S/C=1,畫面平移一個字符位</p><p
29、> S/C=0,光標(biāo)平移一個字符位</p><p> R/L=1:右移;R/L=0:左移</p><p><b> 4.功能設(shè)置:</b></p><p><b> 功能:工作方式設(shè)置</b></p><p> 其中:DL=1,8位數(shù)據(jù)接口;DL=0四位數(shù)據(jù)接口;</p>
30、<p> N=1,兩行顯示;N=0,一行顯示;</p><p> F=1,5 10點陣字符;F=0,5 7點陣字符</p><p> 2.3.4 讀寫控制時序</p><p><b> 3.硬件電路</b></p><p><b> 3.1單片機模塊</b></p>
31、;<p> 51單片機是整個電路的核心器件,外加晶振11.0592M電路及產(chǎn)生高電平的復(fù)位電路構(gòu)成單片機的最小系統(tǒng)。復(fù)位電路能使整個系統(tǒng)的進行復(fù)位操作,讓系統(tǒng)使用起來更加方便,硬件更加簡潔。通過掃描AN和STOP按鍵可以實現(xiàn):</p><p> A)錄音 跳線插在“REC”一側(cè)是錄音狀態(tài),按住“AN”鍵不放,右側(cè)指示燈亮即可對著板上話筒講話錄音,松鍵時錄音停止并形成一段。再按則錄下一段。按“ST
32、OP”鍵為復(fù)位,再錄音時又從第一段開始;錄音方式可選擇MIC錄音</p><p> B)放音 跳線插在“PLAY”一側(cè)是放音狀態(tài),按一下“AN”鍵即播放一段,一段結(jié)束后自動停止放音,再按“AN”則播放下一段。播放完最后一段后,再按下“AN”鍵會繼續(xù)播放第一段語音。按“STOP”鍵為復(fù)位,再放音時又從第一段開始。</p><p> C)芯片抹音長按“STOP”3秒以
33、上,右側(cè)LED燈會閃爍3下,并且ISD1700芯片內(nèi)所有語音內(nèi)容將被擦除。 </p><p> 51單片機模塊電路圖如圖3-1所示</p><p> 圖3-1 51單片機模塊電路圖</p><p> 從圖3.1中可以看出89C51和ISD1700之間的連接。單片機的P1.4~P1.6引腳接按鍵,控制報站器工作過程中錄音,放音,擦除,停止等操作;P1.0接ISD
34、1700的片選引腳/SS,控制ISD1700是否選通;P1.1接ISD1700的串行時鐘引腳SCLK。P1.2和P1.3接ISD1700的串行輸出引腳MOSI和串行輸入引腳MISO;P0口和P2.0~P2.2控制外圍顯示電路,在報站器工作過程中顯示當(dāng)前的站號;單片機通過四個口控制isd1700進行工作,在SPI命令輸入到ISD1700前,SPI端口的狀態(tài)應(yīng)該保持如下狀態(tài): /SS=HIGH,SCLK=HIGH MOSI=LOW。SP
35、I的時序如圖3-2</p><p> 圖3-2 SPI的時序</p><p> 3.2 ISD1700語音模塊</p><p> 主控單片機主要通過四線(SCLK,MOSI,MISO,/SS)SPI協(xié)議對ISD1700進行串行通信。ISD1700作為從機,幾乎所有的操作都可以通過這個SPI協(xié)議來完成。為了兼容獨立按鍵模式,一些SPI命令:PLAY,REC,ER
36、ASE,F(xiàn)WD,RESET和GLOBAL_ERASE的運行類似于相應(yīng)的獨立按鍵模式的操作。允許用戶指定錄音、放音和擦除的開始和結(jié)束地址。語音模塊電路圖如圖3-3所示 </p><p> 圖3-3 語音模塊電路圖</p><p> 在isd1700的引腳上有VOL、PLAY、REC、ERASE、FWD、F/T等功能按鍵,分別對應(yīng)于1700芯片的音量調(diào)節(jié)、放音、錄音、擦除、快進、復(fù)位等操作
37、。 </p><p> 錄音操作:按下REC鍵,左側(cè)LED點亮?xí)r錄音,松開即停止錄音,LED熄滅; </p><p> 放音操作:按一下PLAY鍵,即播放當(dāng)前段的聲音,左側(cè)LED閃爍,當(dāng)前段播放完畢自動停止,LED熄滅;</p><p> 快進操作:按一下FWD 按鈕將/FWD 端拉低,會啟動快進操作??爝M操作用來將播放指針移向下一段語音信息。當(dāng)播放指針到達最
38、后一段語音處時,再次快進,指針會返回到第一段語音。當(dāng)下降沿來到/FWD 端時,快進操作還要決定于芯片當(dāng)時的狀態(tài): </p><p> 1)如果芯片在掉電狀態(tài)并且當(dāng)前播放指針的位置不在最后一段,那么指針會前進一段,到達下一段語音處。 </p><p> 2)如果芯片在掉電狀態(tài)并且當(dāng)前播放指針的位置在最后一段,那么指針會返回到第一段語音處。 </p><p> 3
39、)如果芯片正在播放一段語音(非最后一段),那么此時放音停止,播放指針前進到下一段,緊接著播放新的語音。 </p><p> 4) 如果芯片正在播放最一段語音,那么此時,放音停止,播放指針返回到第一段語音,緊接著播放第一段語音。</p><p> 擦除操作分為單段擦除和全體擦除兩種擦除方式。</p><p><b> 1)單個擦除: </b>
40、;</p><p> 只有第一段或最后一段語音可以被單個擦除。點按一下ERASE 健將/ERASE 管腳拉低,這時具體的擦除情況要看播放指針的狀態(tài): </p><p> 如果芯片空閑并且播放指針指向第一段語音,則會刪除第一段語音,播放指針指向新的第一段語音(執(zhí)行擦除操作前的第二段)</p><p> 如果芯片空閑并且播放指針指向最后一段語音,則會刪除最后一段語
41、音,播放指針指向新的最后一段語音(執(zhí)行擦除操作前的倒數(shù)第二段) </p><p> 如果芯片空閑并且播放指針指向沒有指向第一或最后一段語音,則不會刪除任何語音,播放指針也不會被改變 </p><p> 如果芯片當(dāng)前正在播放第一段或最后一段語音,點按下ERASE鍵會刪除當(dāng)前語音。 </p><p><b> 2)全體擦除: </b><
42、/p><p> 當(dāng)按下ERASE 鍵將/ERASE 管腳電平拉低超過2.5 秒鐘, 會觸發(fā)全體擦除操作,刪除全部語音信息。 </p><p> 復(fù)位操作: 如果用RESET控制此管腳,建議/RESET管腳與地之間連接一個0.1μF電容。當(dāng)/RESET被觸發(fā),芯片將播放指針和錄音指針都放置在最后一段語音信息的位置。 </p><p> 音量操作: 點按一下VOL鍵將
43、/VOL管腳拉低會改變音量大小。每按一下,音量會減小一檔,再到達最小檔后再按的話,會增加音量直到最大檔,如此循環(huán)??偣灿?個音量檔供用戶選擇,每一檔會改變4dB。復(fù)位操作會將音量檔放在默認位置,即最大音量。 </p><p> FT直通操作:將/FT管腳與GND短接,持續(xù)保持在低電平會啟動直通模式。出廠設(shè)定的是在芯片空閑狀態(tài),直通操作會將語音從Analn端直接通往喇叭端或AUD輸出口。 在錄音期間開啟FT功能,
44、 會同時錄下Analn進入的語音信號[2]。 </p><p> 以下是isd1700獨立按鍵模式的流程圖如圖3-4</p><p> 圖3-4 isd1700獨立按鍵模式的流程圖</p><p><b> 3.3電源模塊</b></p><p> 電源模塊主要為單片機和語音模塊,液晶顯示模塊輸入電壓,可以輸出
45、+5V或者-+12V的電壓,本系統(tǒng)主要的輸入電壓用的是+5V。變壓器產(chǎn)生15V左右的輔助交流電,輔助電源的輸入端電源由15V變壓器的輔助線圈提供,經(jīng)過整流橋D整流后經(jīng)電容C1濾成平穩(wěn)的直流電作為三端穩(wěn)壓器LM7812的輸入電源,同時LM7805的輸入電源直接由LM7812輸出端經(jīng)過電容C3濾波后得到平穩(wěn)的幅值為12V直流電提供,其輸出電壓通過電容C4進行濾波輸出+5V的直流電。三端穩(wěn)壓器7805、7812產(chǎn)生所需的電源電壓以供集成芯片和
46、單片機使用。電源模塊原理圖如圖3-5所示。圖中發(fā)光二極管為LM7805正常工作指示信號。</p><p> 圖3-5電源原理圖</p><p><b> 3.4 放音電路</b></p><p> Isd1700芯片的連接還有音頻信號輸出引腳AUD/AUX,喇叭輸出(SP+、SP-),此外,由于ISD1700的工作電壓為2.4V-5.5
47、V,而單片機所需供電電壓為5V,因此需要采用變壓電路得到5V電壓供ISD1700使用。</p><p> AUD/AUX:輔助輸出。AUD是一個單端電流輸出,而AuxOut是一個單端電壓輸出。它們能夠被用來驅(qū)動一個外部揚聲器。</p><p> 喇叭輸出(SP+、SP-):這對輸出端能驅(qū)動 16Ω以上的喇叭。單端使用時必須在輸出端和喇叭間接耦合電容,而雙端輸出既不用電容又能將功率提高。
48、錄音時,它們都呈高阻態(tài);節(jié)電模式下,它們保持為低電平。ISD1700芯片的SP+、SP-端一定不要直接接地,只能接揚聲器或者懸空。如圖3-6</p><p><b> 圖3-6 放音電路</b></p><p><b> 3.5錄音電路</b></p><p> 本系統(tǒng)話筒信號耦合電容與連接MICREF端到模擬地的電
49、容要相同。</p><p> MIC-:外接話筒通過串聯(lián)電容耦合到此端。耦合電容值和此端的 4.7KΩ輸入阻抗決定了芯片頻帶的低頻截止點。</p><p> MIC+:此端是前置放大器的反向輸入。當(dāng)以差分形式連接話筒時,可減小噪聲,提高共模抑制比。如圖3-7</p><p><b> 圖3-7 錄音電路</b></p>&l
50、t;p><b> 3.6振蕩電路</b></p><p> 單片機的工作是在統(tǒng)一的脈沖控制下的進行的。這個脈沖就是由單片機控制器的時鐘電路發(fā)出的,即時鐘電路用于產(chǎn)生單片機工作所需的時鐘信號。單片機本身就是一個復(fù)雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路應(yīng)在唯一的時鐘信號控制下嚴(yán)格地按時序進行工作。時鐘電路用于產(chǎn)生單片機工作的時鐘信號。而時鐘電路又各分為兩種,即內(nèi)部時鐘方式和
51、外部時鐘方式。</p><p> 本系統(tǒng)采用內(nèi)部時鐘方式此種方式時,單片機內(nèi)接一個高增益反向放大器構(gòu)成內(nèi)部振蕩器。引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。同時在XTAL1和XTAL2兩端跨接晶體或陶瓷諧振器構(gòu)成穩(wěn)定的自激振蕩器,其發(fā)出的脈沖信號直接送入到內(nèi)部時鐘發(fā)生器。電容C21和C22通常選擇為(30+或-10)pf左右;外接陶瓷諧振器時則選為47pf左右。電容C21和 C22對頻率有微調(diào)作
52、用。為了減少寄生電容,更好地保證振蕩器可靠地工作,諧振器和電容應(yīng)安裝得與單片機芯片盡可能的近。內(nèi)部時鐘發(fā)生器實際上是一個二分頻的觸發(fā)器,該二分頻為單片機提供一個二相的時鐘信號即相位信號1(P1)和相位信號2(P2),驅(qū)動CPU產(chǎn)生執(zhí)行指令功能的機器周期。這里我們采用的是12MHz晶振,也就時說單片機的時鐘周期為1/12uS,指令周期為1uS。晶體振蕩器的頻率越高,振蕩頻率就越高[6]。如圖3-8</p><p>
53、<b> 圖3-8 振蕩電路</b></p><p><b> 3.7復(fù)位電路</b></p><p> 單片機復(fù)位電路設(shè)計的好壞,直接影響到整個系統(tǒng)工作的可靠性。在完成單片機系統(tǒng)開發(fā),并在實驗室調(diào)試成功后,在現(xiàn)場卻出現(xiàn)了“死機”“程序跑飛”等現(xiàn)象,出現(xiàn)這種情況的主要因素可以分為內(nèi)因和外因兩部分。基本阻容復(fù)位電路是最簡單的復(fù)位電路,利用了電
54、容可以存儲電荷的特性,和電阻組成串聯(lián)網(wǎng)絡(luò)。只要保證電容充放電的時間常數(shù)滿足單片機的復(fù)位時間要求,就可以形成基本的復(fù)位電路。如圖所示為基本阻容復(fù)位電路。這個復(fù)位電路時高電平有效復(fù)位電路。如圖3-9</p><p> 放電的瞬間RESET端的點位和Vcc相同,隨著充電電流的減少,RESET的點位逐漸下降,τ=RC,這個時間常數(shù)一般情況下足以保證完成復(fù)位操作。</p><p> 在單片機應(yīng)用
55、系統(tǒng)工作時,除了進入系統(tǒng)正常的初始化之外,當(dāng)由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需按復(fù)位鍵以重新啟動。所以,系統(tǒng)的復(fù)位電路必須準(zhǔn)確、可靠地工作。</p><p> 單片機的復(fù)位都是靠外部電路實現(xiàn)的,在時鐘電路工作后,只要在單片機的RST引腳上出現(xiàn)24個時鐘振蕩脈沖以上的高電平,單片機便實現(xiàn)初始化狀態(tài)復(fù)位。為了保證應(yīng)用系統(tǒng)可靠地復(fù)位,在設(shè)計復(fù)位電路時,通常使RST保持高電平。只要RST保
56、持高電平,則單片機就循環(huán)復(fù)位[5]。</p><p><b> 圖3-9 復(fù)位電路</b></p><p><b> 3.8液晶顯示模塊</b></p><p> 在本系統(tǒng)中單片機控制液晶顯示模塊的實現(xiàn),說明:數(shù)據(jù)線DB0~DB7連接單片機的P0口,3條控制線分別接P2.0,P2.1,P2.2;電阻R3用來調(diào)節(jié)液晶顯
57、示的對比度,電阻R2用來設(shè)置背光的亮度。在電路中用一組16根的排線來連接單片機和液晶顯示器。如圖3-10</p><p> 圖3-10 液晶顯示電路</p><p><b> 4.軟件實現(xiàn)</b></p><p> 4.1 設(shè)計總體思路</p><p> 電路上電后,首先完成程序的初始化,隨后查詢按鍵狀態(tài),進入系
58、統(tǒng)待機狀態(tài)。如果有AN按鍵按下,查詢電路中PR標(biāo)志位狀態(tài),如果為PR=0則執(zhí)行放音操作,否則就執(zhí)行錄音操作。在待機狀態(tài)下,如果放音,自動讀出第一站的放音內(nèi)容,顯示站號。如果不是首次按下,則首先判斷當(dāng)前站號,并以該站號為依據(jù)獲得存放該站放音內(nèi)容的首地址;然后調(diào)用放音程序,讀入前面獲得的本站放音內(nèi)容首地址,開始放音。AN鍵接著按下后,程序放音內(nèi)容轉(zhuǎn)向下一站;相應(yīng)的站號顯示也將隨之刷新;停止鍵按下,將中止當(dāng)前的放音,放音狀態(tài)。停止鍵按下三秒后
59、,將擦除所有的語音內(nèi)容。</p><p> 如果是錄音的話,該站號為依據(jù)獲得存放該站錄音內(nèi)容的首地址,然后調(diào)用錄音程序,錄入前面獲得的本站錄音內(nèi)容首地址,開始錄音。系統(tǒng)流程圖如圖4-1。如果循環(huán)存儲體系處于令人滿意的狀態(tài),那么可以使用PLAY,REC,F(xiàn)WD,RESET,ERASE這些命令,功能類似于1700的獨立模式中相應(yīng)的功能。圖4-2為 isd1700相關(guān)操作流程圖</p><p>
60、; 圖4-1 系統(tǒng)流程圖</p><p> 圖4-2 isd1700相關(guān)操作流程圖</p><p><b> 4.2 主程序</b></p><p> #include "REG51.h"</p><p> #define uchar unsigned char <
61、;/p><p> #define uint unsigned int</p><p> #define ISD_PU 0x01 //ISD芯片上電 #define ISD_STOP 0x02
62、160; //停止當(dāng)前操作 #define ISD_RESET 0x03 //ISD芯片復(fù)位 #define ISD_CLR_INT 0x04 //清除EOM標(biāo)志和中斷信號 #d
63、efine ISD_RD_STATUS 0x05 //返回狀態(tài)寄存器的內(nèi)容 #define ISD_RD_PLAYPTR 0x06 //返回狀態(tài)和放音指針 #define ISD_PD 0x07
64、160; //芯片下電 #define ISD_RD_RECPTR 0x08 //返回狀態(tài)和錄音指針 #define ISD_DEVID 0x09 //讀取芯片ID #d
65、efine ISD_PLAY 0x40 //從當(dāng)前地址放音 #define ISD_REC 0x41 </p&
66、gt;<p> #define ISD_WR_NVCFG 0x46 //將APC的內(nèi)容寫非易失存儲器 #define ISD_LD_NVCFG 0x47 //將NVCFG的內(nèi)容裝入APC中 #
67、define ISD_FWD 0x48 //將放音指針指向下一段語音起始地址 #define ISD_CHK_MEM 0x49 //檢測環(huán)形存儲
68、#define ISD_EXTCLK 0x4A //使能外部時鐘 #define ISD_SET_PLAY 0x80 //按指定地址放音 #define ISD_SET_R
69、EC 0x81 //按指定地址錄音 #define ISD_SET_ERASE 0x82 //按指定地址擦除</p><p> #define ISD_WR_APC2
70、160; 0x65 //將<D11:D0>寫入APC寄存器,并由<D2:D0>控制音量</p><p> //SR0_L 0 1 2 3 4 5 6 7 // CMD_Err FULL PU
71、60;EOM INT A0 A1 A2 //SR0_H 8 9 10 11 12 13 14 15 //A3 A4 A5 A6 A7 A8 A9 A10 //SR1 0 1 2 3 4 5 6 7 // RDY
72、;ERASE PLAY REC SE1 SE2 SE3 SE4 //APC 0 1 2 3 4 5 6 7 //
73、;VOL0 VOL1 VOL2 MON_IN MIX_IN SE_EDIT SPI_FT AUD/A UX(AUD線路輸出,AUX直接驅(qū)動喇叭) </p><p> //APC 8 9 10 11 </p>&
74、lt;p> // PWM_SPK PU_AO VALERT EOM_EN(在SETPLAY模式下,置1遇到EOM則結(jié)束,否則繼續(xù)播放)</p><p> //***********ISD1700狀態(tài)寄存器及各個標(biāo)志位定義***********// </p><p> unsigned ch
75、ar bdata SR0_L; // SR0 寄存器</p><p> unsigned char bdata SR0_H; </p><p> unsigned char bdata SR1; // SR1 寄存器</p><p> unsigned char APCL=0,APCH=0; // APC寄存器</p><
76、;p> unsigned char PlayAddL=0,PlayAddH=0; // 放音指針低位,高位 </p><p> unsigned char RecAddL=0,RecAddH=0; // 錄音指針低位,高位 </p><p> sbit CMD=SR0_L^0; // SPI 指令錯誤標(biāo)志位 </p><p>
77、; sbit FULL=SR0_L^1; // 芯片存儲空間滿標(biāo)志</p><p> sbit PU=SR0_L^2; //上電標(biāo)志位</p><p> sbit EOM=SR0_L^3; // EOM 標(biāo)志位 </p><p> sbit INT=SR0_L^4; // 操作完成標(biāo)志位</p><p>
78、; sbit RDY=SR1^0; // 準(zhǔn)備接收指令標(biāo)志位</p><p> sbit ERASE=SR1^1; //擦除標(biāo)志位</p><p> sbit PLAY=SR1^2; // 播放標(biāo)志位</p><p> sbit REC=SR1^3; // 錄音標(biāo)志位</p><p> //
79、********************標(biāo)志位定義***************************// </p><p> uchar bdata flag;</p><p> sbit PR_flag=flag^1; // 放音/錄音標(biāo)志位:0=放音,1=錄音</p><p> sbit Erase_flag=flag^4; </p&g
80、t;<p> sbit Stop_flag=flag^7;</p><p> //**********************端口定義**************************//</p><p> sbit SS=P1^0;</p><p> sbit SCK=P1^1;</p><p>
81、sbit MOSI=P1^2;</p><p> sbit MISO=P1^3;</p><p> sbit Switch_PR=P1^4; //PLAY=0;REC=1;</p><p> sbit Key_STOP= P1^5; </p><p> sbit Key_A
82、N= P1^6;</p><p> sbit LED= P1^7;</p><p> /********************************************************** </p><p> 函數(shù)原型: void Cpu_Init(void)</p><p> 功 能: CPU及系統(tǒng)變量
83、初始化 </p><p> **********************************************************/</p><p> void Cpu_Init(void)</p><p> { P0=P1=P2=P3=0xff;</p><p> TMOD=0x01;
84、 // 定時器初始化</p><p> EA=0; // 關(guān)閉中斷</p><p> flag=0; // 標(biāo)志位歸0</p><p><b> LED=1;</b></p><p><b> }</b&g
85、t;</p><p> /**********************************************************</p><p> 函數(shù)原型:void ISD_Init(void);</p><p> 功 能:系統(tǒng)初始化</p><p> ******************************
86、****************************/</p><p> void ISD_Init(void)</p><p> { uchar i=2; ClrInt();</p><p> SS=1; ISD_CHK_MEM();</
87、p><p> SCLK=1; ISD_WR_APC2(0x40,0x04); //直通關(guān)閉</p><p> MOSI=0; ISD_RD_APC(void);</p><p> do
88、 do</p><p> { {ISD_Rd_Status();</p><p> ISD_PU(); // 上電 }while(RDY==0);</p><p> delay(50); d
89、o{LED=0; </p><p> ISD_Rd_Status(); // 讀取狀態(tài) delay(300)</p><p> }while(CMD||(!PU)); //再次發(fā)送 LED=1;</p><p> 上電指令 sp無效 delay(300);</p>
90、;<p> ID=RD_DevID();//讀取芯片ID i--;}while(i>0); }</p><p> /*********************************************************** </p><p> * 函數(shù)原型: void ISDWORK (void) </p>
91、<p> * 功 能:對ISD1700進行的相關(guān)操作</p><p> **********************************************************/ </p><p> void ISDWORK (void)</p><p> {uchar i;
92、 </p><p> switch (flag) </p><p> {case 0x00: //放音 </p><p> // ISD_Clr_Int(); </p
93、><p> do{ISD_Rd_Status(); </p><p> }while(RDY==0); </p><p> //ISD_CHK_MEM(); 空間檢查 </p><p> delay(10);
94、 </p><p> ISD_Play(); </p><p> delay(2); </p><p> LED=0; </p><p> do{ISD_R
95、d_Status(); </p><p> if (Key_STOP==0) </p><p> {delay(20); </p><p> if (Key_STOP==0) </p>&l
96、t;p> {ISD_Clr_Int(); </p><p> ISD_STOP(); </p><p><b> return; </b></p><p><b> } </b></p><p><
97、b> } </b></p><p> }while(PLAY==1); </p><p><b> LED=1; </b></p><p> ISD_Clr_Int(); </p><p> //ISD_CHK_MEM(); </p><p> do{ISD_Rd_
98、Status(); </p><p> }while(RDY==0); </p><p> delay(10); </p><p> ISD_FWD(); </p><p> do{ISD_Rd_Status(); </p><p> }while(RDY==0); </p><p>
99、<b> break; </b></p><p> case 0x02: </p><p> ISD_Clr_Int(); </p><p> do{ISD_Rd_Status(); </p><p> }while(RDY==0); </p><p> //ISD_CHK_MEM()
100、; </p><p><b> LED=0; </b></p><p> ISD_Rec(); //錄音</p><p> do{ISD_Rd_Status(); </p><p> if(FULL==1) </p><p> {for (i=3;i&
101、gt;0;i--) </p><p><b> {LED=0; </b></p><p> delay(300); </p><p><b> LED=1; </b></p><p> delay(200);} </p><p><b> } </b
102、></p><p> }while(Key_AN==0); </p><p> ISD_Clr_Int(); </p><p> ISD_STOP(); </p><p><b> LED=1; </b></p><p><b> break;</b><
103、/p><p> case 0x10: </p><p><b> do{ </b></p><p> ISD_Rd_Status(); </p><p> }while(RDY==0); </p><p> //ISD_CHK_MEM(); </p>
104、<p> delay(2); </p><p> ISD_G_Erase(); </p><p><b> do{ </b></p><p> ISD_Rd_Status(); </p><p> }while(RDY==0); </p><p> for (i=3;i&g
105、t;0;i--)</p><p><b> {LED=0; </b></p><p> delay(300); </p><p> LED=1; </p><p> delay(200);} </p><
106、;p><b> break;</b></p><p> case0x80: stop標(biāo)志</p><p> ISD_Clr_Int(); </p><p> ISD_STOP(); </p><p> ISD_Reset(); </p><p> ISD_PD()
107、; </p><p><b> break; </b></p><p><b> } </b></p><p><b> } </b></p><p> /******************************************************
108、**** </p><p> * 函數(shù)原型: unsigned char ISD_SendData(unsigned char dat);</p><p> * 功 能:向CPU發(fā)送&讀回數(shù)據(jù)</p><p> **********************************************************/ <
109、/p><p> unsigned char ISD_SendData(unsigned char dat) // 保證外部SS=1 </p><p><b> { </b></p><p> unsigned char i,j,BUF_ISD=dat; </p><p> SCLK=1; // 初始條件
110、</p><p> /SS=0; // 使能 ISD1700的 SPI </p><p> for(j=4;j>0;j--) // 延遲 </p><p><b> {;} </b></p><p> for(i=0;i<8;i++) // 發(fā)送&接收8位數(shù)據(jù)</p&g
111、t;<p><b> { </b></p><p><b> SCLK=0; </b></p><p> for(j=2;j>0;j--)//延遲</p><p><b> {;}</b></p><p> if(BUF_ISD&0x01)
112、 // 將BUF_ISD中的最低位數(shù)據(jù)發(fā)送到MOSI端口</p><p><b> MOSI=1; </b></p><p><b> else </b></p><p><b> MOSI=0; </b></p><p> BUF_ISD>>=1; //
113、BUF_ISD右移一位</p><p> if(MISO) // 逐個接收MISO端口的數(shù)據(jù)。將數(shù)據(jù)存在BUF_ISD的最高位</p><p> BUF_ISD|=0x80; </p><p><b> SCLK=1; </b></p><p> for(j=6;j>0;j--) // 延遲 <
114、/p><p><b> {;} </b></p><p><b> } </b></p><p><b> MOSI=0; </b></p><p> return(BUF_ISD); //返回接收到的數(shù)據(jù)</p><p><b> }&
115、lt;/b></p><p> /********************************************************** </p><p> * 函數(shù)原型: void ISD_PU(void); 發(fā)送指令后需要延遲50ms</p><p> * 功 能:上電</p><p>
116、 **********************************************************/ </p><p> void ISD_PU(void)</p><p> { ISD_SendData(0x01); // 發(fā)送 PU命令 </p><p> ISD_SendData(0x00);</p&g
117、t;<p><b> SS=1; </b></p><p><b> }</b></p><p> /********************************************************** </p><p> * 函數(shù)原型: void ISD_STOP(void);
118、</p><p> * 功 能:停止當(dāng)前操作</p><p> **********************************************************/ </p><p> void ISD_STOP(void)</p><p> { ISD_SendData(0x02);
119、 // 發(fā)送STOP命令</p><p> ISD_SendData(0x00); </p><p><b> SS=1; </b></p><p><b> }</b></p><p> /**********************************************
120、************</p><p> * 函數(shù)原型: void ISD_Reset(void); 發(fā)送指令后需要延遲 50ms </p><p> * 功 能: ISD1700復(fù)位 </p><p> **********************************************************/</p>
121、;<p> void ISD_Reset(void) </p><p> { ISD_SendData(0x03); // 發(fā)送 RESET 命令 </p><p> ISD_SendData(0x00); </p><p><b> SS=1; </b></p><p&
122、gt;<b> }</b></p><p> /********************************************************** </p><p> * 函數(shù)原型: void ISD_Clr_Int()(void);</p><p> * 功 能:清除中斷標(biāo)志</p>&l
123、t;p> **********************************************************/ </p><p> void ISD_Clr_Int(void)</p><p> { ISD_SendData(0x04);</p><p> ISD_SendData(0x00);</p><p&
124、gt;<b> SS=1; </b></p><p><b> }</b></p><p> /**********************************************************</p><p> * 函數(shù)原型: void ISD_Rd_Status(void); </p
125、><p> * 功 能:讀取狀態(tài)寄存器內(nèi)容</p><p> **********************************************************/ </p><p> void ISD_Rd_Status(void)</p><p> { unsigned char i ;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公交報站畢業(yè)設(shè)計
- 公交車語音報站器的設(shè)計【畢業(yè)設(shè)計】
- 公交車站自動報站器 畢業(yè)設(shè)計
- 畢業(yè)設(shè)計--公交車智能報站
- 畢業(yè)設(shè)計---公交車站自動報站器的設(shè)計
- 畢業(yè)設(shè)計---公交車報站系統(tǒng)的設(shè)計
- 智能公交報站器設(shè)計畢業(yè)論文
- 公交車自動報站系統(tǒng)畢業(yè)設(shè)計
- 公交車自動報站系統(tǒng)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---公交車自動報站系統(tǒng)的設(shè)計
- 公交車自動報站系統(tǒng)的設(shè)計-畢業(yè)設(shè)計
- 基于單片機的公交報站系統(tǒng)設(shè)計【畢業(yè)設(shè)計】
- 公交車自動報站的系統(tǒng)畢業(yè)設(shè)計
- 公交車語音報站器設(shè)計【畢業(yè)論文】
- 單片機控制的公交車自動報站器的設(shè)計畢業(yè)設(shè)計
- 畢業(yè)設(shè)計--公交車自動報站系統(tǒng)的硬件設(shè)計原理
- 畢業(yè)設(shè)計基于單片機的公交報站系統(tǒng)的設(shè)計
- 畢業(yè)設(shè)計---基于單片機的公交報站顯示系統(tǒng)
- 畢業(yè)設(shè)計(論文)基于單片機的公交報站系統(tǒng)
- 畢業(yè)設(shè)計--基于單片機的公交車報站系統(tǒng)設(shè)計
評論
0/150
提交評論