【正文】
第3章 系統(tǒng)硬件 設(shè)計(jì)思想本次設(shè)計(jì)主要是利用AT89C51單片機(jī)作為CPU來進(jìn)行總體控制,通過語音芯片ISD4004組成的語音控制電路能夠建立多段語音庫信息,并且可以對(duì)這些段的語音信息進(jìn)行自由的組合,形成變化多樣的語音提示信息,同時(shí)使用LCD1602液晶顯示電路進(jìn)行字符顯示,能夠?qū)崿F(xiàn)公交車的語音報(bào)站及字符顯示。因此當(dāng)公交車到達(dá)某站時(shí)通過鍵盤來控制本系統(tǒng)進(jìn)行工作,通過語音輸出電路進(jìn)行語音報(bào)站,CPU同時(shí)通過程序讀取字符信息送入LCD液晶顯示電路進(jìn)行液晶顯示[8]。由于Proteus軟件的限制,無法對(duì)ISD4004語音芯片進(jìn)行仿真,從而在此處我選用了LED燈來代替語音芯片,當(dāng)按鍵按下時(shí),相對(duì)應(yīng)的LED燈點(diǎn)亮。在此次軟件設(shè)計(jì)過程中,總共有4個(gè)按鍵,k1:HuanyingChengzuo,k2:上一站,k3:下一站,k4:謝謝乘坐。當(dāng)按下k4時(shí),LCD上顯示“XiexieChengzuo”。(說明:1為高電平、0為低電平)。LCD1602液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。圖 系統(tǒng)原理圖仿真在將12864與LCD1602進(jìn)行對(duì)比后,我選擇了LCD1602液晶顯示模,因?yàn)?602實(shí)現(xiàn)起來較為簡單,也很實(shí)用,在兩個(gè)能夠達(dá)到類似功能的時(shí)候,我選擇了1602,不過唯一的缺點(diǎn)就是1602不能顯示漢字。 元器件選擇在本次設(shè)計(jì)中,我主要選擇的器件有LCD1602,語音模塊ISD4004,按鍵模塊,以及AT89C51的最小系統(tǒng)。因此對(duì)于LCD液晶顯示模塊我選擇了LCD1602。其次,快速閃存作為存儲(chǔ)介質(zhì),無需電源可保存數(shù)據(jù)長達(dá)100年,重復(fù)記錄10000次以上。同時(shí)ISD4004開發(fā)應(yīng)用具有所需外圍電路簡單的優(yōu)點(diǎn)。除此之外,由于身邊有同學(xué)用過這個(gè)芯片,對(duì)它比較了解,如果我遇到問題了,可以有人請(qǐng)教。按鍵模塊比較簡單,因?yàn)槲抑恍枰?個(gè)按鍵而已,所以無論是三個(gè)獨(dú)立的按鍵,還是一個(gè)按鍵模塊,只要能實(shí)現(xiàn)我要的功能都可以。AT89C51單片機(jī)最小系統(tǒng)是上課上過的內(nèi)容對(duì)此比較熟悉,同時(shí)本次設(shè)計(jì)也是針對(duì)單片機(jī)的公交車語音報(bào)站系統(tǒng)的設(shè)計(jì),而且實(shí)驗(yàn)室有現(xiàn)成的資源可以利用,所以毫無疑問,主控系統(tǒng)就選擇了AT89C51最小系統(tǒng)。單片機(jī)又稱單片微控制器,是在一塊芯片中集成了CPU(中央處理器)、RAM(數(shù)據(jù)存儲(chǔ)器)、ROM(程序存儲(chǔ)器)、定時(shí)器/計(jì)數(shù)器和多種功能的I/O(輸入/輸出)接口等一臺(tái)計(jì)算機(jī)所需要的基本功能部件,從而可以完成復(fù)雜的運(yùn)算、邏輯控制、通信等功能。在本次設(shè)計(jì)中,AT89C51作為系統(tǒng)的CPU來對(duì)語音模塊,液晶顯示模塊,按鍵模塊進(jìn)行總體的控制。為語音模塊提供電源。圖 ISD4004語音模塊與51的實(shí)物連接圖 硬件連接的幾點(diǎn)說明:1) 串口工作于方式0發(fā)送方式,此時(shí)高電平有效。3) 自動(dòng)靜噪端AMCAP通過1uF電容接地,XCLK接地,使用內(nèi)部時(shí)鐘。錄音時(shí)按下k4,可將錄音地址后移100,存放另一段錄音片段。其實(shí)用LCD顯示一個(gè)字符時(shí)比較復(fù)雜,因?yàn)橐粋€(gè)字符由68或88點(diǎn)陣組成,既要找到和顯示屏幕上某幾個(gè)位置對(duì)應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點(diǎn)亮,為“0”的不亮。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號(hào)及每行的列數(shù)找出顯示RAM對(duì)應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對(duì)應(yīng)的代碼即可。而D0~D7分別與51單片機(jī)的P0口進(jìn)行連接,用來輸出數(shù)據(jù)與字符,這樣就可以在液晶上顯示出自己想要的字符[10]。鍵盤可分為編碼鍵盤和非編碼鍵盤兩種類型。它使用方便,接口簡單,響應(yīng)速度快,但需要專用的硬件電路。這種方法雖然沒有編碼鍵盤速度快,但它不需要專用的硬件支持。所以,準(zhǔn)確無誤地辨認(rèn)每個(gè)鍵的動(dòng)作及其所處的狀態(tài),是系統(tǒng)能否正常工作的關(guān)鍵。第4章 系統(tǒng)軟件 設(shè)計(jì)思想軟件設(shè)計(jì)的主要功能是完成公交車語音報(bào)站,采用AT89C51單片機(jī)作為主控芯片,對(duì)ISD4004數(shù)碼語音芯片與LCD1602進(jìn)行控制,實(shí)現(xiàn)語音報(bào)站,同時(shí)顯示站名。在本次軟件設(shè)計(jì)中,主要設(shè)計(jì)了4站,通過三個(gè)按鍵進(jìn)行控制。k2鍵——上一站,k3鍵——下一站,現(xiàn)象:num=1,ISD4004播報(bào)“歡迎乘坐”,同時(shí)LCD1602上顯示“Huan Ying Cheng Zuo”。num=3,ISD4004播報(bào)“萬里學(xué)院到了,請(qǐng)從后門下車,下車請(qǐng)當(dāng)心;車輛起步,請(qǐng)拉好扶手,前方??酷t(yī)藥學(xué)?!?,同時(shí)LCD1602上顯示“Wanglixueyuan Dao Le”。num=5,ISD4004播報(bào)“鄞州二院到了,請(qǐng)從后門下車,下車請(qǐng)當(dāng)心;”,同時(shí)LCD1602上顯示“Yinzhoueryuan Dao Le”。 模塊程序設(shè)計(jì) 在本次設(shè)計(jì)中我針對(duì)363公交車,從中取了“寧波理工,萬里學(xué)院,醫(yī)藥學(xué)校,鄞州二院”這4站進(jìn)行了單邊線路的設(shè)計(jì)。圖 ISD4004語音模塊錄放音在本次軟件程序設(shè)計(jì)中,我總共設(shè)置了5個(gè)按鍵,錄音鍵(k1=),放音鍵(k2=),停止鍵(k3=),錄放音地址移位鍵(k4=),復(fù)位鍵(k5=)。按下k2鍵,開始播放之前所錄的聲音。如此,便可實(shí)現(xiàn)多段錄音,而且每段錄音所存放的地址都通過計(jì)算得出。圖 錄音程序流程圖圖 放音程序流程圖 LCD1602系統(tǒng)上電后,液晶顯示模塊進(jìn)行初始化。圖 LCD1602程序流程圖 按鍵部分按鍵部分采用掃描法,當(dāng)檢測(cè)到按鍵按下時(shí),進(jìn)行鍵值判斷,并進(jìn)行相應(yīng)的顯示程序以及語音播放程序的跳轉(zhuǎn),實(shí)現(xiàn)公交車語音報(bào)站功能。在整個(gè)系統(tǒng)軟件設(shè)計(jì)中,依舊從語音,液晶顯示以及按鍵這三大部分進(jìn)行綜合考慮。在仿真時(shí),由于語音模塊不能進(jìn)行仿真,為了增加點(diǎn)難度,在液晶顯示模塊方面我選擇了可以顯示漢字的1602模塊。LCD1602液晶顯示的原理是利用液晶的物理特性,通過電壓對(duì)其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。這樣一來就組成某個(gè)字符。在本次設(shè)計(jì)中,LCD1602液晶顯示模塊的rs,rw,e分別與51單片機(jī)的P3^5,P3^6,P3^7端口連接,進(jìn)行程序的讀寫數(shù)據(jù),字符操作。在此次仿真過程中,總共設(shè)計(jì)了4個(gè)按鍵,k1:歡迎乘坐,k2:上一站,k3:下一站,k4:謝謝乘坐。當(dāng)按下k4時(shí),LCD上顯示“Xie Xie Cheng Zuo”。圖 “Huan Ying Cheng Zuo”按下k2或者k3鍵顯示,k2鍵逆向顯示,k3鍵順向顯示Num=1 LCD1602液晶顯示“Ningboligong Dao Le”,同時(shí)LED2亮。圖 “Wanglixueyuan Dao Le”Num=3 LCD1602液晶顯示“Yiyaoxuexiao Dao Le”,同時(shí)LED4亮。圖 “Yinzhoueryuan Dao Le”按下k4鍵 LCD1602液晶顯示“Xie Xie Cheng Zuo”,同時(shí)LED5亮。第二部分是LCD液晶顯示調(diào)試,第三部分是ISD4004語音模塊錄放調(diào)試。對(duì)于按鍵和LED調(diào)試,我所采用的工具是萬用表,因?yàn)榘存I原理是松開狀態(tài),電路斷開;按下按鍵,電路短路,以此來檢測(cè)它們的好壞。第一步,將LCD1602正確的連接到51單片機(jī)上,在連接時(shí)要注意液晶屏的日rs,rw,e這三個(gè)口的位置,一旦接錯(cuò)LCD就有可能被燒壞。第二步,將已編譯正確的LCD液晶顯示程序下載到51單片機(jī),查看LCD1602上是否能夠顯示你想得到的內(nèi)容。例如顯示“Huan Ying Cheng Zuo”。在這次設(shè)計(jì)中,如何正確的將ISD4004與51連接成了我最大的問題。此外,將另外一段一錄一放的程序下載到51,檢測(cè)ISD4004的錄放音功能。復(fù)位鍵錄完后,按下放音鍵,檢測(cè)是否能夠正確放音。在本次設(shè)計(jì)中,我設(shè)置了一個(gè)移位變量add,每錄完一個(gè)音,移位100,開始錄下一段語音。錄音鍵暫停鍵放音鍵移位鍵圖 ISD4004語音調(diào)試模塊 軟件調(diào)試與硬件調(diào)試類似,在本次軟件調(diào)試中,主要分為三部分進(jìn)行調(diào)試,按鍵與LCD1602結(jié)合程序的調(diào)試,ISD4004與按鍵結(jié)合程序的調(diào)試,以及ISD400LCD1602與按鍵的調(diào)試。由于在使用LCD1602之前,翻閱了很多相關(guān)的資料以及視頻,因此LCD1602液晶顯示程序已經(jīng)調(diào)試好,沒有問題。一開始,我先讓按鍵控制LCD1602顯示內(nèi)容中的其中一條。因此想要顯示其他內(nèi)容,原理也一樣。由于之前查閱的很多資料中有一段一錄一放的程序,了解他的原理后,發(fā)現(xiàn)與我需要的多段錄放效果原理相同。其中,在調(diào)試錄放音時(shí),還添加了LED模塊,主要功能是檢測(cè)按鍵是否有效。如果再有按鍵按下LED1亮,如此來判別錄音鍵,放音鍵,移位鍵,復(fù)位鍵以及停止鍵是否有效。在這三者結(jié)合時(shí),對(duì)于ISD4004語音模塊,我只需要一段放音程序,只要將之前存放在地址位置里面的錄音片段通過放音程序放出來就好。這時(shí)候,通過設(shè)置void write(uchar )中的值以及將語音播放play()函數(shù)添加到void key()中,通過void key()中按鍵按下后多種條件的核對(duì),從而確定按鍵按下后要顯示的內(nèi)容以及語音播放的內(nèi)容。圖 “Ningboligong Dao Le”總體示例圖 綜合調(diào)試1) 根據(jù)給出ISD4004的電路原理圖,正確連接電路;2) 調(diào)試已編譯的程序,將程序下載到51單片機(jī)中;3) 按下錄音鍵進(jìn)行錄音,連續(xù)錄完一段后,按下停止鍵停止。最后,將整個(gè)程序合并,進(jìn)行最后的調(diào)試,公交車語音報(bào)站系統(tǒng)完成。本次調(diào)查中,我主要將試驗(yàn)者分為6組,第一組——“Huanyingchengzuo”組,如表51所示,第二組——“Ningboligon Dao Le”組,如表52所示,第三組——“Wanlixueyuan Dao Le”組,如表53所示,第四組——“Yiyaoxuexiao Dao Le”組,如表54所示,第五組——“Yinzhoueryuan Dao Le”組,如表55所示,第六組——“Xiexiechengzuo”組,如表56所示,每組抽查5個(gè)人,其中上一站/下一站一起進(jìn)行檢測(cè)。此時(shí)num=1,如果LCD1602上顯示“Huanyingchengzuo”,同時(shí)語音ISD4004中播放“歡迎乘坐363路公交車”,則說明正確,五名隨機(jī)者回答“是”即可。如果此時(shí)LCD1602上顯示“Ningboligong Dao Le”,同時(shí)語音ISD4004中播放“寧波理工到了,請(qǐng)從后門下車,下車請(qǐng)當(dāng)心。表 “Ningboligong Dao Le”編號(hào)按鍵(num=2)LCD上顯示“Ningboligong Dao Le”語音播放同一站名A1k2是是A2k2是是A3k2是是A4k2是是A5k2是是A6k3是是A7k3是是A8k3是是A9k3是是A10k3是是=3時(shí)候的反饋情況,其中A1—A5是對(duì)k2鍵的試用,A6—A10對(duì)k3鍵的試用。車輛起步,請(qǐng)拉好扶手,前方???,醫(yī)藥學(xué)?!保瑒t說明正確,十名隨機(jī)者回答“是”即可。如果此時(shí)LCD1602上顯示“Yiyaoxuexiao Dao Le”,同時(shí)語音ISD4004中播放“醫(yī)藥學(xué)校到了,請(qǐng)從后門下車,下車請(qǐng)當(dāng)心。表 “Yiyaoxuexiao Dao Le”編號(hào)按鍵(num=4)LCD上顯示“Yiyaoxuexiao Dao Le”語音播放同一站名A1k2是是A2k2是是A3k2是是A4k2是是A5k2是是A6k3是是A7k3是是編號(hào)按鍵(num=4)LCD上顯示“Yiyaoxuexiao Dao Le”語音播放同一站名A8k3是是A9k3是是A10k3是是=5時(shí)候的反饋情況,其中A1—A5是對(duì)k2鍵的試用,A6—A10對(duì)k3鍵的試用。表 “Yinzhoueryuan Dao Le”編號(hào)按鍵(num=5)LCD上顯示“Yinzhoueryuan Dao Le”語音播放同一站名A1k2是是A2k2是是A3k2是是A4k2是是A5k2是是A6k3是是A7k3是是A8k3是是A9k3是是A10k3是是=6時(shí)候的反饋情況,其中A1—A5是對(duì)k2鍵的試用,A6—A10對(duì)k3鍵的試用。表 “Xiexiechengzuo”編號(hào)按鍵(num=6)LCD上顯示“Xiexiechengzuo”語音播放同一站名A1k2是是A2k2是是A3k2是是A4k2是是編號(hào)按鍵(num=6)LCD上顯示“Xiexiechengzuo”語音播放同一站名A5k2是是A6k3是是A7k3是是A8k3是是A9k3是是A10k3是是通過以上6組的隨機(jī)試用測(cè)試,結(jié)果表明改系統(tǒng)穩(wěn)定,可靠。軟件測(cè)試環(huán)境主要是在Keil,Vw,Proteus,STC這四類。Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),在C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì)[13]。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件(.ABS)。在這次設(shè)計(jì)中,我用的比較多的就是VW。STC主要用于燒錄程序,將程序燒錄到硬件中。 測(cè)試結(jié)果按下k1鍵——起始鍵現(xiàn)象:ISD4004播報(bào)“歡迎乘坐”,同時(shí)LCD1602上顯示“H