2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  課程設(shè)計(jì)說明書(論文)</p><p>  課程名稱: 單片機(jī)課程設(shè)計(jì) </p><p>  設(shè)計(jì)題目: 智能控制小車 </p><p>  院 系:電氣學(xué)院自動控制與測試系</p><p>  班 級: </p><p>&l

2、t;b>  課程設(shè)計(jì)考核表</b></p><p>  題目: 智能聲控小車</p><p><b>  實(shí)驗(yàn)部分考核</b></p><p><b>  總結(jié)報告評分</b></p><p>  總成績: 指導(dǎo)教師簽字:<

3、;/p><p><b>  大學(xué)課程設(shè)計(jì)任務(wù)書</b></p><p>  *注:此任務(wù)書由課程設(shè)計(jì)指導(dǎo)教師填寫</p><p><b>  單片機(jī)課設(shè)報告</b></p><p><b>  一、課設(shè)目的及要求</b></p><p><b> 

4、 (1)課題目的</b></p><p>  通過設(shè)計(jì)一個由單片機(jī)控制的智能小車來熟悉模塊化編程方法,掌握單片機(jī)C語言的程序設(shè)計(jì)和調(diào)試方法,并理解單片機(jī)的原理、結(jié)構(gòu)、指令、運(yùn)行模式功能模塊及應(yīng)用開發(fā)方法。</p><p>  (2)課題意義及單片機(jī)發(fā)展現(xiàn)狀 </p><p>  語音處理技術(shù)是一門新興的技術(shù),它不僅包括語音的錄制和播放,還涉及語音的壓縮編

5、碼和解碼,語音的識別等各種處理技術(shù)。以往做這方面的設(shè)計(jì),一般有兩個途徑:一種方案是單片機(jī)擴(kuò)展設(shè)計(jì),另一種就是借助于專門的語音處理芯片。普通的單片機(jī)往往不能實(shí)現(xiàn)這么復(fù)雜的過程和算法,即使勉強(qiáng)實(shí)現(xiàn)也要加很多的外圍器件。專門的語音處理芯片也比較多,像ISD系列、PM50系列等,但是專門的語音處理芯片功能比較單一,想在語音之外的其他方面應(yīng)用基本是不可能的。</p><p>  SPCE061A是凌陽科技推出的一款16位μ

6、'nSP結(jié)構(gòu)的微控制器。該芯片帶有硬件乘法器,能夠?qū)崿F(xiàn)乘法運(yùn)算、內(nèi)積運(yùn)算等復(fù)雜的運(yùn)算。它不僅運(yùn)算能力強(qiáng),而且處理速度快,單周期最高可以達(dá)到49MHz。SPCE061A內(nèi)嵌32K字的FLASH程序存儲器以及2K的SRAM。同時該SOC芯片具有ADC和DAC功能,其MIC_ADC通道帶有AGC自動增益環(huán)節(jié),能夠很輕松的將語音信號采集到芯片內(nèi)部,兩路10位的電流輸出型DAC,只要外接一個功放就可以完成聲音的播放。以上介紹的這些硬件資源

7、使得該SPCE061A能夠單芯片實(shí)現(xiàn)語音處理功能。</p><p>  借助于SPCE061A的語音特色,我們開發(fā)出了這款語音控制小車。小車不僅具有前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)停車等基本功能;同時配合SPCE061A的語音特色,實(shí)現(xiàn)語音控制功能。(3)設(shè)計(jì)要求</p><p>  小車采用語音識別技術(shù),可通過語音命令對其行駛狀態(tài)進(jìn)行控制。 </p><p>  基本設(shè)計(jì)

8、任務(wù):前進(jìn)、倒車、左拐、右拐、停車的功能。</p><p>  附加設(shè)計(jì)任務(wù):S型前進(jìn)、左轉(zhuǎn)圈和右轉(zhuǎn)圈</p><p>  二、課題設(shè)計(jì)的主要內(nèi)容和具體實(shí)施方案</p><p><b>  主要內(nèi)容</b></p><p>  1. 可以通過簡單的I/O操作實(shí)現(xiàn)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)等功能; </p>

9、<p>  2. 配合SPCE061A的語音特色,利用系統(tǒng)的語音播放和語音識別資源,實(shí)現(xiàn)語音控制的功能; </p><p>  3. 可以在行走過程中聲控改變小車運(yùn)動狀態(tài)</p><p><b>  實(shí)施方案</b></p><p><b>  方案論證:</b></p><p><

