

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科生畢業(yè)論文(設計)</p><p> 系(院)物理與電子工程學院 專業(yè) 電子信息工程 </p><p> 論文題目 公交車自動報站系統(tǒng)設計 </p><p><b> 公交車自動報站系統(tǒng)</b></p><p> [摘要]本設計主要解決如何方便、準確地指示乘客到站的問題,具有自
2、動檢測公交站臺,模擬人聲進行報站和預報站,對所報站數(shù)和站名進行文字顯示等功能。系統(tǒng)包括微控制器模塊,語音錄放電路,液晶顯示模塊,鍵盤接口電路,復位電路及電源等。系統(tǒng)使用51單片機來控制語音合成芯片和液晶顯示模組。站臺檢測使用干簧管檢測。語音合成芯片ISD4004,采用模擬數(shù)據半導體存儲器直接存儲的專利技術,即將模擬語音數(shù)據直接寫入單個存儲單元,不需經過A/D、D/A轉換,因此能夠較好地真實再現(xiàn)語音的自然效果,避免了一般固體語音電路因為量
3、化和壓縮造成的量化噪聲和失真現(xiàn)象。配合液晶屏lcd1602顯示,就使得該報站系統(tǒng)更加實用。</p><p> [關鍵字]單片機 語音提示 液晶顯示 公交報站</p><p><b> 1 緒論</b></p><p> 隨著現(xiàn)在社會的發(fā)展,由于公交車的快速發(fā)展,越來越多的人選擇乘坐公交車,公交車吸引人的優(yōu)點除了價格低廉外,還有一個就是它的
4、便利,尤其是報站系統(tǒng),尤其對于對路線不熟悉的乘客尤為重要。一般的公交車報站系統(tǒng)分為兩種,一種是司機通過按鍵來操作,熟悉路線的司機在車輛駛入站點一定距離范圍內時,按下所對應的按鈕,系統(tǒng)報站。另一種是通過全球定位系統(tǒng)(GPS)的用戶終端接收工作衛(wèi)星的導航信息,從而解算出車輛的經緯度信息,進而計算出實時坐標,將其與站點坐標相比較,當車輛駛入站點一定距離范圍內時,不用人工干預,系統(tǒng)自動報站。兩種報站方法來說,第一種不智能,容易出現(xiàn)失誤,第二種花
5、費昂貴巨大。所以本設計就利用干簧管作為檢測站牌的傳感器,檢測既準確又價格又低廉。本設計的基本思路就是干簧管傳感器檢測到站牌后,單片機判斷第幾個站牌并發(fā)出指令進行相應的語音報站,并進行液晶顯示。</p><p> 本次設計以 Keil C51 開發(fā)環(huán)境為編程平臺進行代碼的編譯和運行,并在 Proteus 上進行仿真。</p><p><b> 2 方案設計</b>&
6、lt;/p><p><b> 2.1 原理</b></p><p> 本系統(tǒng)使用八位單片機作為控制器件。當系統(tǒng)進行語音再生時,單片機控制語音合成電路中的語音芯片來讀取其外接的存儲器內部的語音信息,并合成語音信號,再通過語音輸出電路,進行語音報站和提示。同時,單片機讀取傳感器返回的站臺信息,將信息顯示在液晶上。當系統(tǒng)進行語音錄制時,語音信號通過語音錄入電路送給語音合成電
7、路中的語音芯片,由語音芯片進行數(shù)據處理,并將生成的數(shù)字語音信息存儲到語音存儲芯片中,從而建立語音庫。</p><p><b> 2.2 系統(tǒng)框圖</b></p><p> 圖 2-1 系統(tǒng)框圖</p><p><b> 2.3 簡介</b></p><p> 主控制器使用單片機AT89C51
8、,是美國ATMEL公司生產的低電壓,高性能CMOS 8 位單片機。片內含 4k byte的可反復擦寫的只讀程序存儲器(PEROM)和 128 bytes的隨機存取數(shù)據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MSC-51 指令系統(tǒng),片內置通用 8 位中央處理器和FLASH存儲單元,適合在開發(fā)階段的使用。AT89C51 提供以下標準功能:4k字節(jié)FLASH閃存存儲器,128 字節(jié)內部RAM,32 個I
9、/O口線,兩個 16 位定時/計數(shù)器,一個 5 向量兩級中斷結構,一個全雙工串行通信口,片內振蕩器及時鐘電路。同時,AT89C51 可降至 0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位[1]。</p><p> 傳感器使用的是干簧管,
10、價格便宜,反應靈敏。</p><p> 液晶顯示模塊使用的是LCD1602,工業(yè)字符型液晶,能夠同時顯示16x02即32個字符。</p><p> 語音芯片語音提示模塊選用ISD4004系列語音芯片,外接話筒和音箱組成語音錄制和播放電路。其中,音箱由音頻功率放大器LM386驅動。</p><p> 公交車使用買的無驅動的玩具車。</p><
11、p><b> 3 硬件設計</b></p><p><b> 3.1 控制器</b></p><p> 89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS8位微處理器,俗稱單片機。單片機的可擦除只
12、讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的89C51是一種高效微控制器。</p><p> 89C51單片機管腳圖</p><p> 圖 3-1 89C51單片機管腳圖</p><p> 單片機最小系統(tǒng)及外圍
13、電路接口圖</p><p> 圖 3-2 單片機最小系統(tǒng)及外圍電路接口圖</p><p><b> 3.2顯示模塊</b></p><p> (1)LCD1602液晶顯示屏主要技術參數(shù)如表3.2.1</p><p><b> 表3.2.1</b></p><p>
14、(2) LCD1602液晶顯示屏引腳說明如表3.2.2</p><p><b> 表3.2.2</b></p><p> 1602采用標準的14腳接口,其中:</p><p> 第1腳:VSS為地電源</p><p> 第2腳:VDD接5V正電源</p><p> 第3腳:V0為液晶顯示
15、器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度</p><p> 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據寄存器、低電平時選擇指令寄存器。</p><p> 第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平RW為高電平
16、時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數(shù)據。</p><p> 第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p> 第7~14腳:D0~D7為8位雙向數(shù)據線。</p><p> 另外引腳"A"和"K"為背光引腳,"A"接正,"K"
17、接負便會點亮背光燈。這兩個管腳可以不接置空。</p><p> (3)LCD1602液晶顯示屏指令說明如表3.2.3</p><p><b> 表3.2.3</b></p><p> 它的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)</p><p> 指令1:清顯示,指令碼
18、01H,光標復位到地址00H位置</p><p> 指令2:光標復位,光標返回到地址00H</p><p> 指令3:光標和顯示模式設置 I/D:光標移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效</p><p> 指令4:顯示開關控制。 D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示 C:控制
19、光標的開與關,高電平表示有光標,低電平表示無光標 B:控制光標是否閃爍,高電平閃爍,低電平不閃爍</p><p> 指令5:光標或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標</p><p> 指令6:功能設置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符&l
20、t;/p><p> 指令7:字符發(fā)生器RAM地址設置</p><p> 指令8:DDRAM地址設置</p><p> 指令9:讀忙信號和光標地址 BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據,如果為低電平表示不忙。</p><p><b> 指令10:寫數(shù)據</b></p><p&
21、gt;<b> 指令11:讀數(shù)據</b></p><p> LCD1602液晶顯示屏顯示電路</p><p> 圖 3-2 LCD1602液晶顯示屏顯示電路圖</p><p> 3.3 站牌檢測模塊</p><p> 在每個站牌下面都埋著一個永磁鐵,在車的右端安有一個干簧管,當車子靠近站臺時,干簧管閉合,觸發(fā)單
22、片機的外部中斷,被單片機檢測到從而做出相應判斷。</p><p> 干簧管通常由兩個或三個軟磁性材料做成的簧片觸點,被封裝在充有惰性氣體(如氮、氦等)或真空的玻璃管里,玻璃管內平行封裝的簧片端部重疊,并留有一定間隙或相互接觸以構成開關的常開或常閉觸點。</p><p> 干簧管的工作電路圖:</p><p> 圖3-3 干簧管的工作電路圖</p>
23、<p><b> 3.4 語音模塊</b></p><p> ISD4004系列語音芯片工作電壓為+3V,單片錄放時間8到16分鐘,音質好,適用于移動電話及其他便攜式電子產品中。芯片采用CMOS 技術,內含振蕩器、防混淆濾波器、平滑濾波器、音頻放大器、自動靜噪及高密度多電平閃爍存儲陳列。芯片設計是基于所有操作必須由微控制器控制,操作命令可通過串行通信接口(SPI或Microw
24、ire)送入。芯片采用多電平直接模擬量存儲技術, 每個采樣值直接存儲在片內閃爍存儲器中,因此能夠非常真實、自然地再現(xiàn)語音、音樂、音調和效果聲,避免了一般固體錄音電路因量化和壓縮造成的量化噪聲和金屬聲。采樣頻率可以是4.0,5.3,6.4或8.0kHz,頻率越低,錄放時間越長,而音質則有所下降,片內信息存于閃爍存儲器中,可在斷電情況下保存一百年(典型值),可反復錄音十萬次。</p><p> 3.4.1 內部結構
25、</p><p> 圖3-4 ISD4004的內部結構圖</p><p><b> 3.4.2引腳描述</b></p><p> (1)電源(VCCD,VCCA) 芯片內部數(shù)字電路電源正極引腳和模擬電路電源正極引腳。為使噪聲最小,芯片的數(shù)字電路和模擬電路使用不同的電源供電,并且分別引到外封裝的不同管腳上,數(shù)字和模擬電源端最好分別走線,盡
26、可能在靠近供電端處相連,而去耦電容應盡量靠近器件。</p><p> ?。?)地線(VSSD,VSSA) 芯片內部數(shù)字電路電源地線和模擬電路電源地線引腳。芯片的數(shù)字電路和模擬電路也要使用不同的地線。</p><p> 圖3-5 ISD4004芯片引腳圖</p><p> ?。?)同相模擬輸入(ANA IN+) 錄音信號的同相輸入端。輸入放大器可用單端或差分驅動
27、。單端輸入時,信號由耦合電容輸入,最大幅度為峰-峰值32mV,耦合電容和本端的3KΩ電阻輸入阻抗決定了芯片頻帶的低端截止頻率。差分驅動時,信號最大幅度為峰-峰值16mV。</p><p> ?。?)反相模擬輸入(ANA IN-) 差分驅動時,這是錄音信號的反相輸入端。信號通過耦合電容輸入,最大幅度為峰-峰值16mV。</p><p> ?。?)音頻輸出(AUD OUT) 提供音頻輸出,
28、可驅動5KΩ的負載。</p><p> (6)片選() 此端為低,即向ISD4004芯片發(fā)送指令,兩條指令之間為高電平。</p><p> ?。?)串行輸入(MOSI) 此端為串行輸入端,主控制器應在串行時鐘上升沿之前半個周期將數(shù)據放到本端,以供輸入。</p><p> ?。?)串行輸出(MISO) 此端為串行輸出端,芯片未被選中時,本端呈高阻態(tài)。</
29、p><p> (9)串行時鐘(SCLK) 時鐘輸入端,由主控制器產生,用于同步MOSI 和MISO的數(shù)據傳輸。數(shù)據在SCLK上升沿鎖存到芯片,在下降沿移出芯片。 </p><p> ?。?0)中斷() 本端為漏極開路輸出。芯片在任何操作(包括快進)中檢測到EOM或OVF時,本端變低并保持。中斷狀態(tài)在下一個SPI周期開始時清除。中斷狀態(tài)也可用RINT指令讀?。∣VF標志指示芯片的錄/放操作
30、已到達存儲器的末尾;EOM標志只在放音中檢測到內部的EOM標志時,此狀態(tài)位才置1)。 </p><p> (11)行地址時鐘(RAC) 漏極開路輸出。每個RAC周期表示芯片存儲器的操作進行了一行(ISD4004系列中的存儲器共2400行)。該信號保持高電平175ms,低電平25ms。快進模式下,RAC 218.75μs是高電平,31.25μs為低電平。該端可用于存儲管理技術。</p><p
31、> ?。?2)外部時鐘(XCLK) 本端內部有下拉元件。芯片內部的采樣時鐘在出廠前已調校,誤差在1%以內。商業(yè)級芯片在整個溫度和電壓范圍內, 頻率變化在2.25%以內。工業(yè)級芯片在整個溫度和電壓范圍內,頻率變化在4%以內,此時建議使用穩(wěn)壓電源。若要求更高精度,可從本端輸入外部時鐘。由于內部的防混淆及平滑濾波器已設定,故上述推薦的時鐘頻率不應改變。輸入時鐘的占空比無關緊要,因內部首先進行了分頻。在不外接時鐘時,此端必須接地。<
32、;/p><p> (13)自動靜噪(AM CAP)當錄音信號電平下降到內部設定的某一閾值以下時,自動靜噪功能使信號衰弱,這樣有助于濾除無信號(靜音)時的噪聲。通常本端對地接1µF的電容,構成內部信號電平峰值檢測電路的一部分。檢出的峰值電平與內部設定的閾值作比較,決定自動靜噪功能的翻轉點。大信號時,自動靜噪電路不衰減,靜音時衰減6dB。1µF 的電容也影響自動靜噪電路對信號幅度的響應速度。本端接V
33、CCA則禁止自動靜噪。</p><p> 3.4.3 操作規(guī)則</p><p> ?。?)串行外設接口 ISD4000系列語音芯片工作于SPI串行接口。SPI協(xié)議是一個同步串行數(shù)據傳輸協(xié)議,設定微控制器的SPI移位寄存器在SCLK的下降沿將數(shù)據送至MISO引腳。以ISD4004為例,協(xié)議的具體內容如下:</p><p> ①所有串行數(shù)據傳輸開始于下降沿。<
34、;/p><p> ②在傳輸期間必須保持低電平,在兩條指令之間則保持高電平。</p><p> ?、蹟?shù)據在時鐘上升沿移入,在下降沿移出。</p><p> ?、茏兊?,輸入指令和地址后,ISD4004才能開始錄/放操作。</p><p> ?、葜噶罡袷绞?八位控制碼)加(十六位地址碼)。</p><p> ?、轎SD4004
35、的任何操作如果遇到EOM或OVF,則產生一個中斷,該中斷狀態(tài)在下一個SPI周期開始時被清除。</p><p> ⑦使用“讀”指令使中斷狀態(tài)位移出ISD4004的MISO引腳時,控制及地址數(shù)據也應同步從MOSI端移入。因此,要注意移入的數(shù)據是否與器件當前進行的操作兼容。當然,也允許在一個SPI周期里,同時執(zhí)行讀狀態(tài)和開始新的操作(即新移入的數(shù)據與器件當前的操作可以不兼容)。</p><p>
36、; ⑧所有操作在運行位(RUN)置1時開始,置0時結束。</p><p> ?、崴兄噶疃荚诙松仙亻_始執(zhí)行。</p><p> ?。?)信息快進 用戶不必知道信息的確切地址就能快進跳過一條信息。信息快進只用于放音模式,放音速度是正常的1600倍,遇到EOM后停止,然后內部地址計數(shù)器1,指向下一條信息的開始處。</p><p> (3)上電順序 器件延時TP
37、UD(8KHz采樣時,約為25ms)后才能開始操作。因此,用戶發(fā)完上電指令后,必須等待TPUD,才能發(fā)出下一條操作指令。</p><p> 例如,從00處放音,應遵循如下時序:</p><p> ?、侔l(fā)POWER UP命令;</p><p> ?、诘却齌PUD(上電延時);</p><p> ?、郯l(fā)地址值為00的SET PLAY命令;<
38、;/p><p><b> ?、馨l(fā)PLAY命令。</b></p><p> 器件會從00地址開始放音,當出現(xiàn)EOM時,立即中斷,停止放音。</p><p> 如果從00處錄音,則按以下時序:</p><p> ?、侔l(fā)POWER UP指令;</p><p> ②等待TPUD(上電延時);</p
39、><p> ?、郯l(fā)POWER UP命令;</p><p> ?、艿却?倍TPUD;</p><p> ⑤發(fā)地址值為00的 SET REC命令;</p><p><b> ⑥發(fā)REC命令。</b></p><p> 器件便從00地址開始錄音,一直到出現(xiàn)OVF(存儲器末尾)時,錄音停止。</p
40、><p><b> ?。?)指令碼</b></p><p> ISD4004的指令碼:</p><p><b> 表3.4.3.1</b></p><p> 注:快進只能在放音操作開始時選擇。</p><p> ?。?)SPI端口的控制位</p><p&
41、gt; 圖 3-6 SPI端口的控制位</p><p> ?。?)SPI控制寄存器 SPI控制寄存器控制器件的每個功能,如錄音、放音、信息檢索(快進)、上電/掉電、開始/停止操作、忽略地址指針等。</p><p> ISD4004的SPI控制寄存器:</p><p><b> 表3.4.3.2</b></p><p&
42、gt; 注:IAB置0時,錄/放操作從A9~A0地址開始。</p><p> 為了能連貫地錄/放到后續(xù)的存儲空間,在操作到達該行末之前,應發(fā)出第二個SPI指令將IAB置1,否則器件會在同一地址上反復循環(huán)。這個特點對語音提示功能很有用。RAC引腳和IAB位可用于信息管理。SPI端口簡單框圖如下:</p><p> 圖 3-7 SPI端口簡單框圖</p><p>
43、 3.4.4 語音放大模塊</p><p> LM386是美國國家半導體公司生產的音頻功率放大器,主要應用于低電壓消費類產品。為使外圍元件最少,電壓增益內置為20。但在1腳和8腳之間增加一只外接電阻和電容,便可將電壓增益調為任意值,直至 200。輸入端以地位參考,同時輸出端被自動偏置到電源電壓的一半,在6V電源電壓下,它的靜態(tài)功耗僅為24mW。</p><p> LM386的外形和引
44、腳的排列如右圖所示。引腳2為反相輸入端,3為同相輸入端;引腳5為輸出端;引腳6和4分別為電源和地;引腳1和8為電壓增益設定端;使用時在引腳7和地之間接旁路電容,通常取10μF。</p><p><b> LM386引腳圖:</b></p><p> 圖 3-8 LM386引腳圖</p><p> Lm386電路連接圖:</p>
45、<p> 圖 3-9 Lm386電路連接圖</p><p><b> 4 軟件設計</b></p><p><b> 4.1總程序流程圖</b></p><p> 圖 4-1 總程序流程圖</p><p><b> 4.2放音程序 </b></p&
46、gt;<p><b> N</b></p><p><b> Y</b></p><p><b> Y</b></p><p> N N</p><p><b> Y</b></p>
47、<p> 圖 4-2 放音流程圖 </p><p><b> 4.3 錄音程序</b></p><p><b> Y</b></p><p><b> N </b></p><p><b> N</b></p><
48、;p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p> 圖 4-3 錄音流程圖</p><p><b> 4.4電路調試</b></p><p>
49、電路調試是指利用基本的檢測儀器,檢查系統(tǒng)硬件中可能存在的故障??煞譃殪o態(tài)調試與動態(tài)調試兩步進行。</p><p> 靜態(tài)調試是指在系統(tǒng)未工作時進行硬件檢測。</p><p> 第一步:觀測。檢查電路板上的各種元件或者是電路焊接問題。</p><p> 第二步:萬用表測試。先用萬用表測試目測中發(fā)現(xiàn)的可能有疑問的連接點,再檢測各種電源與地線之間是否有短路現(xiàn)象。&l
50、t;/p><p> 第三步:加電檢測。給電路板板加電,檢測所有的插座或是器件的電源端是否為符合要求的值。</p><p><b> 4.5軟件調試</b></p><p> 軟件調試是指在對程序的C編程、連接、執(zhí)行過程中發(fā)現(xiàn)程序中存在的語法錯誤與邏輯錯誤并加以排除糾正的過程[8]。</p><p><b>
51、 5 總結</b></p><p> 我畢業(yè)設計的題目是公交車自動報站器的設計,經過幾個月的奮斗,終于完成了設計,使系統(tǒng)實現(xiàn)了自動報站功能。本系統(tǒng)功能強大,成本低,系統(tǒng)穩(wěn)定,無需人工介入,語音音質好,很好的實現(xiàn)了車輛報站的自動化,具有很強的實用性。系統(tǒng)選用ISD4004語音芯片,它的錄音數(shù)據被存放方法是通過ISD多級存儲專利技術實現(xiàn)的,用聲音和聲頻信號的自然形式直接存放在故態(tài)存儲器,從而提供高質量回
52、放語音的保真度,使得該系統(tǒng)與其他語音報站系統(tǒng)相比較,語音質量較好。另外,本設計仍然存在的許多的不足之處,比如它在報站時刻上不能十分的精確,存在一定的誤差。這些問題都需要在今后的研究工作中加以改進,使系統(tǒng)更完善,更好的為人們服務。</p><p> 最后還要感謝xx指導老師在我進行畢業(yè)設計過程中對我的悉心指導以及同學們對我的幫助,正是有了大家的幫助,我才能順利的完成畢業(yè)設計。在這里我衷心的對幫助過我的人表示感謝。
53、</p><p><b> [參考文獻]</b></p><p> [1]《電子系統(tǒng)設計(第三版)》何小艇.浙江大學出版社.2004</p><p> [2]《單片機原理與實踐指導》 鄧興成.機械工業(yè)出版社.2006</p><p> [3]《模擬電子技術基礎》 華成英,童詩白.高等教育出版社.2004&
54、lt;/p><p> [4]網站參考: protues仿真論壇</p><p> [5] 李正浩.單片機在 LED 數(shù)碼管顯示中的應用[J].試驗科學與技術.2006. 12</p><p> [6] 鄧興成.單片機原理與實踐指導[M].機械工業(yè)出版社.2010.2</p><p> [7] 余成波.單片機實用技術與應用[M].清華大學出
55、版社.2010.7</p><p> [8] 王平.單片機應用設計與制作:基于Keil和Proteus開發(fā)仿真平臺 .清華大學出版社.2012.1</p><p> The bus stops automatic system </p><p> [abstract] This design is mainly to solve how convenient
56、and accurate instructions approaching passengers, with automatic detection bus station, simulation and forecast station stops on vocals, the number of stops and the name of the text display function. System including mic
57、ro controller module, voice recording circuit, liquid crystal display module, the keyboard interface circuit, reset circuit and power supply. Systems use 51 SCM to control speech synthesis chip and LCD module. Platform d
58、ete</p><p> [Key words] Single-chip microcomputer,Voice prompt,Liquid crystal display,Bus stops </p><p><b> 附錄:源程序</b></p><p><b> 液晶初始化:</b></p>&l
59、t;p> #include"reg52.h"</p><p> #include"intrins.h"</p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> #define de
60、laynop() {_nop_();_nop_();_nop_();_nop_();}</p><p> sbit RS=P2^0;</p><p> sbit RW=P2^1;</p><p> sbit EN=P2^2;</p><p> bit LCD_busy_check();</p><p>
61、 void LCD_init();</p><p> void LCD_set_pos(uchar);</p><p> void LCD_Write_Command(uchar);</p><p> void LCD_write_data(uchar);</p><p> void delayms(uint ms)</p>
62、;<p><b> {</b></p><p><b> uchar t;</b></p><p> while(ms--) for(t=0;t<120;t++); </p><p><b> }</b></p><p> bit LCD_bus
63、y_check()</p><p><b> {</b></p><p> bit result;</p><p><b> RS=0;</b></p><p><b> RW=1;</b></p><p><b> EN=1;<
64、;/b></p><p> delaynop();</p><p> result=(bit)(P0 & 0x80);</p><p><b> EN=0;</b></p><p> return result;</p><p><b> }</b>
65、</p><p> void LCD_Write_Command(uchar cmd)</p><p><b> {</b></p><p> while(LCD_busy_check());</p><p><b> RS=0;</b></p><p><b&
66、gt; RW=0;</b></p><p><b> EN=0;</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> P0=cmd;</b><
67、/p><p> delaynop();</p><p><b> EN=1;</b></p><p> delaynop();</p><p><b> EN=0;</b></p><p><b> }</b></p><p&g
68、t; void LCD_write_data(uchar str)</p><p><b> {</b></p><p> while(LCD_busy_check());</p><p><b> RS=1;</b></p><p><b> RW=0;</b>&l
69、t;/p><p><b> EN=0;</b></p><p><b> P0=str;</b></p><p> delaynop();</p><p><b> EN=1;</b></p><p> delaynop();</p>
70、<p><b> EN=0;</b></p><p><b> }</b></p><p> void LCD_init()</p><p><b> {</b></p><p> delayms(5); LCD_Write_Command(0x38);&
71、lt;/p><p> delayms(5); LCD_Write_Command(0x0c);</p><p> delayms(5); LCD_Write_Command(0x06);</p><p> delayms(5); LCD_Write_Command(0x01);</p><p> delayms(5); </p>
72、;<p><b> }</b></p><p> void LCD_set_pos(uchar position)</p><p><b> {</b></p><p> LCD_Write_Command(position | 0x80);</p><p><b>
73、 }</b></p><p> ISD4004主程序:</p><p> #include <reg52.h> </p><p> sbit SS =P1^0; //片選 </p><p> sbit MOSI=P1^1; //數(shù)據輸入 </p><p> sbit MI
74、SO=P1^2; //數(shù)據輸出 </p><p> sbit SCLK=P1^3; //ISD4004時鐘 </p><p> sbit INT =P1^4; //中斷 </p><p> sbit LED =P1^7; //指示燈 </p><p> sbit LED1=P1^6; //指示燈:亮是錄音/不亮是放音
75、 </p><p> sbit PR =P3^3; //錄音和放音選擇開關 </p><p> sbit STOP=P3^4; //復位 </p><p> sbit AN =P3^5; //執(zhí)行 </p><p> void delay(unsigned int time) //延遲n微秒 </p>
76、<p><b> { </b></p><p> while(time!=0) </p><p><b> { </b></p><p><b> time--; </b></p><p><b> } </b></
77、p><p><b> } </b></p><p> void delayms(unsigned int time) //延遲n毫秒 </p><p><b> { </b></p><p> TMOD=0x01; </p><p> for(time;t
78、ime>0;time--) </p><p><b> { </b></p><p> TH0=0xfc; </p><p> TL0=0x18; </p><p><b> TR0=1; </b></p><p> while(TF0!=
79、1) </p><p><b> {;} </b></p><p><b> TF0=0; </b></p><p><b> TR0=0; </b></p><p><b> } </b></p><p&g
80、t;<b> } </b></p><p> void isd_send(unsigned char isdx)//spi串行發(fā)送子程序,8位數(shù)據 </p><p><b> { </b></p><p> unsigned char isx_counter; </p><p&g
81、t; SS=0;//ss=0,打開spi通信端</p><p> SCLK=0; </p><p> for(isx_counter=0;isx_counter<8;isx_counter++)//先發(fā)低位再發(fā)高位,依次發(fā)送。 </p><p><b> { </b></p><p> if(
82、(isdx&0x01)==1) </p><p> MOSI=1; </p><p><b> else </b></p><p> MOSI=0; </p><p> isdx=isdx>>1; </p><p> SCLK=1; </
83、p><p> delay(2); </p><p> SCLK=0; </p><p> delay(2); </p><p><b> } </b></p><p><b> } </b></p><p> void is
84、d_stop()//stop指令(停止當前操作) </p><p><b> { </b></p><p> delay(10); </p><p> isd_send(0x30); </p><p><b> SS=1; </b></p><p>
85、; delayms(50); </p><p><b> } </b></p><p> void isd_powerup()//發(fā)送上電指令 </p><p><b> { </b></p><p> delay(10); </p><p>&
86、lt;b> SS=0; </b></p><p> isd_send(0x20); </p><p><b> SS=1; </b></p><p> delayms(50); </p><p><b> } </b></p><p
87、> void isd_stopwrdn()//發(fā)送掉電指令 </p><p><b> { </b></p><p> delay(10); </p><p> isd_send(0x10); </p><p><b> SS=1; </b></p>
88、<p> delayms(50); </p><p><b> } </b></p><p> void isd_play()//發(fā)送play指令 </p><p><b> { </b></p><p><b> LED=0; </b>
89、;</p><p> isd_send(0xf0); </p><p><b> SS=1; </b></p><p><b> } </b></p><p> void isd_rec()//發(fā)送rec指令 </p><p><b> {
90、 </b></p><p><b> LED=0; </b></p><p> isd_send(0xb0); </p><p><b> SS=1; </b></p><p><b> } </b></p><p&g
91、t; void isd_setplay(unsigned char adl,unsigned char adh)//發(fā)送setplay指令 </p><p><b> { </b></p><p> delayms(1); </p><p> isd_send(adl); //發(fā)送放音起始地址低位 </p>
92、<p> delay(2); </p><p> isd_send(adh); //發(fā)送放音起始地址高位 </p><p> delay(2); </p><p> isd_send(0xe0); //發(fā)送setplay指令字節(jié) </p><p><b> SS=1; </b>&
93、lt;/p><p><b> } </b></p><p> void isd_setrec(unsigned char adl,unsigned char adh)//發(fā)送setrec指令 </p><p><b> { </b></p><p> delayms(1); &l
94、t;/p><p> isd_send(adl); //發(fā)送放音起始地址低位 </p><p> delay(2); </p><p> isd_send(adh); //發(fā)送放音起始地址高位 </p><p> delay(2); </p><p> isd_send(0xa0); //發(fā)送set
95、play指令字節(jié) </p><p><b> SS=1; </b></p><p><b> } </b></p><p> void isd_overflow()//芯片溢出,LED閃爍提醒停止錄音 </p><p><b> { </b><
96、/p><p> while(AN==0) </p><p><b> { </b></p><p><b> LED=1; </b></p><p> delayms(300); </p><p><b> LED=0; </b>
97、;</p><p> delayms(300); </p><p><b> } </b></p><p><b> } </b></p><p> unsigned char chk_isdovf()//檢查芯片是否溢出(讀OVF,并返回OVF值) </p>
98、<p><b> { </b></p><p><b> SS=0; </b></p><p> delay(2); </p><p> SCLK=0; </p><p> delay(2); </p><p> SCLK=1;
99、</p><p> SCLK=0; </p><p> delay(2); </p><p> if(MISO==1) </p><p><b> { </b></p><p> SCLK=0; </p><p> SS=1; //關閉spi
100、通信端 </p><p> isd_stop(); //發(fā)送stop指令 </p><p> return 1; //OVF為1,返回1 </p><p><b> } </b></p><p><b> else </b></p><p><
101、;b> { </b></p><p> SCLK=0; </p><p> SS=1; //關閉spi通信端 </p><p> isd_stop(); //發(fā)送stop指令 </p><p> return 0; //OVF為0,返回0 </p><p><b&g
102、t; } </b></p><p><b> } </b></p><p> void main(void) </p><p><b> { </b></p><p><b> unsigned </b></p><p&
103、gt; char ovflog; </p><p> while(1) </p><p><b> { </b></p><p> if(PR==0) {delayms(8);LED1=~LED1;while(PR==0);} </p><p> if(LED1==0)//如果PR=0則轉入錄音
104、部分 </p><p><b> { </b></p><p> if(AN==0) </p><p><b> { </b></p><p> isd_powerup(); //AN鍵按下,ISD上電并延遲50ms </p><p> isd_
105、stopwrdn(); </p><p> isd_powerup(); </p><p> LED1=0;//表示錄音模式 </p><p> delayms(500); //延遲500ms錄音 </p><p> isd_setrec(0x00,0x00); //發(fā)送0x0000h地址的setplay指令 &l
106、t;/p><p><b> do </b></p><p><b> { </b></p><p> isd_rec(); //發(fā)送rec指令 </p><p> while(AN==0) //等待錄音完畢 </p><p><b> {
107、</b></p><p> if(INT==0) //如果芯片溢出,進行LED閃爍提示, </p><p> isd_overflow(); //如果取消錄音(松開AN鍵)則停止錄音,芯片復位 </p><p><b> } </b></p><p> if(INT==0) </
108、p><p><b> break; </b></p><p> LED=1; //錄音完畢,LED熄滅 </p><p> isd_stop(); //發(fā)送停止命令 </p><p> while(AN==1) //如果AN再次按下,開始錄制下一段語音 </p><p><
109、;b> { </b></p><p> if(isd_stop==0) //如果按下STOP按鍵,則芯片復位 </p><p><b> break; </b></p><p> if(AN==0) </p><p> delayms(500); </p>&
110、lt;p><b> } </b></p><p><b> } </b></p><p> while(AN==0); </p><p><b> } </b></p><p><b> } </b></p>
111、<p> if(LED1==1)//如果PR=0則轉入放音部分 //如果PR==1則轉入放音部分 </p><p><b> { </b></p><p> if(AN==0) </p><p><b> { </b></p><p> isd_powerup
112、(); //AN鍵按下,ISD上電并延遲50ms </p><p> isd_stopwrdn(); </p><p> isd_powerup(); </p><p> LED1=1;//表示錄音模式 </p><p> while(AN==0) </p><p><b> {
113、;} </b></p><p> isd_setplay(0x00,0x00); //發(fā)送setplay指令,從0x0000地址開始放音 </p><p><b> do </b></p><p><b> { </b></p><p> isd_play(); /
114、/發(fā)送放音指令 </p><p> delay(20); </p><p> while(INT==1) //等待放音完畢的EOM中斷信號 </p><p><b> {;} </b></p><p><b> LED=1; </b></p><p&g
115、t; isd_stop(); //放音完畢,發(fā)送stop指令 </p><p> if (ovflog=chk_isdovf()) //檢查芯片是否溢出 ,如溢出則停止放音,芯片復位 </p><p><b> break; </b></p><p> while(AN==1) //等待AN鍵再次按下 </p>
116、;<p><b> { </b></p><p> if(isd_stop==0) </p><p><b> break; </b></p><p> if(AN==0) </p><p> delayms(20); </p><p&
117、gt;<b> } </b></p><p><b> } </b></p><p> while(AN==0); // AN鍵再次按下,播放下一段語音 </p><p> // isd_stop(); </p><p> // isd_stopwrdn(); <
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公交車自動報站系統(tǒng)畢業(yè)設計
- 公交車自動報站的系統(tǒng)畢業(yè)設計
- 畢業(yè)設計---公交車自動報站系統(tǒng)的設計
- 公交車自動報站系統(tǒng)的設計-畢業(yè)設計
- 畢業(yè)設計--公交車智能報站
- 畢業(yè)設計---公交車報站系統(tǒng)的設計
- 畢業(yè)設計--公交車自動報站系統(tǒng)的硬件設計原理
- 公交車自動報站系統(tǒng)畢業(yè)論文
- 畢業(yè)設計--基于單片機的公交車自動報站系統(tǒng)
- 公交車自動報站系統(tǒng)開題報告
- 畢業(yè)設計--基于單片機的公交車自動報站系統(tǒng)
- 畢業(yè)設計基于單片機的公交車自動報站系統(tǒng)
- 外文翻譯--公交車自動報站系統(tǒng)
- 基于單片機的公交車自動報站系統(tǒng)設計畢業(yè)設計
- 公交車語音報站器的設計【畢業(yè)設計】
- 公交車站自動報站器 畢業(yè)設計
- 畢業(yè)設計--基于單片機的公交車報站系統(tǒng)設計
- 畢業(yè)設計-基于單片機的公交車報站系統(tǒng)設計
- 基于單片機的公交車報站系統(tǒng)畢業(yè)設計
- 基于單片機公交車語音報站系統(tǒng)畢業(yè)設計
評論
0/150
提交評論