版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p><b> 摘要</b></p><p> 引言。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(1)</p><p>
2、 概述。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(1)</p><p> 系統(tǒng)設(shè)計思路。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(1)</p><p
3、> 語音識別機器人的設(shè)計及技術(shù)要求。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(2)</p><p> 設(shè)計要求。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(2)</p><p> 技術(shù)要求。。。。。。。。。。。。。。。。。。。。。。。
4、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(2)</p><p> 總體設(shè)計。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(3)</p><p> 硬件設(shè)計。。。。。。。。。。。。。。。。。。。。。。。。。。
5、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(3)</p><p> 硬件控制系統(tǒng)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(3)</p><p> 電源模塊。。。。。。。。。。。。。。。。。。。。。。。。。。
6、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(4)</p><p> 電機驅(qū)動模塊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(4)</p><p> 語音模塊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
7、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(5)</p><p> 算法和軟件設(shè)計。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(6)</p><p> 算法。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
8、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(6)</p><p> 軟件設(shè)計。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(6)</p><p> 擦除Flash 模塊。。。。。。。。。。。。。。。。。。。。。。。。。。。
9、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(8)</p><p> 位操作模塊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(9)</p><p> 語音識別函數(shù)的設(shè)計。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
10、。。。。。(9)</p><p> 走路、跳舞等其他函數(shù)模塊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(11)</p><p> 功能測試及測試結(jié)果。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(11)</p><p> 功能測
11、試。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(11)</p><p> 測試結(jié)果。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(11)</p><p> 結(jié)語。。。。
12、。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(12)</p><p> 參考文獻。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(12)</p><
13、;p> Abstract。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(13)</p><p> 附錄。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(1
14、3)</p><p> 基于凌陽單片機的語音識別機器人的設(shè)計</p><p> 摘要:基于凌陽SPCE061A單片機在語音識別處理方面的優(yōu)勢,設(shè)計完成了一個基于SPCE061A為核心的語音識別機器人控制系統(tǒng)。在經(jīng)過訓(xùn)練后使機器人具有語音識別能力,可根據(jù)訓(xùn)練人的特定命令完成一系列動作。</p><p> 關(guān)鍵詞:SPCE061A單片機;凌陽單片機;語音識別;機器
15、人</p><p><b> 1 引言</b></p><p> 隨著計算機處理能力的不斷提高,語音識別技術(shù)得到了迅速發(fā)展,支持語音識別的各種產(chǎn)品紛紛面世。人類實現(xiàn)了用語音命令控制電視、空調(diào)、燈光、自動窗簾等的使用,使人們的生活“隨音所欲”,更加舒適,更加便捷。研究工業(yè)控制和信息家電領(lǐng)域的語音識別技術(shù),開發(fā)實用的語音識別和控制系統(tǒng),對于語音識別技術(shù)的普及與應(yīng)用具有
16、十分重要的意義。</p><p><b> 2 概述</b></p><p> 本文介紹了一個以凌陽公司的微控制器SPCE061A單片機為控制核心,附加一定外圍電路組成的語音控制機器人系統(tǒng)。</p><p> 2.1 系統(tǒng)設(shè)計思路</p><p> 針對機器人的特點,本文結(jié)合凌陽單片機的優(yōu)點來進行設(shè)計。該設(shè)計分硬
17、件和軟件兩部分,首先編寫出相應(yīng)的控制程序,在軟件上進行編譯、仿真,正確無誤了,下載到實驗箱中進行二次驗證,全部沒有問題了,最后開始硬件電路板的設(shè)計。因此在本設(shè)計中軟件部分是最為重要的環(huán)節(jié),在后續(xù)章節(jié)有詳細說明。在軟件設(shè)計中秉承匯編語言的快速直接的特點,C語言的代碼清晰、易于維護、模塊化較好的特點,首先編寫主程序,然后編寫各個單獨的控制模塊的程序,最后綜合在一起,構(gòu)成完整的語音控制機器人程序。</p><p>
18、當(dāng)然使用其他單片機也可以設(shè)計機器人語音識別系統(tǒng),但是凌陽單片機更適于機器人開發(fā),它以16位計算機為核心,集成不同規(guī)模的RAM、ROM和其他豐富的功能電路,我們可以根據(jù)自己需要選擇集成了特定功能電路的凌陽單片機。凌陽單片機指令系統(tǒng)提供出具有較高運算速度的16位,16位的乘法運算指令和內(nèi)積運算指令,為其應(yīng)用添加了DSP功能,由此凌陽適合進行語音識別。在我國凌陽單片機在學(xué)校比較常見,有較多的應(yīng)用實例可作為參考,這些是其他單片機所不具備的優(yōu)勢,
19、因此選擇凌陽單片機來設(shè)計。</p><p> 單片機一般支持匯編語言,但是全部采用匯編語言編程工作量又大, 而采用高級語言編程速度達不到要求??紤]到匯編語言沒有高級語言要占用較大的存儲空間和較長的運行時間等缺點,它的運行速度快是高級語言所不能比擬的,我們此時可以采用"混合"編程,彼此相互調(diào)用,進行參數(shù)傳遞,共享數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)信息,是一種有效的編程方法。這種方法可以發(fā)揮各種語言的優(yōu)勢和特點,充
20、分利用現(xiàn)有的多種實用程序、庫程序等使軟件的開發(fā)周期大大縮短。除了匯編語言,SPACE61A的開發(fā)環(huán)境還支持C語言,提供了C函數(shù)庫,并支持C和匯編函數(shù)的相互調(diào)用,所以設(shè)計采用凌陽SPCE061A單片機。 </p><p> 2.2 語音識別機器人的設(shè)計及技術(shù)要求</p><p> 2.2.1 設(shè)計要求</p><p> 利用SPCE061A 單片機、機器人機體(
21、包括2 個用于走路的電機、1 個用于頭部旋轉(zhuǎn)的電機、1個用于加速1 個用于彈射的電機等),要求語音識別機器人具有下述功能:</p><p> (1)通過語音命令對其進行控制。</p><p> (2)兩種跳舞模式。</p><p> (3)走步功能、轉(zhuǎn)向功能、轉(zhuǎn)頭功能。</p><p> (4)發(fā)射飛盤功能。</p>&
22、lt;p><b> 2.2.2技術(shù)要求</b></p><p> 要求智能機器人可以識別15 條命令。</p><p> 要求智能機器人具有2 種跳舞模式。</p><p><b> 3 總體設(shè)計</b></p><p> 整個系統(tǒng)采用SPCE061A做為控制核心,外加音頻輸入輸出模
23、塊和電機驅(qū)動模塊,對機器人的電機、燈(眼睛)、揚聲器等進行控制。系統(tǒng)的總體框圖如圖1所示。</p><p><b> 圖1 系統(tǒng)整體框圖</b></p><p> 電源模塊:為機器人提供動力來源;</p><p> 驅(qū)動模塊:將單片機信號進行功放,驅(qū)動電機;</p><p> 語音模塊:識別、處理語音信號,在跳舞
24、過程中伴音;</p><p> 機器人模塊:設(shè)計為人形,是完成一系列動作的載體;</p><p><b> 4 硬件設(shè)計</b></p><p> 4.1 硬件控制系統(tǒng)</p><p> 控制系統(tǒng)主要由 61 板與機器人驅(qū)動電路構(gòu)成。61 板作為整個系統(tǒng)的主控板,驅(qū)動電路驅(qū)動電機。在主控板61板的控制下完成各個動
25、作。另外增加了特定人語音識別的功能,通過命令來控制機器人,使機器人 智能化,圖2為SPCE061A與機器人的連接圖。</p><p> 圖2 SPCE061A與機器人的連接圖</p><p><b> 4.2 電源模塊</b></p><p> SPCE061A的內(nèi)核供電為3.3V,而I/O端口可接3、3V也可以接5V。本系統(tǒng)需要的端口高
26、電平為5V,所以采用4節(jié)干電池供電(5V左右)。5V直流電壓直接通過SPYO029(相當(dāng)于一般3.3V穩(wěn)壓器)穩(wěn)壓到3.3V,為整個系統(tǒng)提供了5V和3.3V兩種電平的電壓。SPYO029是凌陽公司設(shè)計的電壓調(diào)整IC,采用CMOS工藝,具有靜態(tài)電流低、驅(qū)動能力強、線性調(diào)整出色等特點。SPY0029的最大輸入電壓+7V,最大輸出電流50mA。</p><p> 4.3 電機驅(qū)動模塊</p><p
27、> 機器人驅(qū)動電路圖3如所示:</p><p> 圖3 機器人驅(qū)動電路圖</p><p> 機器人驅(qū)動電路采用功率較大的三極管搭成H 橋來驅(qū)動電機,可以實現(xiàn)電機的正向旋轉(zhuǎn)與電機的反向旋轉(zhuǎn)。這些電機包括2 個用于走路的電機與一個頭部轉(zhuǎn)向的電機。另外用了一個三極管驅(qū)動單向旋轉(zhuǎn)的電機,包括加速電機與發(fā)射電機,驅(qū)動電路比較簡單。</p><p><b>
28、; 4.4 語音模塊</b></p><p> 為簡化結(jié)構(gòu),語音模塊直接裝在單片機電路板上。凌陽SPCE061A 單片機在語音識別和處理方面有其獨到之處,而且開發(fā)環(huán)境簡單。外界的模擬信號必須經(jīng)過數(shù)字化處理才能轉(zhuǎn)換成機器所能識別的信號,即語音的壓縮編碼技術(shù)。語音壓縮編碼中的數(shù)據(jù)量表達式為:數(shù)據(jù)量=[(采樣頻率* 量化位數(shù))/8]* 聲道數(shù)。</p><p> 壓縮編碼的目的
29、是通過對數(shù)據(jù)的壓縮,達到高效率的存儲可轉(zhuǎn)換數(shù)據(jù),即在保證一定音質(zhì)的條件下以最小數(shù)據(jù)量來表達可傳遞聲音信息。常用的音頻形式和壓縮算法有: 波形編碼、參量編碼和混合編碼三種。</p><p> 語音識別功能如圖4 所示。</p><p> 圖4 語音識別功能圖</p><p><b> 5.算法和軟件設(shè)計</b></p><
30、;p><b> 5.1 算法</b></p><p> (1)接收到控制信號時,首先由單片機對信號作出判斷;</p><p> (2)前進時或停止時,均由單片機發(fā)出指令驅(qū)動相關(guān)電動機實現(xiàn)動作;</p><p> (3)轉(zhuǎn)彎時,單片機只向一個電動機發(fā)出脈沖實現(xiàn)轉(zhuǎn)彎,轉(zhuǎn)到所需角度后,發(fā)出停止信號;</p><p&g
31、t; (4)當(dāng)頭部需轉(zhuǎn)動時,單片機向頭部電機發(fā)出正轉(zhuǎn)或反轉(zhuǎn)信號,動作執(zhí)行完畢由單片機控制結(jié)束;</p><p> (5)在需要播放聲音的時候,單片機調(diào)用聲音處理程序,查找相應(yīng)譯碼隊列并播放。</p><p><b> 5.2 軟件設(shè)計</b></p><p> 將所有的動作和聲音信息全部保存在控制系統(tǒng)中,并通過單片機統(tǒng)一控制,從而實現(xiàn)機
32、器人自動控制。程序流程如圖5 所示。</p><p><b> 圖5 流程圖</b></p><p> 判斷是否為第一次下載根據(jù) FLASH 中的標(biāo)志位來進行判斷。將訓(xùn)練好的語音模型導(dǎo)出存儲到 FLASH中使用庫函數(shù) BSR_ExportSDWord(uiCommandID);進行操作,然后再調(diào)用讀寫 FLASH 中的函數(shù)進行。在進行語音識別時,首先讀取 FLAS
33、H 將語音模型取得,然后調(diào)用 BSR_ImportSDWord(uiCommandID);函數(shù)將語音資源載入內(nèi)存。在識別出命令后,執(zhí)行相關(guān)動作,相關(guān)動作操作就是操作電機的正向或反向旋轉(zhuǎn)同 時配合延時與播放聲音組合起來形成不同的動作。</p><p> 5.2.1 擦除Flash 模塊</p><p> 在程序中按照操作SPCE061A 的flash 的步驟擦寫flash,在程序中寫成3
34、 個函數(shù)用于操作flash,如下:</p><p> F_FlashWrite1Word()</p><p> 語法:void F_FlashWrite1Word(int addr,int Value)</p><p> 描述:寫一個字到FLASH 中</p><p> 參數(shù):1、被寫數(shù)據(jù)的存儲地址</p><p&
35、gt;<b> 2、被寫數(shù)據(jù)</b></p><p><b> 返回:無</b></p><p> F_FlashWrite()</p><p> 語法:F_FlashWrite(int sector,int &num,int size)</p><p><b> 描述:
36、順序?qū)懚鄠€字</b></p><p> 參數(shù):1、被寫數(shù)據(jù)的起始地址</p><p><b> 2、被寫數(shù)據(jù)</b></p><p><b> 3、寫數(shù)據(jù)的數(shù)量</b></p><p><b> 返回:無</b></p><p>
37、F_FlashErase()</p><p> 語法:void F_FlashErase(sector)</p><p> 描述:擦除256 字節(jié)</p><p> 參數(shù): 擦除頁的起始地址</p><p><b> 返回:無</b></p><p> 5.2.2 位操作模塊</p
38、><p> 由于SPCE061A 沒有位操作指令,而在程序控制電機的時候需要經(jīng)常操作某一位,為了方便程序的編寫,增強可讀性,編寫了位操作模塊。</p><p> 函數(shù)void Set_IOB_Bit(unsigned int,unsigned int,unsigned int,unsigned int,unsigned int);</p><p> 參數(shù)依次為IO
39、 的位、Dir、Attrib、Data、Buffer</p><p> 例如操作IOB11 為同相低電平輸出為Set_IOB_Bit(11,1,1,0,0);</p><p> 5.2.3 語音識別函數(shù)的設(shè)計</p><p> SPACE61A是將 A/D、編碼算法、解碼算法、存儲及 D/A 作成相應(yīng)的模塊,對于每個模塊都有其應(yīng)用程序接口 API, 用戶只需了
40、解每個模塊所要實現(xiàn)的功能及其參數(shù)的內(nèi)容,然后調(diào)用該 API 函數(shù)即可實現(xiàn)語音處理功能。</p><p> 在本系統(tǒng)的軟件設(shè)計當(dāng)中,將語音播放的程序設(shè)計為語音播放模塊,可方便地調(diào)用;語音播放程序分為兩部分,一是播放流程控制,一是中斷播放服務(wù)程序。流程圖如圖6、圖7所示:</p><p> 圖6 SACM_S480自動播放流程圖</p><p> 圖7 中斷服務(wù)程
41、序流程圖</p><p> 5.2.4 走路、跳舞等其他函數(shù)模塊</p><p> 這些函數(shù)就是控制電機的通與斷的組合完成不用的動作,在需要的時候播放語音,實現(xiàn)一定的效果,具體請參考函數(shù)原形。(見附件程序所示)</p><p> 6. 功能測試及測試結(jié)果:</p><p><b> 6.1 功能測試</b><
42、;/p><p> 為測試機器人的穩(wěn)定性,在實驗室光滑地板上進行了一系列試驗。應(yīng)用方案的驗證步驟如下:</p><p> 步驟一:啟動u’nSP IDE。打開機器人應(yīng)用實例程序,編譯、鏈接確認沒有錯誤。</p><p> 步驟二:下載程序代碼到機器人的61 板上。</p><p> 步驟三:打開機器人的電源,進行語音訓(xùn)練,訓(xùn)練過程按照下面進
43、行:</p><p> 按順序訓(xùn)練以下15 條指令:“名稱”,“開始”,“準(zhǔn)備”,“跳舞”,“再來一曲”,“開始”,“向前走”,“倒退”,“右轉(zhuǎn)”,“左轉(zhuǎn)”,“準(zhǔn)備”,“向左瞄準(zhǔn)”,“向右瞄準(zhǔn)”,“發(fā)射”,“連續(xù)發(fā)射”。每條指令要訓(xùn)練兩遍。當(dāng)一條指令被正確識別時會提示進入下一條;如沒有被識別會要求重復(fù)該指令,直到正確識別為止。</p><p> 步驟三:如果訓(xùn)練成功則進入語音識別狀態(tài),
44、如果訓(xùn)練沒有成功則重復(fù)訓(xùn)練。由于SPCE061A 的FLASH存儲器只有32K,所以15 條指令需要分組存放。在這里分成3 組,每組5 條指令。在不同組指令中交換需要根據(jù)出發(fā)名稱,所以在識別狀態(tài),要執(zhí)行動作首先需要出發(fā)名稱,就是訓(xùn)練的第一條命令,然后可識別第一組的其余四條命令。在觸發(fā)第一條指令,然后再觸發(fā)第二條指令,就可以識別第三條指令。</p><p><b> 6.2 測試結(jié)果</b>
45、</p><p> 本文設(shè)計的機器人的左右腿和脖子的最大轉(zhuǎn)彎角度為90度。機器人可以識別15條命令:完成2種跳舞方式。機器人在直線行走時,速度在不大于0.3m/s可穩(wěn)定行走;頭部轉(zhuǎn)速可調(diào),但不能太高,否則會引起震動,影響平衡;各動作基本可按程序流暢播放。在有噪聲環(huán)境下,識別率有所下降,有待于進一步開發(fā)。</p><p><b> 7.結(jié)語</b></p>
46、;<p> 機器人高級整合控制論、機械電子、計算機、材料和仿生學(xué),它既可以接受人類指揮,又可以運行預(yù)先編排的程序,也可以根據(jù)以人工智能技術(shù)制定的原則綱領(lǐng)行動。在工業(yè)、醫(yī)學(xué)、農(nóng)業(yè)、建筑業(yè)甚至軍事等領(lǐng)域中均有重要用途。結(jié)合凌陽單片機的語音識別功能,對機器人采用特定人語音識別對機器人進行控制完成一系列動作,可以進而開發(fā)使其協(xié)助或取代人類工作的工作,例如生產(chǎn)業(yè)、建筑業(yè),或是危險的工作。</p><p>&
47、lt;b> 參 考 文 獻</b></p><p> [1] 張培仁,張志堅,高修峰.十六位單片微處理器原理及應(yīng)用(凌陽SPCE061A)[M].北京:清華大學(xué)出版社,2005.4.</p><p> [2] 譚浩強.C程序設(shè)計[M].第三版.北京:清華大學(xué)出版社,2005(2007重印).</p><p> [3] 羅亞非等.凌陽16位單
48、片機應(yīng)用基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2003.</p><p> [4] 李晶皎.嵌入式語音技術(shù)及凌陽16位單片機應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2003.</p><p> [5] 屠澄軼,基于凌陽單片機的通用型語音控制系統(tǒng)[J].世界電子元器件:設(shè)計應(yīng)用,2010.8:57-59.</p><p> [6] 張震宇.王華.基于凌陽單
49、片機的語音識別技術(shù)及應(yīng)用[J].微計算機信息,2007,23(23).</p><p> [7] 徐波.語音技術(shù)的現(xiàn)狀及展望[J].科學(xué)新聞周刊,2004,(4).</p><p> [8] 凌陽科技大學(xué)計劃資料.http://www.unsp.com.cn/</p><p> [9] 單片機學(xué)習(xí)論壇:http://www.unsp.com.cn/dvbbs/
50、</p><p> [10]電子工程世界:http://www.eeworld.com.cn/</p><p> The design of speech recognition robot based on Sunplus Microcontroller</p><p> Zhang Xiaodan</p><p> Abstrac
51、t:This paper chose SPCE061A which has the advantages of Speech recognition processing as the key control unit to design a system for robots.The robot equiped with this system can be trained to have the ability to identif
52、y a series of given orders and compelet the actions.</p><p> Key words:SPCE061A;Speech recognition processing;Speech recognition processing system;robot</p><p><b> 附錄</b></p>
53、<p><b> 源程序:</b></p><p> #include "bsrSD.h"</p><p> #include "robot.h"</p><p> extern void RobotSystemInit(void);</p><p> ex
54、tern unsigned int IsFirstDownLoad(void);</p><p> extern void FormatFlash(void);</p><p> extern void TrainFiveCommand(void);</p><p> extern void SaveFiveCommand(unsigned int uiAdd
55、r);</p><p> extern void ImportFiveCommand(unsigned int uiAddr_Import);</p><p> extern unsigned int TrainWord(unsigned int WordID,unsigned int SndIndex);</p><p> extern void PlayS
56、nd(unsigned int SndIndex);</p><p> extern void Robot_DanceAgain(unsigned int n);</p><p> extern void Robot_Dance(unsigned int n);</p><p> extern void Robot_Go(unsigned int n);<
57、;/p><p> extern void Robot_Backup(unsigned int n);</p><p> extern void Robot_TurnLeft(unsigned int n);</p><p> extern void Robot_TurnRight(unsigned int n);</p><p> ext
58、ern void Robot_HeadTurnLeft(unsigned int n);</p><p> extern void Robot_HeadTurnRight(unsigned int n);</p><p> extern void Robot_Shoot_Prepare(unsigned int n);</p><p> extern void
59、 Robot_Shoot2(unsigned int n);</p><p> extern void Robot_Shoot_Five(unsigned int n);</p><p> extern void F_FlashWrite1Word(unsigned int,unsigned int);</p><p> extern void F_Flash
60、Erase(int);</p><p> extern void Delay(unsigned int);</p><p> int main(void)</p><p><b> {</b></p><p> unsigned int uiFlagFirst;//是否為第一次下載</p>
61、<p> unsigned int uiRes;//識別結(jié)果</p><p> unsigned int uiActivated;//是否出于待命狀態(tài)</p><p> unsigned int uiTimerCount;//時間是否超時</p><p> unsigned int uiBS_Team;//用于標(biāo)識
62、現(xiàn)在是第幾組命令在內(nèi)存當(dāng)中</p><p> unsigned int uiKey;//存儲鍵盤值,按下將重新訓(xùn)練</p><p> RobotSystemInit();</p><p> uiActivated = 0;</p><p> uiFlagFirst = IsFirstDownLoad();//判斷是否為
63、第一次下載程序</p><p> if(uiFlagFirst == 1)</p><p><b> {</b></p><p> FormatFlash();//格式化需要存儲命令的存儲器</p><p> TrainFiveCommand();//訓(xùn)練需要的五條命令(一組)</p&
64、gt;<p> SaveFiveCommand(0xf700);//存儲五條命令</p><p> PlaySnd(OK);//播放Ok,Let's go,表示一組命令存儲結(jié)束</p><p> PlaySnd(LETUSGO);</p><p> TrainFiveCommand();</p><p
65、> SaveFiveCommand(0xf900);</p><p> PlaySnd(FOLLOWME);</p><p> TrainFiveCommand();</p><p> SaveFiveCommand(0xfb00);</p><p> PlaySnd(HO);</p><p> Pl
66、aySnd(HOO);</p><p> PlaySnd(HOO);</p><p> PlaySnd(HOOO);</p><p> PlaySnd(HO);</p><p> PlaySnd(HOO);</p><p> PlaySnd(HOO);</p><p> PlaySn
67、d(HOOO);</p><p> uiFlagFirst = 0xaaaa;</p><p> F_FlashWrite1Word(0xfd00,0xaaaa);</p><p><b> }</b></p><p> ImportFiveCommand(0xf700);</p><p>
68、; uiBS_Team = 0;</p><p><b> Loop:</b></p><p> BSR_InitRecognizer(BSR_MIC);//初始化識別器</p><p><b> while(1)</b></p><p><b> {</b>
69、;</p><p> *(unsigned int *)0x7012 = 1; //清看門狗</p><p><b> //開始識別命令</b></p><p> uiRes = BSR_GetResult();//取得識別結(jié)果</p><p> if(uiRes > 0)</p>
70、<p><b> {</b></p><p> if(uiActivated)</p><p><b> {</b></p><p> uiTimerCount = 0;</p><p> switch(uiRes)</p><p><b>
71、; {</b></p><p> case NAME_ID:</p><p> switch(uiBS_Team)</p><p><b> {</b></p><p> case 0://第一組的第一個命令(杰克)</p><p> //播放Ok,Les'
72、s go,Yeah</p><p> PlaySnd(OK);</p><p><b> break;</b></p><p> case 1://第二組的第一個命令(開始)</p><p> PlaySnd(OK);</p><p> PlaySnd(LETUSGO);<
73、/p><p> PlaySnd(YEAH);</p><p> //播放Ok,Les's go</p><p><b> break;</b></p><p> case 2://第三組的第一個命令(準(zhǔn)備)</p><p> PlaySnd(OK);</p>&
74、lt;p><b> //播放Ok</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> break;</b></p><p> case Command_One_ID:&l
75、t;/p><p> switch(uiBS_Team)</p><p><b> {</b></p><p> case 0://第一組的第二個命令(開始)</p><p> //導(dǎo)入第二組命令,修改uiBS_Team為1,播放Wo,Ho,Hoo,Hooo,跳出循環(huán)</p><p>
76、 ImportFiveCommand(0xf900);</p><p> uiBS_Team = 1;</p><p> PlaySnd(HO);</p><p> PlaySnd(HOO);</p><p> PlaySnd(HOO);</p><p> PlaySnd(HOOO);</p>
77、<p> goto Loop;</p><p><b> break;</b></p><p> case 1://第二組的第二個命令(向前走)</p><p> //播放喀咔聲音,控制電機向前走</p><p> Robot_Go(1);</p><p> Play
78、Snd(WALK);</p><p> ImportFiveCommand(0xf700);</p><p> uiBS_Team = 0;</p><p> goto Loop;</p><p><b> break;</b></p><p> case 2://第三組的第二個
79、命令(向左瞄準(zhǔn))</p><p> //播放旋轉(zhuǎn)聲音,頭部電機向左轉(zhuǎn)</p><p> Robot_HeadTurnLeft(1);</p><p> PlaySnd(TURNHEAD);</p><p> PlaySnd(TURNHEAD);</p><p> PlaySnd(TURNHEAD);</
80、p><p> ImportFiveCommand(0xf700);</p><p> uiBS_Team = 0;</p><p> goto Loop;</p><p><b> break;</b></p><p><b> }</b></p>&l
81、t;p> *(unsigned int *)0x7012 = 1;</p><p> uiActivated = 0;</p><p> //杰克為觸發(fā)命令,每完成一個動作需要出發(fā)一次</p><p><b> break;</b></p><p> case Command_Two_ID:</p
82、><p> switch(uiBS_Team)</p><p><b> {</b></p><p> case 0://第一組的第三個命令(準(zhǔn)備)</p><p> //導(dǎo)入第三組命令,修改uiBS_Team為2,播放Wo,Ho,Hoo,Hooo,跳出循環(huán)</p><p> Imp
83、ortFiveCommand(0xfb00);</p><p> uiBS_Team = 2;</p><p> PlaySnd(HO);</p><p> PlaySnd(HOO);</p><p> PlaySnd(HOO);</p><p> PlaySnd(HOOO);</p><
84、p> goto Loop;</p><p><b> break;</b></p><p> case 1://第二組的第三個命令(倒退)</p><p> //播放喀咔聲音,控制電機向后走</p><p> Robot_Backup(1);</p><p> PlayS
85、nd(WALK);</p><p> ImportFiveCommand(0xf700);</p><p> uiBS_Team = 0;</p><p><b> break;</b></p><p> case 2://第三組的第三個命令(向右瞄準(zhǔn))</p><p> //播
86、放旋轉(zhuǎn)聲音,頭部電機向右轉(zhuǎn)</p><p> Robot_HeadTurnRight(1);</p><p> PlaySnd(TURNHEAD);</p><p> PlaySnd(TURNHEAD);</p><p> PlaySnd(TURNHEAD);</p><p> ImportFiveComma
87、nd(0xf700);</p><p> uiBS_Team = 0;</p><p> goto Loop;</p><p><b> break;</b></p><p><b> }</b></p><p> *(unsigned int *)0x7012 =
88、 1;</p><p> uiActivated = 0;</p><p><b> break;</b></p><p> case Command_Three_ID:</p><p> switch(uiBS_Team)</p><p><b> {</b>&l
89、t;/p><p> case 0://第一組的第四個命令(跳舞)</p><p> //跳舞,清看門狗,時間比較長</p><p> Robot_Dance(2);</p><p> *(unsigned int *)0x7012 = 0x0001;</p><p><b> break;<
90、;/b></p><p> case 1://第二組的第四個命令(左轉(zhuǎn))</p><p> //播放旋轉(zhuǎn)聲音,向左旋轉(zhuǎn)</p><p> Robot_TurnLeft(1);</p><p> PlaySnd(WALK);</p><p> ImportFiveCommand(0xf700);&
91、lt;/p><p> uiBS_Team = 0;</p><p> goto Loop;</p><p><b> break;</b></p><p> case 2://第三組的第四個命令(發(fā)射)</p><p> //播放咚咚聲音,發(fā)射飛盤</p><p&
92、gt; Robot_Shoot_Prepare(5);</p><p> Delay(1500);</p><p> Robot_Shoot2(3);</p><p> ImportFiveCommand(0xf700);</p><p> uiBS_Team = 0;</p><p> goto Loop
93、;</p><p><b> break;</b></p><p><b> }</b></p><p> *(unsigned int *)0x7012 = 1;</p><p> uiActivated = 0;</p><p><b> break;
94、</b></p><p> case Command_Four_ID:</p><p> switch(uiBS_Team)</p><p><b> {</b></p><p> case 0://第一組的第五個命令(再來一曲)</p><p><b>
95、//再來一曲</b></p><p> Robot_DanceAgain(2);</p><p><b> break;</b></p><p> case 1://第二組的第五個命令(右轉(zhuǎn))</p><p> //播放聲音,向右旋轉(zhuǎn),導(dǎo)到第一組命令,設(shè)置uiBS_Team為0,推出循環(huán)<
96、;/p><p> Robot_TurnRight(1);</p><p> PlaySnd(WALK);</p><p> ImportFiveCommand(0xf700);</p><p> uiBS_Team = 0;</p><p> goto Loop;</p><p><
97、b> break;</b></p><p> case 2://第三組的第五個命令(連續(xù)發(fā)射)</p><p> //連續(xù)發(fā)射飛盤,導(dǎo)到第一組命令,設(shè)置uiBS_Team為0,退出循環(huán)</p><p> Robot_Shoot_Prepare(5);</p><p> Delay(1500);</p&
98、gt;<p> Robot_Shoot_Five(3);</p><p> ImportFiveCommand(0xf700);</p><p> uiBS_Team = 0;</p><p> goto Loop;</p><p><b> break;</b></p><p
99、><b> }</b></p><p> *(unsigned int *)0x7012 = 1;</p><p> uiActivated = 0;</p><p><b> break;</b></p><p><b> }</b></p>&
100、lt;p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(uiRes == NAME_ID)</p><p><b> {</b></p><
101、;p> *(unsigned int *)0x7012 = 1;</p><p> uiActivated = 1;</p><p> uiTimerCount = 0;</p><p> PlaySnd(OK);//播放應(yīng)答OK</p><p><b> }</b></p>&l
102、t;p><b> }</b></p><p><b> }</b></p><p> else if(uiActivated)</p><p><b> {</b></p><p> if(++uiTimerCount > 700)</p&g
103、t;<p><b> {</b></p><p> *(unsigned int *)0x7012 = 1;</p><p> uiActivated = 0;</p><p> uiTimerCount = 0;</p><p> PlaySnd(HOOO);</p><p
104、><b> }</b></p><p><b> }</b></p><p> uiKey = *P_IOA_Data;</p><p> uiKey = uiKey&0x0004;</p><p> if(uiKey == 0x0004)</p><p&
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于凌陽單片機的語音機器人的設(shè)計.pdf
- 基于單片機的機器人管家畢業(yè)論文
- 畢業(yè)論文---語音識別機器人的設(shè)計
- 畢業(yè)論文基于單片機的清掃機器人設(shè)計
- 基于arduino單片機避障小車機器人畢業(yè)論文
- 畢業(yè)論文-語音識別機器人的設(shè)計與實現(xiàn)
- 基于arduino單片機避障小車機器人畢業(yè)論文
- 畢業(yè)論文-單片機家用清掃機器人-單片機設(shè)計類.doc
- 畢業(yè)論文-單片機家用清掃機器人-單片機設(shè)計類.doc
- 教案:基于arduino單片機避障小車機器人畢業(yè)論文
- 基于單片機的語音播報器設(shè)計【畢業(yè)論文】
- 基于單片機的一種小型避障機器人的設(shè)計畢業(yè)論文
- 畢業(yè)設(shè)計----凌陽單片機實驗板
- 畢業(yè)設(shè)計--凌陽單片機實驗板
- 基于凌陽spce061a單片機的語音存儲與回放系統(tǒng)設(shè)計
- 基于單片機的掃地機器人的設(shè)計論文
- 基于單片機的gps語音播報器設(shè)計【畢業(yè)論文】
- 基于avr單片機軟件控制系統(tǒng)設(shè)計的機器人畢業(yè)論文外文翻譯
- 凌陽單片機流水燈
- 基于單片機的語音識別系統(tǒng) 畢業(yè)設(shè)計
評論
0/150
提交評論