久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4915|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

智能小車(chē)源程序及制作資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

全部資料下載:
單片機(jī)智能小車(chē).rar (411.11 KB, 下載次數(shù): 8)


部分代碼預(yù)覽:
  1. #include "s480.h"
  2. #include "bsrsd.h"

  3. #define        P_IOA_Data                         (volatile unsigned int *)0x7000   
  4. #define P_IOA_Dir                         (volatile unsigned int *)0x7002
  5. #define P_IOA_Attrib                 (volatile unsigned int *)0x7003
  6. #define P_IOB_Data                        (volatile unsigned int *)0x7005  
  7. #define P_IOB_Dir                        (volatile unsigned int *)0x7007   
  8. #define P_IOB_Attrib                (volatile unsigned int *)0x7008   
  9. #define P_TimerA_Data                (volatile unsigned int *)0x700A   
  10. #define P_TimerA_Ctrl                (volatile unsigned int *)0x700B   
  11. #define P_TimerB_Data                (volatile unsigned int *)0x700C   
  12. #define P_TimerB_Ctrl                (volatile unsigned int *)0x700D   
  13. #define P_Watchdog_Clear        (volatile unsigned int *)0x7012   
  14. #define P_INT_Mask                        (volatile unsigned int *)0x702D   
  15. #define P_INT_Clear                        (volatile unsigned int *)0x7011   

  16. #define NAME_ID                         0x100
  17. #define COMMAND_GO_ID                 0x101
  18. #define COMMAND_BACK_ID         0x102
  19. #define COMMAND_LEFT_ID         0x103
  20. #define COMMAND_RIGHT_ID         0x104

  21. #define S_NAME                                0                                                        //給我取個(gè)名字吧
  22. #define S_ACT1                                1                                                        //前進(jìn)
  23. #define S_ACT2                                2                                                        //倒車(chē),請(qǐng)注意
  24. #define S_ACT3                                3                                                        //左拐
  25. #define S_ACT4                                4                                                        //右拐        
  26. #define S_RDY                                5                                                        //Yeah
  27. #define S_AGAIN                                6                                                        //請(qǐng)?jiān)僬f(shuō)一遍
  28. #define S_NOVOICE                        7                                                        //沒(méi)有聽(tīng)到任何聲音
  29. #define S_CMDDIFF                        8                                                        //說(shuō)什么暗語(yǔ)呀
  30. #define S_NOISY                                8                                                        //說(shuō)什么暗語(yǔ)呀
  31. #define S_START                                9                                                        //準(zhǔn)備就緒,開(kāi)始辨識(shí)        
  32. #define S_GJG                                10                                                        //拐就拐
  33. #define S_DCZY                                11                                                        //倒車(chē),請(qǐng)注意

  34. extern  unsigned int BSR_SDModel[100];                                        //外部變量BSR_SDModel[100],辨識(shí)器自帶
  35. extern void F_FlashWrite1Word(unsigned int addr,unsigned int Value);
  36. extern void F_FlashErase(unsigned int sector);
  37. unsigned int uiTimeset = 3;                                                                //運(yùn)行時(shí)間定時(shí),調(diào)整該參數(shù)控制運(yùn)行時(shí)間
  38. unsigned int uiTimecont;                                                                 //運(yùn)行時(shí)間計(jì)時(shí)

  39. //=============================================================
  40. // 語(yǔ)法格式:        void Delay();
  41. // 實(shí)現(xiàn)功能:        延時(shí)
  42. // 參數(shù):                無(wú)
  43. // 返回值:                無(wú)
  44. //=============================================================
  45. void Delay()                                                        
  46. {
  47.         unsigned int i;
  48.         for(i=0;i<0x3Fff;i++)
  49.         {
  50.                 *P_Watchdog_Clear=0x0001;
  51.         }
  52. }

  53. //=============================================================
  54. // 語(yǔ)法格式:        void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);
  55. // 實(shí)現(xiàn)功能:        語(yǔ)音播放函數(shù)
  56. // 參數(shù):                SndIndex-播放語(yǔ)音資源索引號(hào)
  57. //                                DAC_Channel-播放聲道選擇
  58. // 返回值:                無(wú)
  59. //=============================================================
  60. void PlaySnd(unsigned SndIndex,unsigned DAC_Channel)
  61. {
  62.         BSR_StopRecognizer();                                                                //停止識(shí)別器
  63.         SACM_S480_Initial(1);                                                                //初始化為自動(dòng)播放
  64.         SACM_S480_Play(SndIndex, DAC_Channel, 3);                        //開(kāi)始播放一段語(yǔ)音
  65.         while((SACM_S480_Status()&0x0001)!= 0)                                //是否播放完畢?
  66.         {
  67.                 SACM_S480_ServiceLoop();                                                //解碼并填充隊(duì)列
  68.                 *P_Watchdog_Clear=0x0001;                                                //清看門(mén)狗
  69.         }
  70.         SACM_S480_Stop();                                                                        //停止播放
  71.         BSR_InitRecognizer(BSR_MIC);                                                //初始化識(shí)別器
  72. }

  73. //=============================================================
  74. // 語(yǔ)法格式:        int TrainWord(int WordID,int SndID);
  75. // 實(shí)現(xiàn)功能:        訓(xùn)練一條指令
  76. // 參數(shù):                WordID-指令編碼
  77. //                                SndID-指令提示音索引號(hào)
  78. // 返回值:                無(wú)
  79. //=============================================================
  80. int TrainWord(unsigned int WordID,unsigned int SndID)
  81. {
  82.         int Result;
  83.         PlaySnd(SndID,3);                                                                        //引導(dǎo)訓(xùn)練,播放指令對(duì)應(yīng)動(dòng)作
  84.         while(1)
  85.         {
  86.                 Result = BSR_Train(WordID,BSR_TRAIN_TWICE);                //訓(xùn)練兩次,獲得訓(xùn)練結(jié)果
  87.                                                                                 
  88.                 if(Result==0)break;
  89.                 switch(Result)
  90.                 {
  91.                 case -1:                                                                                //沒(méi)有檢測(cè)出聲音
  92.                         PlaySnd(S_NOVOICE,3);
  93.                         return -1;
  94.                 case -2:                                                                                 //需要訓(xùn)練第二次
  95.                         PlaySnd(S_AGAIN,3);
  96.                         break;
  97.                 case -3:                                                                                //環(huán)境太吵
  98.                         PlaySnd(S_NOISY,3);
  99.                         return -3;        
  100.                 case -4:                                                                                //數(shù)據(jù)庫(kù)滿(mǎn)
  101.                          return -4;        
  102.                 case -5:                                                                     //檢測(cè)出聲音不同
  103.                         PlaySnd(S_CMDDIFF,3);
  104.                         return -5;
  105.                 case -6:                                                                     //序號(hào)錯(cuò)誤
  106.                         return -6;
  107.                 default:
  108.                         break;
  109.                 }
  110.         }
  111.         return 0;
  112. }

  113. //=============================================================
  114. // 語(yǔ)法格式:        void TrainSD();
  115. // 實(shí)現(xiàn)功能:        訓(xùn)練函數(shù)
  116. // 參數(shù):                無(wú)
  117. // 返回值:                無(wú)
  118. //=============================================================
  119. void TrainSD()
  120. {
  121.         while(TrainWord(NAME_ID,S_NAME) != 0) ;                          //訓(xùn)練名稱(chēng)
  122.         while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ;                  //訓(xùn)練第1個(gè)動(dòng)作
  123.         while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ;          //訓(xùn)練第2個(gè)動(dòng)作
  124.         while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) ;          //訓(xùn)練第3個(gè)動(dòng)作
  125.         while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ;        //訓(xùn)練第4個(gè)動(dòng)作
  126. }

  127. //=============================================================
  128. // 語(yǔ)法格式:        void StoreSD();
  129. // 實(shí)現(xiàn)功能:        存儲(chǔ)語(yǔ)音模型函數(shù)
  130. // 參數(shù):                無(wú)
  131. // 返回值:                無(wú)
  132. //=============================================================
  133. void StoreSD()                                                   
  134. {        unsigned int ulAddr,i,commandID,g_Ret;
  135.         F_FlashWrite1Word(0xef00,0xaaaa);
  136.          F_FlashErase(0xe000);
  137.            F_FlashErase(0xe100);
  138.            F_FlashErase(0xe200);
  139.            ulAddr=0xe000;//********
  140.         for(commandID=0x100;commandID<0x105;commandID++)
  141.         {
  142.                 g_Ret=BSR_ExportSDWord(commandID);                        
  143.                 while(g_Ret!=0)                                                                        //模型導(dǎo)出成功?
  144.                 g_Ret=BSR_ExportSDWord(commandID);               
  145.                 for(i=0;i<100;i++)                                                                //保存語(yǔ)音模型SD1(0xe000---0xe063)
  146.                 {
  147.                     F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);
  148.                         ulAddr+=1;                                                                                                
  149.                 }
  150.         }
  151. }

  152. //=============================================================
  153. // 語(yǔ)法格式:        void StoreSD();
  154. // 實(shí)現(xiàn)功能:        裝載語(yǔ)音模型函數(shù)
  155. // 參數(shù):                無(wú)
  156. // 返回值:                無(wú)
  157. //=============================================================
  158. void LoadSD()                                                   
  159. {        unsigned int *p,k,jk,Ret,g_Ret;
  160.         p=(int *)0xe000;                                                                                                                                                                        
  161.         for(jk=0;jk<5;jk++)
  162.         {
  163.                 for(k=0;k<100;k++)
  164.                 {
  165.                         Ret=*p;                                                        
  166.                         BSR_SDModel[k]=Ret;                                        //裝載語(yǔ)音模型                        
  167.                         p+=1;                                                                                                        
  168.                 }                                       
  169.                 g_Ret=BSR_ImportSDWord();                                
  170.                 while(g_Ret!=0)                                                        //模型裝載成功?
  171.                 g_Ret=BSR_ImportSDWord();                                                               
  172.         }
  173. }

  174. //=============================================================
  175. // 語(yǔ)法格式:        void GoAhead();
  176. // 實(shí)現(xiàn)功能:        前進(jìn)子函數(shù)
  177. // 參數(shù):                無(wú)
  178. // 返回值:                無(wú)
  179. //=============================================================
  180. void GoAhead()                                                     //前進(jìn)
  181. {  
  182.         PlaySnd(S_ACT1,3);                                                        //提示
  183.         *P_IOB_Data=0x1400;                                                        //前進(jìn)
  184.         *P_INT_Mask |= 0x0004;                                                //以下為中斷定時(shí)操作
  185.         __asm("int fiq,irq");
  186.         uiTimecont = 0;
  187. }
  188. //=============================================================
  189. // 語(yǔ)法格式:        void BackUp();
  190. // 實(shí)現(xiàn)功能:        后退子函數(shù)
  191. // 參數(shù):                無(wú)
  192. // 返回值:                無(wú)
  193. //=============================================================
  194. void BackUp()                                                //倒退
  195. {        
  196.         PlaySnd(S_DCZY,3);                                                        //提示
  197.         *P_IOB_Data=0x2800;                                                        //倒退
  198.         *P_INT_Mask |= 0x0004;                                                //以下為中斷定時(shí)操作
  199.         __asm("int fiq,irq");
  200.         uiTimecont = 0;
  201. }

  202. //=============================================================
  203. // 語(yǔ)法格式:        void TurnLeft();
  204. // 實(shí)現(xiàn)功能:        左轉(zhuǎn)子函數(shù)
  205. // 參數(shù):                無(wú)
  206. // 返回值:                無(wú)
  207. //=============================================================
  208. void TurnRight()                                           //右轉(zhuǎn)
  209. {
  210.         PlaySnd(S_GJG,3);        
  211.         *P_IOB_Data=0x1800;                                                        //右轉(zhuǎn)
  212.         Delay();                                                                        //延時(shí)
  213.         *P_IOB_Data=0x2400;                                                        //左轉(zhuǎn)
  214.         *P_INT_Mask |= 0x0004;                                                //以下為中斷定時(shí)操作
  215.         __asm("int fiq,irq");
  216.         uiTimecont = 0;
  217. }
  218. //=============================================================
  219. // 語(yǔ)法格式:        void TurnRight();
  220. // 實(shí)現(xiàn)功能:        右轉(zhuǎn)子函數(shù)
  221. // 參數(shù):                無(wú)
  222. // 返回值:                無(wú)
  223. //=============================================================
  224. void TurnLeft()                                               //左轉(zhuǎn)
  225. {
  226.         PlaySnd(S_GJG,3);                                                        //語(yǔ)音提示
  227.     *P_IOB_Data=0x2400;                                                        //左轉(zhuǎn)
  228.         Delay();                                                                        //延時(shí)
  229.         *P_IOB_Data=0x1800;                                                        //右轉(zhuǎn)        
  230.         *P_INT_Mask |= 0x0004;                                                //以下為中斷定時(shí)操作
  231.         __asm("int fiq,irq");
  232.         uiTimecont = 0;
  233. }

  234. //=============================================================
  235. // 語(yǔ)法格式:        void Stop();
  236. // 實(shí)現(xiàn)功能:        停車(chē)子函數(shù)
  237. // 參數(shù):                無(wú)
  238. // 返回值:                無(wú)
  239. //=============================================================
  240. void Stop()                                                   //停車(chē)
  241. {
  242.         *P_IOB_Data=0x0000;                                                        //停車(chē)
  243.         PlaySnd(S_RDY,3);                                                        //語(yǔ)音提示
  244. }

  245. //=============================================================
  246. // 語(yǔ)法格式:        void BSR(void);
  247. // 實(shí)現(xiàn)功能:        辨識(shí)子函數(shù)
  248. // 參數(shù):                無(wú)
  249. // 返回值:                無(wú)
  250. //=============================================================
  251. void BSR(void)
  252. {        
  253.         int Result;                                                                        //辨識(shí)結(jié)果寄存
  254.         Result = BSR_GetResult();                                        //獲得識(shí)別結(jié)果

  255.         if(Result>0)                                                                //有語(yǔ)音觸發(fā)?
  256.         {        
  257.                 *P_IOB_Data=0x0000;                                                //臨時(shí)停車(chē)
  258.                 switch(Result)
  259.                 {
  260.                 case NAME_ID:                                                        //識(shí)別出名稱(chēng)命令
  261.                         Stop();                                                                //停車(chē)待命
  262.                         break;
  263.                 case COMMAND_GO_ID:                                                //識(shí)別出第一條命令
  264.                         GoAhead();                                                        //執(zhí)行動(dòng)作一:直走
  265.                         break;
  266.                 case COMMAND_BACK_ID:                                        //識(shí)別出第二條命令
  267.                         BackUp();                                                        //執(zhí)行動(dòng)作二:倒車(chē)
  268.                         break;
  269.                 case COMMAND_LEFT_ID:                                        //識(shí)別出第三條命令
  270.                         TurnLeft();                                                        //執(zhí)行動(dòng)作三:左轉(zhuǎn)
  271.                         break;
  272.                 case COMMAND_RIGHT_ID:                                        //識(shí)別出第四條命令
  273.                         TurnRight();                                                //執(zhí)行動(dòng)作四:右轉(zhuǎn)
  274.                         break;
  275.                 default:
  276.                         break;
  277.                 }
  278.         }
  279. }
  280. //=============================================================
  281. // 語(yǔ)法格式:        void IRQ5(void);
  282. // 實(shí)現(xiàn)功能:        中斷服務(wù)子函數(shù)
  283. // 參數(shù):                無(wú)
  284. // 返回值:                無(wú)
  285. //=============================================================
  286. void IRQ5(void)__attribute__((ISR));                        //運(yùn)動(dòng)定時(shí)控制
  287. void IRQ5(void)
  288. {
  289.         if(uiTimecont++ == uiTimeset)
  290.         {
  291.                 *P_IOB_Data = 0x0000;
  292.         }
  293.         *P_INT_Clear = 0x0004;
  294. }

  295. //=============================================================
  296. // 語(yǔ)法格式:        int main(void);
  297. // 實(shí)現(xiàn)功能:        主函數(shù)
  298. // 參數(shù):                無(wú)
  299. // 返回值:                無(wú)
  300. //=============================================================
  301. int main(void)
  302. {        unsigned int BS_Flag;                                                //Train標(biāo)志位
  303.         
  304.         *P_IOA_Dir=0xff00;                                                        //初始化IOA,IOA0~7下拉輸入
  305.         *P_IOA_Attrib=0xff00;
  306.         *P_IOA_Data=0x0000;
  307.         
  308.         *P_IOB_Dir=0x0f00;                                                        //初始化IOB,IOB8~11同向輸出
  309.         *P_IOB_Attrib=0x0f00;
  310.         *P_IOB_Data=0x0000;
  311.         
  312.         BSR_DeleteSDGroup(0);                                                //初始化存儲(chǔ)器RAM
  313.         BS_Flag=*(unsigned int *)0xe000;                        //讀存儲(chǔ)單元0xe000
  314.         if(BS_Flag==0xffff)                                                        //沒(méi)有經(jīng)過(guò)訓(xùn)練(0xe000內(nèi)容為0xffff)
  315.         {
  316.                 TrainSD();                                                                //訓(xùn)練
  317.                 StoreSD();                                                                //存儲(chǔ)訓(xùn)練結(jié)果(語(yǔ)音模型)
  318.         }
  319.         else                                                                                 //經(jīng)過(guò)訓(xùn)練(0xe000內(nèi)容為0x0055)
  320.         {
  321.                 LoadSD();                                                                //語(yǔ)音模型載入識(shí)別器
  322.         }
  323.         
  324.         PlaySnd(S_START,3);                                                        //開(kāi)始識(shí)別提示
  325.         BSR_InitRecognizer(BSR_MIC);                                //初始化識(shí)別器
  326.         
  327.         while(1)
  328.         {        
  329.                 BSR();
  330.                 if((*P_IOA_Data)&0x0004)                                //是否重新訓(xùn)練
  331.                 {        
  332.                         F_FlashErase(0xe000);
  333.                         while(1);
  334.                 }
  335.         }
  336. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区四区视频 | 日本午夜在线视频 | 久久成人一区 | 性高朝久久久久久久3小时 av一区二区三区四区 | 夫妻午夜影院 | 日韩高清在线观看 | 亚洲视频一区 | 国产一二三区精品视频 | 国产黄色大片在线观看 | 91福利网址| 国内激情av片 | 久草新在线 | 91精品久久久久久久久久入口 | 精品中文字幕一区二区三区 | 国产精品久久久久久婷婷天堂 | 自拍偷拍av | 久草在线视频中文 | 黑人粗黑大躁护士 | 国产999精品久久久久久 | 国产精品福利在线观看 | 美女黄18岁以下禁止观看 | 一区二区三区四区不卡 | 一级欧美一级日韩片免费观看 | 欧美一区二区三区免费电影 | 97精品一区二区 | h视频免费在线观看 | 羞羞色影院 | 亚洲精品在线视频 | 欧美一级在线视频 | 色免费在线视频 | 国产精品一区二区av | 2018中文字幕第一页 | 久久大陆 | 国产精品第2页 | 午夜精品导航 | 亚洲国产高清高潮精品美女 | 无码国模国产在线观看 | 国产999精品久久久影片官网 | 欧美aⅴ在线观看 | 亚洲精品视频免费观看 | 国产日产欧产精品精品推荐蛮挑 |