10、;b>  方案一:</b></p><p>  采用MCS-51系列單片機(jī)實(shí)現(xiàn),由于有語音識別和語音播放功能,所以需要擴(kuò)展語音識別模塊和語音播放模塊,這樣必然造成端口的資源緊張,所以還必須加入接口擴(kuò)展芯片。該實(shí)現(xiàn)方案結(jié)構(gòu)如下圖所示。</p><p><b>  方案二:</b></p><p>  采用SPCE061A實(shí)現(xiàn)語音

11、控制小車方案,由于SPCE061A內(nèi)部具有語音識別和語音播放功能,所以只需要擴(kuò)展基本的MIC和語音功放即可,該方案結(jié)構(gòu)如下圖所示。</p><p>  比較以上兩個方案,方案二結(jié)構(gòu)簡單,易于操作,故選則方案二。</p><p><b>  方案實(shí)施:</b></p><p> ?、毕到y(tǒng)的結(jié)構(gòu)框圖如下圖:</p><p>

12、  系統(tǒng)組成主要包括以下兩部分:SPCE061A精簡開發(fā)板、語音小車控制電路板。</p><p>  圖中的語音輸入部分MIC_ IN、按鍵輸入KEY、聲音輸出部分的功率放大環(huán)節(jié)等已經(jīng)做到了精簡開發(fā)板——61板上,為我們使用提供了很大的方便。在電機(jī)的驅(qū)動方面,采用全橋驅(qū)動技術(shù),利用四個I/O端口分為兩組分別實(shí)現(xiàn)兩個電機(jī)的正傳、反轉(zhuǎn)和停三態(tài)運(yùn)行。</p><p><b> ?、蚕到y(tǒng)

13、控制方案</b></p><p>  小車的運(yùn)動控制采用語音控制和中斷定時控制相結(jié)合,通過語音觸發(fā)小車動作,小車動作之后,隨時可以通過語音指令改變小車的運(yùn)動狀態(tài)。在每一次動作觸發(fā)的同時啟動定時器,如果小車由于某些原因不能正常的接收語音指令,則只要定時時間到,中斷服務(wù)程序會發(fā)出指令讓小車停下來。</p><p><b> ?、耻圀w結(jié)構(gòu)介紹</b></p

14、><p>  語音控制小車為四輪結(jié)構(gòu),其中前面兩個車輪由前輪電機(jī)控制,在連桿和支點(diǎn)作用下控制前輪左右擺動,來調(diào)節(jié)小車的前進(jìn)方向。在自然狀態(tài)下,前輪在彈簧作用下保持中間位置。后面兩個車輪由后輪電機(jī)驅(qū)動,為整個小車提供動力,所以又稱前面的輪子為方向輪,后面的兩個輪子為驅(qū)動輪,如下圖所示。</p><p><b>  小車的行走原理:</b></p><p&

15、gt;  直走:由小車的結(jié)構(gòu)分析,在自然狀態(tài)下,前輪在彈簧作用下保持中間狀態(tài),這是只要后輪電機(jī)正轉(zhuǎn)小車就會前進(jìn)。</p><p>  倒車:倒車動作和前進(jìn)動作剛好相反,前輪電機(jī)仍然保持中間狀態(tài),后輪電機(jī)反轉(zhuǎn),小車就會向后運(yùn)動。 </p><p>  左轉(zhuǎn):前輪電機(jī)逆時針旋轉(zhuǎn)(規(guī)定為正轉(zhuǎn)),后輪電機(jī)正轉(zhuǎn),這時小車就會在前后輪共同作用下朝左側(cè)前進(jìn)。 </p><p> 

16、 右轉(zhuǎn):前輪電機(jī)反轉(zhuǎn),后輪電機(jī)正轉(zhuǎn),這時小車就是會在前后輪共同作用下朝右側(cè)前進(jìn)。</p><p><b>  小車控制板原理圖:</b></p><p>  控制板主要包括:接口電路、電源電路和兩路電機(jī)的驅(qū)動電路。</p><p>  小車基本的運(yùn)行狀態(tài)與輸入的對照表如下</p><p><b> ?、聪到y(tǒng)軟件

17、設(shè)計(jì)</b></p><p>  系統(tǒng)的總體程序流程如下圖</p><p>  語音識別小車的主程序分為四大部分:初始化部分、訓(xùn)練部分、識別部分、重訓(xùn)操作。</p><p>  初始化部分:初始化操作將IOB8~IOB11設(shè)置為輸出端,用以控制電機(jī)。</p><p>  訓(xùn)練部分:訓(xùn)練部分完成的工作就是建立語音模型。程序一開始判斷

