方杰 胡春雷



摘要:當今社會公交車成為一種必不可少的交通工具,公交車報站器在公交事業中占有舉足輕重的地位,它直接影響到公交車的服務質量。介紹了一種可視/可聽公交車自動報站系統的設計,以AT89S52單片機為核心,通過8255芯片擴展外圍接口,采用ISD4003語音芯片進行語音播放,同時使用LED點陣電路進行漢字顯示,實現了公交車的語音自動報站以及漢字顯示提示的功能。經過實際測試,報站系統運行穩定,抗干擾能力強,并且操作簡便,成本低廉,適合于公交車領域的普遍應用推廣。
關鍵詞:AT89S52;8255A;LED顯示;語音報站;ISD4003
中圖分類號:TP393? ? ? 文獻標識碼:A? ? ? 文章編號:1009-3044(2019)02-0221-03
The Visible and Audible Bus Automatic Reporting Station System Design and Implementation Based on MCS-51 MCU
FANG Jie,HU Chun-lei
(AnHui Vocational And Technical College, Hefei 230011,China)
Abstract: Nowadays, public bus has become an indispensable means of transport. The bus station is in the public transport industry occupies a pivotal position, it directly affects the quality of service of the bus. This paper introduces a Visible and audible bus automatic report station system design, by AT89S52 microcontroller as the core, through the 8255 chip expansion peripheral interface, the ISD4003 voice chip for voice playback, also use circuit of LED dot matrix Chinese character display, achieve hint as to the function of bus voice automatic newspaper station and Chinese character display. Through the actual test, the newspaper station system has stable operation, strong anti-interference ability, and simple operation, low cost, suitable for the general application in the field of public transport.
Key words: AT89S52;8255A;LED display; Reporting station;ISD4003
1 引言
公共汽車為外出的人們提供了方便快捷的服務,而公共汽車的報站及顯示就直接影響服務的質量。近年來,隨著科學技術的日益發展和進步,單片機技術已經在許多領域得到了廣泛的應用[1]。在聲學領域,微機技術與各種語音芯片相結合[2],即可完成語音的合成技術,使得汽車報站器的實現成為可能。同時,單片機與點陣式顯示器的結合,完成了漢字顯示的功能[3][4],從而為市民提供了更加人性化的服務。鑒于公交車報站系統的廣泛應用,并結合公交車輛的使用特點及實際營運環境,我們設計了一種由單片機控制的公交車自動報站系統。本文通過設計一個實際的可視/可聽公交車自動報站系統,詳細地介紹了MCS-51單片機控制語音報站和漢字顯示的全過程,從軟件設計方面來說,更加熟悉了51單片機的指令及單片機C語音程序設計。從硬件電路設計方面來說,實現了用8255并行接口芯片擴展單片機輸入輸出口,解決了如何與語音芯片連接以及怎樣解決電源抗干擾等問題。
2 系統總體設計思想
一個單片機應用系統的設計,往往既包括硬件設計又包括軟件設計[5][6]。單片機應用系統的軟件和硬件之間有密切的相互制約的聯系。下面將對本系統的軟硬件設計思想進行簡單的介紹。
2.1系統硬件設計思想
MCS-51系列單片機產品有8051,8031,8751等型號,考慮到系統程序的稍大,本系統選擇ATMEL公司的具有8K程序存儲空間的AT89S52單片機作為主控芯片。本系統主要完成漢字顯示和語音報站功能,還要與司機進行交互,因此還要包括鍵盤模塊。
由于MCS-51系列單片機只有4個8位的并行I/O端口,P0與P2分別作為單片機尋址外部存儲器的低8位和高8位地址。P0口作為地址/數據分時復用口。P3口具有第二功能,為系統提供一些控制信號。對于本系統來說,單片機的并行口是遠遠不夠的,必須進行擴展。本文使用并行可編程接口8255來擴展單片機的并行口,用于漢字顯示的行選。由于需要16位行選,故需要使用8255兩個并行口,本文設計使用A口和B口。漢字顯示的列選由P1口的低4位通過4-16譯碼器芯片74LS154來控制。P1口的其他引腳用于與ISD4003進行連接,以與語音芯片進行通信。考慮到本系統按鍵不多,所以直接用P2口作為按鍵輸入,而未采用矩陣式鍵盤電路。單片機與外圍芯片連接情況如圖1所示。
2.2 系統軟件設計思想
本系統實現的主要功能是語音報站和漢字顯示,在公交車進出站時播放相應的語音及顯示相應的信息以提醒乘客。系統軟件設計采用模塊化結構。整個系統程序由主程序、鍵盤掃描、鍵盤處理、漢字顯示、數據塊選擇、數據傳送、語音報站等個子模塊組成,如圖2所示。
(1) 鍵盤掃描:
傳統的鍵盤掃描程序一般分為兩種掃描方式:一種是循環掃描方式,另一種是中斷掃描方式,這兩種鍵盤掃描方式都占用一定的CPU時間。本文設計的鍵盤掃描程序,通過利用主程序的執行來達到延時消抖目的,主程序每執行一次就調用一次鍵盤掃描程序,鍵盤掃描程序將本次獲得鍵值與上次的鍵值進行比較,若相等則讓計數器加一,當計數器累加到一定值時(例如30)則認為該鍵值對應的鍵的確被按下,完成按鍵掃描。這種鍵盤掃描方式不占用CPU時間,可以使單片機的工作效率更高。
(2)數據傳送:
為了實現漢字的動態移動顯示,我們將漢字的字型碼放在一個數組中,并定義一個大小為32字節的顯示緩沖區,數據傳送程序就只負責完成將字碼往顯示緩沖區里送,每間隔一定時間將更新顯示緩沖區中的內容,從而使點陣顯示新的內容。具體的顯示由定時中斷服務子程序來完成,這樣可以使顯示程序不僅不占用CPU時間,還可與其他程序并行工作而互不干擾,從而使顯示更加穩定,顯示的效果更好。
(3)漢字顯示:
此模塊采用一片8255芯片,將其并行接口的輸出信號作為行選,將一片74LS154譯碼器的輸出作為列選,用單片機P1口的低四位作為74LS154的輸入,用P1.6作為74LS154的選通信號。定時中斷服務程序負責從顯示緩沖區往8255送數據從而使點陣顯示相應的漢字[2][3],由于顯示緩沖區中的內容是有規律的不斷更新的,從而能夠用四片8×8點陣式LED實現漢字的滾動顯示。
(4)鍵盤處理:
對鍵盤掃描程序所得到的鍵值進行判斷,確定哪個鍵按下,從而執行相應的按鍵處理子程序。例如若是報站鍵按下,則調用報站子程序進行語音報站。
(5)數據塊選擇:
根據報站計數器的值來選擇對應的數據塊,使數據傳送程序能夠從指定的數據塊傳送數據,為顯示程序準備好數據。
(6)語音報站:
各站的報站語音是事先通過錄音程序錄進ISD4003的指定地址的,語音報站子程序是根據全局變量count(報站計數器)的值去取相應的語音地址,當按下報站鍵、快退鍵將會改變count的值,count的每個值都對應一個放音的地址,由該地址來組成16位從指定地址放音的指令,該指令再由單片機發往語音芯片,從而使語音芯片播放相應的語音。
3 系統程序設計
本系統單片機程序設計采用的是C語言并結合匯編語言,其中漢字顯示部分采用定時中斷方式,主程序完成中斷準備工作并進行按鍵掃描和處理。
3.1 主程序設計
系統軟件設計采用模塊化結構[7]。主程序由鍵盤掃描程序、鍵盤處理程序、數據塊選擇程序、數據傳輸程序組成。具體的主程序流程圖見圖3所示。
3.2按鍵掃描程序
在設計鍵盤掃描程序時,我們通過利用主程序的執行來達到延時消抖的目的,在鍵盤掃描程序中我們用了3個全局變量,分別是kbuf,kcnt和kval。kbuf用于存放每次掃描時得到的鍵值,kcnt用于對kbuf進行計數,kval用于存放最終確定的鍵值。主程序每執行一次就調用一次鍵盤掃描程序,在鍵盤掃描程序中將本次獲得鍵值與上次kbuf中的鍵值進行比較,若相等則使kcnt加1,否則把新的鍵值送入kbuf中,并將kcnt清零。若當kcnt累加到一定數值,例如累加到30時,則此時可認為某鍵的確按下了,此時將kbuf中的值送入kval中,以完成按鍵掃描。具體的鍵盤掃描程序流程圖如圖4所示。這種鍵盤掃描方式不占用CPU時間,可以使單片機的工作效率更高。
3.3按鍵處理程序
對鍵盤掃描程序所得到的鍵值進行判斷,確定哪個鍵按下,從而執行相應的按鍵處理子程序。若是報站鍵按下,則調用報站子程序進行語音報站;若是上下行切換鍵按下,則進行上下行切換處理;若是快退鍵按下,則調用快退處理程序;若是文明用語鍵按下,則發送相應的語音指令使ISD4003播放相應的語音。具體的按鍵處理程序流程圖如圖5所示。
3.4語音報站程序
語音報站程序:各站的報站語音是事先通過錄音程序錄進ISD4003的指定地址的,語音報站子程序是根據全局變量count(報站計數器)的值去取相應的語音地址,當按下報站鍵、快退鍵將會改變count 的值,count的每個值都對應一個放音的地址,由該地址來組成16位從指定地址放音的指令,該指令再由單片機發往語音芯片,從而使語音芯片放相應的語音。具體的報站程序流程圖見圖6所示。
3.5數據塊選擇程序
系統定義了一個指示數據塊起始地址的指針和一個表示數據塊大小的全局變量,數據塊傳送程序根據報站計數器的值來給該指針及變量賦相應的值,使數據傳送程序能夠從指定的數據塊傳送數據,為顯示程序準備好數據。
4? 結束語
本文介紹了一種公交車自動報站系統的設計方案,利用89S52單片機作為CPU來進行總體控制,通過語音控制電路操作ISD4003語音芯片進行各種提示語音的播放和錄制,同時使用LED點陣進行漢字顯示,在系統設計過程中,為了便于擴展和更改,軟件的設計采用模塊化結構,使程序設計的邏輯關系更加簡潔明了,使硬件在軟件的控制下協調運作,最終實現了一種可視可聽的城市公交車的語音自動報站系統。經過實際測試,報站系統運行穩定,抗干擾能力強,并且操作簡便,成本低廉,適合于公交車領域的普遍應用推廣。
參考文獻:
[1] 胡漢才.單片機原理及其接口技術[M].北京:清華大學出版社,1996(3).
[2] 劉永平. 基于SPI總線的PIC與ISD4003語音接口電路[J].微計算機信息,2006(26).
[3] 豐煥亭. 基于Proteus的LED漢字顯示屏設計[J].中國科技信息,2011(21).
[4] 李高.? 16×16點陣的制作[J]. 電子制作,2008(02).
[5] 王慶利等.單片機設計案例實踐教程[M].北京:北京郵電大學出版社,2008(7).
[6] 張彌左等.微型計算機接口技術[M].北京:機械工業出版社,2004(8).
[7] 陳光東.單片微型計算機原理及其C語言程序設計[M].武漢:華中科技大學出版社,2004.