版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能小車課程設(shè)計(jì)--智能循跡小車
- 課程設(shè)計(jì)-- 智能小車循跡控制系統(tǒng)
- 智能小車課程設(shè)計(jì)--智能巡線小車的設(shè)計(jì)
- 遙控智能小車課程設(shè)計(jì)
- 課程設(shè)計(jì)--智能小車控制信號的fpga實(shí)現(xiàn)
- 智能小車控制系統(tǒng)課程設(shè)計(jì)說明書
- 小車自動往返控制課程設(shè)計(jì)
- 智能控制課程設(shè)計(jì)
- 嵌入式課程設(shè)計(jì)--智能循跡小車設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--智能小車—硬件設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電動智能小車
- 單片機(jī)智能藍(lán)牙小車課程設(shè)計(jì)
- 智能小車課程設(shè)計(jì)說明書
- plc小車運(yùn)行方向控制課程設(shè)計(jì)
- 綜合電子課程設(shè)計(jì)----智能循跡避障小車
- 裝卸料小車控制系統(tǒng)課程設(shè)計(jì)
- 裝卸料小車控制系統(tǒng)課程設(shè)計(jì)
- 裝卸料小車控制系統(tǒng)課程設(shè)計(jì)
- plc課程設(shè)計(jì)---運(yùn)料小車控制模擬
- 課程設(shè)計(jì)---運(yùn)動小車plc控制系統(tǒng)設(shè)計(jì)
評論
0/150
提交評論