18、小車是否被訓(xùn)練過,如果沒有訓(xùn)練過則要求對其進(jìn)行訓(xùn)練,并且會在訓(xùn)練成功之后將訓(xùn)練的模型存儲到FLASH,在以后使用時不需要重新訓(xùn)練;如果已經(jīng)訓(xùn)練過會把存儲在FLASH中的模型調(diào)出來裝載到辨識器中。</p><p>  由于凌陽單片機(jī)的局限性,每次最多只能識別5條指令,因此在訓(xùn)練時對8條指令預(yù)先分為第一、第二兩組,每組4條指令。</p><p>  當(dāng)程序檢測到訓(xùn)練標(biāo)志位BS_Flag內(nèi)容為0

19、xffff,就會要求操作者對它進(jìn)行訓(xùn)練操作,訓(xùn)練采用兩次訓(xùn)練獲取結(jié)果的方式,以訓(xùn)練名字為例:小車首先會提示:給我取個名字吧,這時你可以告訴它一個名字(比如小車);然后它會提示:請?jiān)僬f一遍,這時再次告訴它名字(小車),如果兩次的聲音差別不大,小車就能夠成功的建立模型,名稱訓(xùn)練成功;如果沒能夠成功的建立模型,小車會告知失敗的原因并要求重新訓(xùn)練。成功訓(xùn)練名稱后會給出下一條待訓(xùn)練指令提示音:前進(jìn),參照名稱訓(xùn)練方式訓(xùn)練前進(jìn)指令。依次訓(xùn)練小車的名稱

20、——前進(jìn)指令——倒車指令——左轉(zhuǎn)指令——右轉(zhuǎn)指令——S型前進(jìn)指令——左轉(zhuǎn)圈指令——右轉(zhuǎn)圈指令,全部訓(xùn)練成功子程序返回,訓(xùn)練結(jié)束。</p><p>  識別部分:設(shè)定Result為辨識結(jié)果,team為組別標(biāo)識變量。預(yù)先加載第一組語音模型(team=0),程序運(yùn)行到左轉(zhuǎn)函數(shù)后隨即加載第二組語音模型。</p><p>  語音識別首先獲取辨識器的辨識結(jié)果,判斷是否有語音觸發(fā),如果有語音觸發(fā)則會返

21、回識別結(jié)果Result的值。如果Result是第二組(team=1)里面的命令,則該命令無效,跳出循環(huán)等待下一次命令;如果Result是第一組(team=0)里面的命令,則根據(jù)相應(yīng)的名稱執(zhí)行相應(yīng)的動作,并且重新設(shè)定team的值。為方便跳轉(zhuǎn),主程序里設(shè)置名稱指令、前進(jìn)指令、后退指令執(zhí)行完畢后team清0,左拐指令執(zhí)行完畢后team置1,加載第二組語音模型。同理,在team置1的情況下,Result只識別第二組(team=1)的命令,對第一

22、組無視。第二組的命令里面,右拐指令、S型前進(jìn)指令、左轉(zhuǎn)圈指令執(zhí)行完畢后team置1,右轉(zhuǎn)圈指令執(zhí)行完畢后team清0,重新加載第一組命令。以此類推。</p><p>  雖然已經(jīng)有了前進(jìn)、后退以及倒車等語音控制指令,但是考慮環(huán)境的干擾因素,小車運(yùn)行時的噪音影響和有效距離的限制,小車運(yùn)行后可能接收不到語音指令而一直運(yùn)行。為了防止出現(xiàn)這種情況,加入了時間控制,在啟動小車運(yùn)行的同時啟動定時器,定時器時間到停止小車的運(yùn)行

23、,該定時器借助于2Hz時基中斷完成,可以在程序中修改uiTimeset參數(shù)來控制運(yùn)行時間,當(dāng)uiTimeset=3時,運(yùn)行時間為1.5s,以此類推。</p><p>  注:查閱光盤資料,在轉(zhuǎn)彎之前首先讓前輪朝目標(biāo)方向的反方向偏轉(zhuǎn),然后再讓前輪朝目標(biāo)方向偏轉(zhuǎn),據(jù)說這樣這樣前輪的擺動范圍更大,慣性更大,轉(zhuǎn)向效果會更好,但實(shí)際操作歷來感覺效果一般。</p><p>  重訓(xùn)操作:考慮到有重新訓(xùn)

