方杰 胡春雷
摘要:當(dāng)今社會公交車成為一種必不可少的交通工具,公交車報(bào)站器在公交事業(yè)中占有舉足輕重的地位,它直接影響到公交車的服務(wù)質(zhì)量。介紹了一種可視/可聽公交車自動報(bào)站系統(tǒng)的設(shè)計(jì),以AT89S52單片機(jī)為核心,通過8255芯片擴(kuò)展外圍接口,采用ISD4003語音芯片進(jìn)行語音播放,同時使用LED點(diǎn)陣電路進(jìn)行漢字顯示,實(shí)現(xiàn)了公交車的語音自動報(bào)站以及漢字顯示提示的功能。經(jīng)過實(shí)際測試,報(bào)站系統(tǒng)運(yùn)行穩(wěn)定,抗干擾能力強(qiáng),并且操作簡便,成本低廉,適合于公交車領(lǐng)域的普遍應(yīng)用推廣。
關(guān)鍵詞:AT89S52;8255A;LED顯示;語音報(bào)站;ISD4003
中圖分類號:TP393? ? ? 文獻(xiàn)標(biāo)識碼: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 引言
公共汽車為外出的人們提供了方便快捷的服務(wù),而公共汽車的報(bào)站及顯示就直接影響服務(wù)的質(zhì)量。近年來,隨著科學(xué)技術(shù)的日益發(fā)展和進(jìn)步,單片機(jī)技術(shù)已經(jīng)在許多領(lǐng)域得到了廣泛的應(yīng)用[1]。在聲學(xué)領(lǐng)域,微機(jī)技術(shù)與各種語音芯片相結(jié)合[2],即可完成語音的合成技術(shù),使得汽車報(bào)站器的實(shí)現(xiàn)成為可能。同時,單片機(jī)與點(diǎn)陣式顯示器的結(jié)合,完成了漢字顯示的功能[3][4],從而為市民提供了更加人性化的服務(wù)。鑒于公交車報(bào)站系統(tǒng)的廣泛應(yīng)用,并結(jié)合公交車輛的使用特點(diǎn)及實(shí)際營運(yùn)環(huán)境,我們設(shè)計(jì)了一種由單片機(jī)控制的公交車自動報(bào)站系統(tǒng)。本文通過設(shè)計(jì)一個實(shí)際的可視/可聽公交車自動報(bào)站系統(tǒng),詳細(xì)地介紹了MCS-51單片機(jī)控制語音報(bào)站和漢字顯示的全過程,從軟件設(shè)計(jì)方面來說,更加熟悉了51單片機(jī)的指令及單片機(jī)C語音程序設(shè)計(jì)。從硬件電路設(shè)計(jì)方面來說,實(shí)現(xiàn)了用8255并行接口芯片擴(kuò)展單片機(jī)輸入輸出口,解決了如何與語音芯片連接以及怎樣解決電源抗干擾等問題。
2 系統(tǒng)總體設(shè)計(jì)思想
一個單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì),往往既包括硬件設(shè)計(jì)又包括軟件設(shè)計(jì)[5][6]。單片機(jī)應(yīng)用系統(tǒng)的軟件和硬件之間有密切的相互制約的聯(lián)系。下面將對本系統(tǒng)的軟硬件設(shè)計(jì)思想進(jìn)行簡單的介紹。
2.1系統(tǒng)硬件設(shè)計(jì)思想
MCS-51系列單片機(jī)產(chǎn)品有8051,8031,8751等型號,考慮到系統(tǒng)程序的稍大,本系統(tǒng)選擇ATMEL公司的具有8K程序存儲空間的AT89S52單片機(jī)作為主控芯片。本系統(tǒng)主要完成漢字顯示和語音報(bào)站功能,還要與司機(jī)進(jìn)行交互,因此還要包括鍵盤模塊。
由于MCS-51系列單片機(jī)只有4個8位的并行I/O端口,P0與P2分別作為單片機(jī)尋址外部存儲器的低8位和高8位地址。P0口作為地址/數(shù)據(jù)分時復(fù)用口。P3口具有第二功能,為系統(tǒng)提供一些控制信號。對于本系統(tǒng)來說,單片機(jī)的并行口是遠(yuǎn)遠(yuǎn)不夠的,必須進(jìn)行擴(kuò)展。本文使用并行可編程接口8255來擴(kuò)展單片機(jī)的并行口,用于漢字顯示的行選。由于需要16位行選,故需要使用8255兩個并行口,本文設(shè)計(jì)使用A口和B口。漢字顯示的列選由P1口的低4位通過4-16譯碼器芯片74LS154來控制。P1口的其他引腳用于與ISD4003進(jìn)行連接,以與語音芯片進(jìn)行通信。考慮到本系統(tǒng)按鍵不多,所以直接用P2口作為按鍵輸入,而未采用矩陣式鍵盤電路。單片機(jī)與外圍芯片連接情況如圖1所示。
2.2 系統(tǒng)軟件設(shè)計(jì)思想
本系統(tǒng)實(shí)現(xiàn)的主要功能是語音報(bào)站和漢字顯示,在公交車進(jìn)出站時播放相應(yīng)的語音及顯示相應(yīng)的信息以提醒乘客。系統(tǒng)軟件設(shè)計(jì)采用模塊化結(jié)構(gòu)。整個系統(tǒng)程序由主程序、鍵盤掃描、鍵盤處理、漢字顯示、數(shù)據(jù)塊選擇、數(shù)據(jù)傳送、語音報(bào)站等個子模塊組成,如圖2所示。
(1) 鍵盤掃描:
傳統(tǒng)的鍵盤掃描程序一般分為兩種掃描方式:一種是循環(huán)掃描方式,另一種是中斷掃描方式,這兩種鍵盤掃描方式都占用一定的CPU時間。本文設(shè)計(jì)的鍵盤掃描程序,通過利用主程序的執(zhí)行來達(dá)到延時消抖目的,主程序每執(zhí)行一次就調(diào)用一次鍵盤掃描程序,鍵盤掃描程序?qū)⒈敬潍@得鍵值與上次的鍵值進(jìn)行比較,若相等則讓計(jì)數(shù)器加一,當(dāng)計(jì)數(shù)器累加到一定值時(例如30)則認(rèn)為該鍵值對應(yīng)的鍵的確被按下,完成按鍵掃描。這種鍵盤掃描方式不占用CPU時間,可以使單片機(jī)的工作效率更高。
(2)數(shù)據(jù)傳送:
為了實(shí)現(xiàn)漢字的動態(tài)移動顯示,我們將漢字的字型碼放在一個數(shù)組中,并定義一個大小為32字節(jié)的顯示緩沖區(qū),數(shù)據(jù)傳送程序就只負(fù)責(zé)完成將字碼往顯示緩沖區(qū)里送,每間隔一定時間將更新顯示緩沖區(qū)中的內(nèi)容,從而使點(diǎn)陣顯示新的內(nèi)容。具體的顯示由定時中斷服務(wù)子程序來完成,這樣可以使顯示程序不僅不占用CPU時間,還可與其他程序并行工作而互不干擾,從而使顯示更加穩(wěn)定,顯示的效果更好。
(3)漢字顯示:
此模塊采用一片8255芯片,將其并行接口的輸出信號作為行選,將一片74LS154譯碼器的輸出作為列選,用單片機(jī)P1口的低四位作為74LS154的輸入,用P1.6作為74LS154的選通信號。定時中斷服務(wù)程序負(fù)責(zé)從顯示緩沖區(qū)往8255送數(shù)據(jù)從而使點(diǎn)陣顯示相應(yīng)的漢字[2][3],由于顯示緩沖區(qū)中的內(nèi)容是有規(guī)律的不斷更新的,從而能夠用四片8×8點(diǎn)陣式LED實(shí)現(xiàn)漢字的滾動顯示。
(4)鍵盤處理:
對鍵盤掃描程序所得到的鍵值進(jìn)行判斷,確定哪個鍵按下,從而執(zhí)行相應(yīng)的按鍵處理子程序。例如若是報(bào)站鍵按下,則調(diào)用報(bào)站子程序進(jìn)行語音報(bào)站。
(5)數(shù)據(jù)塊選擇:
根據(jù)報(bào)站計(jì)數(shù)器的值來選擇對應(yīng)的數(shù)據(jù)塊,使數(shù)據(jù)傳送程序能夠從指定的數(shù)據(jù)塊傳送數(shù)據(jù),為顯示程序準(zhǔn)備好數(shù)據(jù)。
(6)語音報(bào)站:
各站的報(bào)站語音是事先通過錄音程序錄進(jìn)ISD4003的指定地址的,語音報(bào)站子程序是根據(jù)全局變量count(報(bào)站計(jì)數(shù)器)的值去取相應(yīng)的語音地址,當(dāng)按下報(bào)站鍵、快退鍵將會改變count的值,count的每個值都對應(yīng)一個放音的地址,由該地址來組成16位從指定地址放音的指令,該指令再由單片機(jī)發(fā)往語音芯片,從而使語音芯片播放相應(yīng)的語音。
3 系統(tǒng)程序設(shè)計(jì)
本系統(tǒng)單片機(jī)程序設(shè)計(jì)采用的是C語言并結(jié)合匯編語言,其中漢字顯示部分采用定時中斷方式,主程序完成中斷準(zhǔn)備工作并進(jìn)行按鍵掃描和處理。
3.1 主程序設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)采用模塊化結(jié)構(gòu)[7]。主程序由鍵盤掃描程序、鍵盤處理程序、數(shù)據(jù)塊選擇程序、數(shù)據(jù)傳輸程序組成。具體的主程序流程圖見圖3所示。
3.2按鍵掃描程序
在設(shè)計(jì)鍵盤掃描程序時,我們通過利用主程序的執(zhí)行來達(dá)到延時消抖的目的,在鍵盤掃描程序中我們用了3個全局變量,分別是kbuf,kcnt和kval。kbuf用于存放每次掃描時得到的鍵值,kcnt用于對kbuf進(jìn)行計(jì)數(shù),kval用于存放最終確定的鍵值。主程序每執(zhí)行一次就調(diào)用一次鍵盤掃描程序,在鍵盤掃描程序中將本次獲得鍵值與上次kbuf中的鍵值進(jìn)行比較,若相等則使kcnt加1,否則把新的鍵值送入kbuf中,并將kcnt清零。若當(dāng)kcnt累加到一定數(shù)值,例如累加到30時,則此時可認(rèn)為某鍵的確按下了,此時將kbuf中的值送入kval中,以完成按鍵掃描。具體的鍵盤掃描程序流程圖如圖4所示。這種鍵盤掃描方式不占用CPU時間,可以使單片機(jī)的工作效率更高。
3.3按鍵處理程序
對鍵盤掃描程序所得到的鍵值進(jìn)行判斷,確定哪個鍵按下,從而執(zhí)行相應(yīng)的按鍵處理子程序。若是報(bào)站鍵按下,則調(diào)用報(bào)站子程序進(jìn)行語音報(bào)站;若是上下行切換鍵按下,則進(jìn)行上下行切換處理;若是快退鍵按下,則調(diào)用快退處理程序;若是文明用語鍵按下,則發(fā)送相應(yīng)的語音指令使ISD4003播放相應(yīng)的語音。具體的按鍵處理程序流程圖如圖5所示。
3.4語音報(bào)站程序
語音報(bào)站程序:各站的報(bào)站語音是事先通過錄音程序錄進(jìn)ISD4003的指定地址的,語音報(bào)站子程序是根據(jù)全局變量count(報(bào)站計(jì)數(shù)器)的值去取相應(yīng)的語音地址,當(dāng)按下報(bào)站鍵、快退鍵將會改變count 的值,count的每個值都對應(yīng)一個放音的地址,由該地址來組成16位從指定地址放音的指令,該指令再由單片機(jī)發(fā)往語音芯片,從而使語音芯片放相應(yīng)的語音。具體的報(bào)站程序流程圖見圖6所示。
3.5數(shù)據(jù)塊選擇程序
系統(tǒng)定義了一個指示數(shù)據(jù)塊起始地址的指針和一個表示數(shù)據(jù)塊大小的全局變量,數(shù)據(jù)塊傳送程序根據(jù)報(bào)站計(jì)數(shù)器的值來給該指針及變量賦相應(yīng)的值,使數(shù)據(jù)傳送程序能夠從指定的數(shù)據(jù)塊傳送數(shù)據(jù),為顯示程序準(zhǔn)備好數(shù)據(jù)。
4? 結(jié)束語
本文介紹了一種公交車自動報(bào)站系統(tǒng)的設(shè)計(jì)方案,利用89S52單片機(jī)作為CPU來進(jìn)行總體控制,通過語音控制電路操作ISD4003語音芯片進(jìn)行各種提示語音的播放和錄制,同時使用LED點(diǎn)陣進(jìn)行漢字顯示,在系統(tǒng)設(shè)計(jì)過程中,為了便于擴(kuò)展和更改,軟件的設(shè)計(jì)采用模塊化結(jié)構(gòu),使程序設(shè)計(jì)的邏輯關(guān)系更加簡潔明了,使硬件在軟件的控制下協(xié)調(diào)運(yùn)作,最終實(shí)現(xiàn)了一種可視可聽的城市公交車的語音自動報(bào)站系統(tǒng)。經(jīng)過實(shí)際測試,報(bào)站系統(tǒng)運(yùn)行穩(wěn)定,抗干擾能力強(qiáng),并且操作簡便,成本低廉,適合于公交車領(lǐng)域的普遍應(yīng)用推廣。
參考文獻(xiàn):
[1] 胡漢才.單片機(jī)原理及其接口技術(shù)[M].北京:清華大學(xué)出版社,1996(3).
[2] 劉永平. 基于SPI總線的PIC與ISD4003語音接口電路[J].微計(jì)算機(jī)信息,2006(26).
[3] 豐煥亭. 基于Proteus的LED漢字顯示屏設(shè)計(jì)[J].中國科技信息,2011(21).
[4] 李高.? 16×16點(diǎn)陣的制作[J]. 電子制作,2008(02).
[5] 王慶利等.單片機(jī)設(shè)計(jì)案例實(shí)踐教程[M].北京:北京郵電大學(xué)出版社,2008(7).
[6] 張彌左等.微型計(jì)算機(jī)接口技術(shù)[M].北京:機(jī)械工業(yè)出版社,2004(8).
[7] 陳光東.單片微型計(jì)算機(jī)原理及其C語言程序設(shè)計(jì)[M].武漢:華中科技大學(xué)出版社,2004.