24、練的需求,設(shè)置了重新訓(xùn)練的按鍵(61板的KEY3),循環(huán)掃描該按鍵,一旦檢測到此鍵按下,則將擦除訓(xùn)練標(biāo)志位(0xe000單元),并等待復(fù)位。復(fù)位后,程序重新執(zhí)行,當(dāng)檢測到訓(xùn)練標(biāo)志位為0xffff時會要求重新對其進(jìn)行訓(xùn)練。</p><p>  三:課程設(shè)計(jì)中發(fā)現(xiàn)的問題及解決方案</p><p>  由于電路板焊接與調(diào)試以及前期程序基本功能的實(shí)現(xiàn)均由謝思哲實(shí)現(xiàn),我這兒提出的都是加上拓展功能時出

25、現(xiàn)的各種問題:</p><p>  1.制作音頻文件時程序始終播放不了。</p><p>  解決方法:一開始以為是文件太大了識別不了,結(jié)果發(fā)現(xiàn)自己錄的音頻文件比系統(tǒng)自帶的還小,不是這個原因;后來發(fā)現(xiàn)是之前用window自帶的錄音機(jī)格式轉(zhuǎn)換的時候把格式弄錯導(dǎo)致,改回去便可。</p><p>  2.添加命令時,需要添加相應(yīng)的音頻文件,導(dǎo)致各種串音。</p>

26、;<p>  解決方法:經(jīng)老師點(diǎn)撥,在Resource.asm文件里最下面的添加文件順序必須與左側(cè)Resource對話框里的音頻文件順序一致,而且必須把添加的文件全部放在最后,不能因?yàn)橛?xùn)練命令的原因而認(rèn)為會“提早”被調(diào)用而放在前面,這樣會造成串音。</p><p>  四、課程設(shè)計(jì)的心得體會</p><p>  這次課程設(shè)計(jì)在上學(xué)期的51單片機(jī)的基礎(chǔ)上第一次接觸全新的開發(fā)板和

27、編譯環(huán)境,加強(qiáng)對單片機(jī)運(yùn)作原理的理解。同時,貫穿整個課設(shè)的查詢資料大大鍛煉了我的搜尋資料的能力。同時,這是我第一次使用集成語音傳感系統(tǒng)的單片機(jī)開發(fā)板,是對于新鮮事物的一種嘗試,對我以后更深入探索電子元件世界會有幫助的。</p><p><b>  五、參考資料</b></p><p>  凌陽61板產(chǎn)品資料 凌陽大學(xué)計(jì)劃</p><p&g

28、t;<b>  六、鳴謝</b></p><p>  謝謝學(xué)校、學(xué)院給我們提供了動手實(shí)踐單片機(jī)的機(jī)會,更感謝課設(shè)過程中胡瑞強(qiáng)老師的悉心指導(dǎo)與幫助。</p><p><b>  附:源程序</b></p><p>  //====================================================

29、====</p><p>  // 工程名稱:Car_Demo</p><p>  // 功能描述:實(shí)現(xiàn)小車的語音控制</p><p>  // 涉及的庫:CMacro1016.lib</p><p>  // bsrv222SDL.lib</p><p>  //sacmv

30、26e.lib</p><p>  // 組成文件:main.c</p><p>  //Flash.asm, hardware.asm,ISR.asm </p><p>  // hardware.h,s480.h, hardware.inc</p><p>  //硬件連接:IOA0-----KEY1<

31、/p><p>  //IOA1-----KEY2</p><p>  //IOA2-----KEY3</p><p>  //IOB8-----前進(jìn)</p><p>  //IOB9-----倒車</p><p>  //IOB10----左拐</p><p>

32、;  //IOB11----右拐</p><p>  //維護(hù)記錄:2005-12-12 v1.0</p><p>  //========================================================</p><p>  #include "s480.h"</p><p> 

33、 #include "bsrsd.h"</p><p>  #defineP_IOA_Data (volatile unsigned int *)0x7000 </p><p>  #define P_IOA_Dir (volatile unsigned int *)0x7002</p><p>  #define P_IOA_

34、Attrib (volatile unsigned int *)0x7003</p><p>  #define P_IOB_Data(volatile unsigned int *)0x7005 </p><p>  #define P_IOB_Dir(volatile unsigned int *)0x7007 </p><p>  #de

35、fine P_IOB_Attrib(volatile unsigned int *)0x7008 </p><p>  #define P_TimerA_Data(volatile unsigned int *)0x700A </p><p>  #define P_TimerA_Ctrl(volatile unsigned int *)0x700B </p&

36、gt;<p>  #define P_TimerB_Data(volatile unsigned int *)0x700C </p><p>  #define P_TimerB_Ctrl(volatile unsigned int *)0x700D </p><p>  #define P_Watchdog_Clear(volatile unsigned

37、int *)0x7012 </p><p>  #define P_INT_Mask(volatile unsigned int *)0x702D </p><p>  #define P_INT_Clear(volatile unsigned int *)0x7011 </p><p>  #define NAME_ID 0x100

38、 //名字</p><p>  #define COMMAND_GO_ID 0x101 //前進(jìn)</p><p>  #define COMMAND_BACK_ID 0x102 //倒車</p><p>  #define COMMAND_LEFT_ID 0x103 //左拐</p><p>  

39、#define COMMAND_RIGHT_ID 0x104 //右拐</p><p>  #define COMMAND_S_ID 0x105 //S型前進(jìn)</p><p>  #define COMMAND_LL_ID 0x106 //左轉(zhuǎn)圈</p><p>  #define COMMAND_RR_ID

40、 0x107 //右轉(zhuǎn)圈</p><p>  #define S_NAME0//給我取個名字吧</p><p>  #define S_ACT11//前進(jìn)</p><p>  #define S_ACT22//倒車,請注意</p><p>  #defin

41、e S_ACT33//左拐</p><p>  #define S_ACT44//右拐</p><p>  #define S_RDY5//Yeah</p><p>  #define S_AGAIN6//請?jiān)僬f一遍</p><p>  #define

42、S_NOVOICE7//沒有聽到任何聲音</p><p>  #define S_CMDDIFF8//說什么暗語呀</p><p>  #define S_NOISY8//說什么暗語呀</p><p>  #define S_START9//準(zhǔn)備就緒,開始辨識</p>

43、<p>  #define S_GJG10//拐就拐</p><p>  #define S_DCZY11//倒車,請注意</p><p>  #define S_WAY 12 //S型前進(jìn)</p><p>  #define S_LL13//向左轉(zhuǎn)圈<

44、/p><p>  #define S_RR14//向右轉(zhuǎn)圈</p><p>  extern unsigned int BSR_SDModel[100];//外部變量BSR_SDModel[100],辨識器自帶</p><p>  extern void F_FlashWrite1Word(unsigned int addr,unsig

45、ned int Value);</p><p>  extern void F_FlashErase(unsigned int sector);</p><p>  unsigned int uiTimeset = 3;//運(yùn)行時間定時,調(diào)整該參數(shù)控制運(yùn)行時間</p><p>  unsigned int uiTimecont; //

46、運(yùn)行時間計(jì)時</p><p>  //=============================================================</p><p>  // 語法格式:void Delay();</p><p>  // 實(shí)現(xiàn)功能:延時</p><p><b>  // 參數(shù):無</b&g

47、t;</p><p>  // 返回值:無</p><p>  //=============================================================</p><p>  void Delay()</p><p><b>  {</b></p>&l

48、t;p>  unsigned int i;</p><p>  for(i=0;i<0x3Fff;i++)</p><p><b>  {</b></p><p>  *P_Watchdog_Clear=0x0001;</p><p><b>  }</b></p><

49、;p><b>  }</b></p><p>  //=============================================================</p><p>  // 語法格式:void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);</p><p>

50、  // 實(shí)現(xiàn)功能:語音播放函數(shù)</p><p>  // 參數(shù):SndIndex-播放語音資源索引號</p><p>  //DAC_Channel-播放聲道選擇</p><p>  // 返回值:無</p><p>  //=================================================

51、============</p><p>  void PlaySnd(unsigned SndIndex,unsigned DAC_Channel)</p><p><b>  {</b></p><p>  BSR_StopRecognizer();//停止識別器</p><p>  SACM_S48

52、0_Initial(1);//初始化為自動播放</p><p>  SACM_S480_Play(SndIndex, DAC_Channel, 3);//開始播放一段語音</p><p>  while((SACM_S480_Status()&0x0001)!= 0)//是否播放完畢?</p><p><b>  {&

53、lt;/b></p><p>  SACM_S480_ServiceLoop();//解碼并填充隊(duì)列</p><p>  *P_Watchdog_Clear=0x0001;//清看門狗</p><p><b>  }</b></p><p>  SACM_S480_Stop();

54、//停止播放</p><p>  BSR_InitRecognizer(BSR_MIC);//初始化識別器</p><p><b>  }</b></p><p>  //=============================================================</p><p

55、>  // 語法格式:int TrainWord(int WordID,int SndID);</p><p>  // 實(shí)現(xiàn)功能:訓(xùn)練一條指令</p><p>  // 參數(shù):WordID-指令編碼</p><p>  //SndID-指令提示音索引號</p><p>  // 返回值:無</p>&

56、lt;p>  //=============================================================</p><p>  int TrainWord(unsigned int WordID,unsigned int SndID)</p><p><b>  {</b></p><p>  int R

57、esult;</p><p>  PlaySnd(SndID,3);//引導(dǎo)訓(xùn)練,播放指令對應(yīng)動作</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  Result = BSR_Train(WordID,BSR_TRAI

58、N_TWICE);//訓(xùn)練兩次,獲得訓(xùn)練結(jié)果</p><p>  if(Result==0)break;</p><p>  switch(Result)</p><p><b>  {</b></p><p>  case -1://沒有檢測出聲音</p><p>  P

59、laySnd(S_NOVOICE,3);</p><p>  return -1;</p><p>  case -2: //需要訓(xùn)練第二次</p><p>  PlaySnd(S_AGAIN,3);</p><p><b>  break;</b></p><p>  cas

60、e -3://環(huán)境太吵</p><p>  PlaySnd(S_NOISY,3);</p><p>  return -3;</p><p>  case -4://數(shù)據(jù)庫滿</p><p>  return -4;</p><p>  case -5:

61、 //檢測出聲音不同</p><p>  PlaySnd(S_CMDDIFF,3);</p><p>  return -5;</p><p>  case -6: //序號錯誤</p><p>  return -6;</p><p><b>  def

62、ault:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p>

63、;<b>  }</b></p><p>  //=============================================================</p><p>  // 語法格式:void TrainSD_one();</p><p>  // 實(shí)現(xiàn)功能:第一組訓(xùn)練函數(shù)</p><p>

64、<b>  // 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //=============================================================</p><p>  void TrainSD_one()</p><p><b>

65、  {</b></p><p>  BSR_DeleteSDGroup(0);//清除內(nèi)存</p><p>  while(TrainWord(NAME_ID,S_NAME) != 0) ; //訓(xùn)練名稱</p><p>  while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ; //訓(xùn)練

66、第1個動作</p><p>  while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ; //訓(xùn)練第2個動作</p><p>  while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) ; //訓(xùn)練第3個動作</p><p><b>  }</b></p&g

67、t;<p>  //=============================================================</p><p>  // 語法格式:void TrainSD_two();</p><p>  // 實(shí)現(xiàn)功能:第二組訓(xùn)練函數(shù)</p><p><b>  // 參數(shù):無</b>&

68、lt;/p><p>  // 返回值:無</p><p>  //=============================================================</p><p>  void TrainSD_two()</p><p><b>  {</b></p><p&

69、gt;  BSR_DeleteSDGroup(0);//清除內(nèi)存</p><p>  while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ;//訓(xùn)練第4個動作</p><p>  while(TrainWord(COMMAND_S_ID,S_WAY) != 0) ; //訓(xùn)練第5個動作</p><

70、;p>  while(TrainWord(COMMAND_LL_ID,S_LL) != 0) ; //訓(xùn)練第6個動作</p><p>  while(TrainWord(COMMAND_RR_ID,S_RR) != 0) ; //訓(xùn)練第7個動作</p><p><b>  }</b></p><p>  /

71、/=============================================================</p><p>  // 語法格式:void StoreSD_one();</p><p>  // 實(shí)現(xiàn)功能:第一組存儲語音模型函數(shù)</p><p><b>  // 參數(shù):無</b></p>&

72、lt;p>  // 返回值:無</p><p>  //=============================================================</p><p>  void StoreSD_one() </p><p><b>  {</b>

73、;</p><p>  unsigned int ulAddr,i,commandID,g_Ret;</p><p>  F_FlashWrite1Word(0xef00,0xaaaa);</p><p>  F_FlashErase(0xe000);</p><p>  F_FlashErase(0xe100);</p>&l

74、t;p>  F_FlashErase(0xe200);</p><p>  ulAddr=0xe000; //********</p><p>  for(commandID=0x100;commandID<0x104;commandID++)</p><p><b> 

75、 {</b></p><p>  g_Ret=BSR_ExportSDWord(commandID);</p><p>  while(g_Ret!=0)//模型導(dǎo)出成功?</p><p>  g_Ret=BSR_ExportSDWord(commandID);</p><p>  for(i=0;i&

76、lt;100;i++)//保存語音模型SD1(0xe000---0xe063)</p><p><b>  {</b></p><p>  F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);</p><p>  ulAddr+=1;</p><p>

77、<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //=============================================================</p><p>  //

78、語法格式:void StoreSD_two();</p><p>  // 實(shí)現(xiàn)功能:第二組存儲語音模型函數(shù)</p><p><b>  // 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //===========================================

79、==================</p><p>  void StoreSD_two() </p><p><b>  {</b></p><p>  unsigned int ulAddr,i,commandID,g_Ret;</p><p>  F_Fl

80、ashWrite1Word(0xef00,0xaaaa);</p><p>  F_FlashErase(0xe300);</p><p>  F_FlashErase(0xe400);</p><p>  F_FlashErase(0xe500);</p><p>  ulAddr=0xe300;

81、 //********</p><p>  for(commandID=0x105;commandID<0x109;commandID++)</p><p><b>  {</b></p><p>  g_Ret=BSR_ExportSDWord(commandID);</p><p

82、>  while(g_Ret!=0)//模型導(dǎo)出成功?</p><p>  g_Ret=BSR_ExportSDWord(commandID);</p><p>  for(i=0;i<100;i++)//保存語音模型SD1(0xe000---0xe063)</p><p><b>  {</b>

83、;</p><p>  F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);</p><p>  ulAddr+=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><

84、;b>  }</b></p><p>  //=============================================================</p><p>  // 語法格式:void LoadSD_one();</p><p>  // 實(shí)現(xiàn)功能:裝載第一組命令</p><p><b

85、>  // 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //=============================================================</p><p>  void LoadSD_one() </p

86、><p><b>  {</b></p><p>  unsigned int *p,k,jk,Ret,g_Ret;</p><p>  BSR_DeleteSDGroup(0);//清除內(nèi)存</p><p>  p=(int *)0xe000;</p>&

87、lt;p>  for(jk=0;jk<4;jk++)</p><p><b>  {</b></p><p>  for(k=0;k<100;k++)</p><p><b>  {</b></p><p>  Ret=*p;</p><p>

88、  BSR_SDModel[k]=Ret;//裝載語音模型</p><p>  p+=1;</p><p><b>  }</b></p><p>  g_Ret=BSR_ImportSDWord();</p><p>  while(g_Ret!=0)

89、//模型裝載成功?</p><p>  g_Ret=BSR_ImportSDWord();</p><p><b>  }</b></p><p><b>  }</b></p><p>  //=========================================

90、====================</p><p>  // 語法格式:void LoadSD_two();</p><p>  // 實(shí)現(xiàn)功能:裝載第二組命令</p><p>  // 參數(shù):無 </p><p>  // 返回值:無</p><p>  //====================

91、=========================================</p><p>  void LoadSD_two() </p><p><b>  {</b></p><p>  unsigned int *p,k,jk,Ret,g_Ret;</p>

92、<p>  BSR_DeleteSDGroup(0);//清除內(nèi)存</p><p>  p=(int *)0xe300;</p><p>  for(jk=0;jk<4;jk++)</p><p><b>  {</b></p><p>  for(

93、k=0;k<100;k++)</p><p><b>  {</b></p><p>  Ret=*p;</p><p>  BSR_SDModel[k]=Ret;//裝載語音模型</p><p>  p+=1;</p><p><

94、;b>  }</b></p><p>  g_Ret=BSR_ImportSDWord();</p><p>  while(g_Ret!=0)//模型裝載成功?</p><p>  g_Ret=BSR_ImportSDWord();</p><p><b>  }&

95、lt;/b></p><p><b>  }</b></p><p>  //=============================================================</p><p>  // 語法格式:void GoAhead();</p><p>  // 實(shí)現(xiàn)功能:前進(jìn)子

96、函數(shù)</p><p><b>  // 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //=============================================================</p><p>  void GoAhead()

97、 //前進(jìn)</p><p><b>  { </b></p><p>  PlaySnd(S_ACT1,3);//提示</p><p>  *P_IOB_Data=0x0100;//前進(jìn)</p><p>  *P_INT_Mask |= 0x0004;/

98、/以下為中斷定時操作</p><p>  __asm("int fiq,irq");</p><p>  uiTimecont = 0;</p><p><b>  }</b></p><p>  //==================================================

99、===========</p><p>  // 語法格式:void BackUp();</p><p>  // 實(shí)現(xiàn)功能:后退子函數(shù)</p><p><b>  // 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //=================

100、============================================</p><p>  void BackUp() //倒退</p><p><b>  {</b></p><p>  PlaySnd(S_DCZY,3);//提示</p>&

101、lt;p>  *P_IOB_Data=0x0200;//倒退</p><p>  *P_INT_Mask |= 0x0004;//以下為中斷定時操作</p><p>  __asm("int fiq,irq");</p><p>  uiTimecont = 0;</p><p><b

102、>  }</b></p><p>  //=============================================================</p><p>  // 語法格式:void TurnLeft();</p><p>  // 實(shí)現(xiàn)功能:左轉(zhuǎn)子函數(shù)</p><p><b>  

103、// 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //=============================================================</p><p>  void TurnLeft() //左轉(zhuǎn)</p>&l

104、t;p><b>  {</b></p><p>  PlaySnd(S_GJG,3);</p><p>  *P_IOB_Data=0x0900;//右轉(zhuǎn)</p><p>  Delay();</p><p>  *P_IOB_Data=0x0500;//左轉(zhuǎn)<

105、/p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  *

106、P_INT_Mask |= 0x0004;//以下為中斷定時操作</p><p>  __asm("int fiq,irq");</p><p>  uiTimecont = 0;</p><p><b>  }</b></p><p>  //======================

107、=======================================</p><p>  // 語法格式:void TurnRight();</p><p>  // 實(shí)現(xiàn)功能:右轉(zhuǎn)子函數(shù)</p><p><b>  // 參數(shù):無</b></p><p>  // 返回值:無</p>

108、<p>  //=============================================================</p><p>  void TurnRight() //右轉(zhuǎn)</p><p><b>  {</b></p><p>  PlaySnd

109、(S_GJG,3);//語音提示</p><p>  *P_IOB_Data=0x0500;//左轉(zhuǎn)</p><p>  Delay();</p><p>  *P_IOB_Data=0x0900;//右轉(zhuǎn)</p><p>  Delay();Delay();</p>

110、<p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  *P_INT_Mask |= 0x0004;//以下為中斷定時操作</p>

111、;<p>  __asm("int fiq,irq");</p><p>  uiTimecont = 0;</p><p><b>  }</b></p><p>  //=============================================================</p&g

112、t;<p>  // 語法格式:void S_loop();</p><p>  // 實(shí)現(xiàn)功能:停車子函數(shù)</p><p><b>  // 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //====================================

113、=========================</p><p>  void S_loop() //S形路線</p><p><b>  {</b></p><p>  unsigned int i;</p><p>  PlaySnd(S_WAY,

114、3);</p><p>  for(i=0;i<4;i++)</p><p><b>  { </b></p><p>  *P_IOB_Data=0x0500;</p><p>  Delay();</p><p>  *P_IOB_Data=0x0

115、800;</p><p>  *P_IOB_Data=0x0800;</p><p><b>  Delay();</b></p><p>  *P_IOB_Data=0x0500;</p><p>  *P_INT_Mask |= 0x0004;//以下為中斷定時操作</p>&

116、lt;p>  __asm("int fiq,irq");</p><p>  uiTimecont = 0;</p><p>  } </p><p><b>  }</b></p><p>  //======================================

117、=======================</p><p>  // 語法格式:void L_circle();</p><p>  // 實(shí)現(xiàn)功能:左轉(zhuǎn)圈子函數(shù)</p><p><b>  // 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //==

118、===========================================================</p><p>  void L_circle() //向左轉(zhuǎn)圈</p><p><b>  {</b></p><p>  PlaySnd(S_LL,3);</

119、p><p>  *P_IOB_Data=0x0900;//右轉(zhuǎn)</p><p>  Delay();//延時</p><p>  *P_IOB_Data=0x0500;//左轉(zhuǎn)</p><p>  Delay();Delay();</p><p>  Delay();Del

120、ay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><

121、;p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  Delay();Del

122、ay();</p><p>  Delay();Delay();</p><p>  Delay();Delay();</p><p>  *P_INT_Mask |= 0x0004;//以下為中斷定時操作</p><p>  __asm("int fiq,irq");</p><p&g

123、t;  uiTimecont = 0;</p><p><b>  }</b></p><p>  //=============================================================</p><p>  // 語法格式:void R_circle();</p><p>  /

124、/ 實(shí)現(xiàn)功能:右轉(zhuǎn)圈子函數(shù)</p><p><b>  // 參數(shù):無</b></p><p>  // 返回值:無</p><p>  //=============================================================</p><p>  void R_circle

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論