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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7037|回復: 8
收起左側

YS-V0.7語音識別模塊的STC11L08XE單片機驅動程序

  [復制鏈接]
ID:63146 發表于 2018-5-25 19:21 | 顯示全部樓層 |閱讀模式
單片機源程序如下:
  1. /***************************飛音云電子****************************
  2. **  工程名稱:YS-V0.7語音識別模塊驅動程序
  3. **        CPU: STC11L08XE
  4. **        晶振:22.1184MHZ
  5. **        波特率:9600 bit/S
  6. **        配套產品信息:YS-V0.7語音識別開發板
  7. **  修改日期:2013.9.13
  8. **  說明:口令模式: 即每次識別時都需要說“小杰”這個口令 ,才能夠進行下一級的識別
  9. /***************************飛音云電子******************************/
  10. #include "config.h"

  11. extern void  delay(unsigned long uldata);

  12. uint8 idata ucRegVal;
  13. extern uint8 idata nAsrStatus;

  14. void ProcessInt0(void);

  15. /************************************************************************
  16. 功能描述:          復位LD模塊
  17. 入口參數:         none
  18. 返 回 值:          none
  19. 其他說明:         none
  20. **************************************************************************/
  21. void LD_Reset()
  22. {
  23.         RSTB=1;
  24.         delay(5);
  25.         RSTB=0;
  26.         delay(5);
  27.         RSTB=1;

  28.         delay(5);
  29.         CSB=0;
  30.         delay(5);
  31.         CSB=1;
  32.         delay(5);
  33. }
  34. /************************************************************************
  35. 功能描述: LD模塊命令初始化
  36. 入口參數: none
  37. 返 回 值: none
  38. 其他說明: 該函數為出廠配置,一般不需要修改;
  39.                                          有興趣的客戶可對照開發手冊根據需要自行修改。
  40. **************************************************************************/
  41. void LD_Init_Common()
  42. {
  43.         LD_ReadReg(0x06);  
  44.         LD_WriteReg(0x17, 0x35);
  45.         delay(10);
  46.         LD_ReadReg(0x06);  

  47.         LD_WriteReg(0x89, 0x03);  
  48.         delay(5);
  49.         LD_WriteReg(0xCF, 0x43);   
  50.         delay(5);
  51.         LD_WriteReg(0xCB, 0x02);
  52.         
  53.         /*PLL setting*/
  54.         LD_WriteReg(0x11, LD_PLL_11);      

  55.         LD_WriteReg(0x1E,0x00);
  56.         LD_WriteReg(0x19, LD_PLL_ASR_19);
  57.         LD_WriteReg(0x1B, LD_PLL_ASR_1B);               
  58.   LD_WriteReg(0x1D, LD_PLL_ASR_1D);
  59.         delay(10);
  60.         
  61.     LD_WriteReg(0xCD, 0x04);
  62. //        LD_WriteReg(0x17, 0x4c);
  63.         delay(5);
  64.         LD_WriteReg(0xB9, 0x00);
  65.         LD_WriteReg(0xCF, 0x4F);
  66.         LD_WriteReg(0x6F, 0xFF);
  67. }

  68. /************************************************************************
  69. 功能描述:          LD模塊 ASR功能初始化
  70. 入口參數:         none
  71. 返 回 值:          none
  72. 其他說明:         該函數為出廠配置,一般不需要修改;
  73.                                          有興趣的客戶可對照開發手冊根據需要自行修改。
  74. **************************************************************************/
  75. void LD_Init_ASR()
  76. {
  77.         LD_Init_Common();
  78.         LD_WriteReg(0xBD, 0x00);
  79.         LD_WriteReg(0x17, 0x48);
  80.         delay( 10 );
  81.         LD_WriteReg(0x3C, 0x80);   
  82.         LD_WriteReg(0x3E, 0x07);
  83.         LD_WriteReg(0x38, 0xff);   
  84.         LD_WriteReg(0x3A, 0x07);
  85.   LD_WriteReg(0x40, 0);         
  86.         LD_WriteReg(0x42, 8);
  87.         LD_WriteReg(0x44, 0);   
  88.         LD_WriteReg(0x46, 8);
  89.         delay( 1 );
  90. }

  91. /************************************************************************
  92. 功能描述:         中斷處理函數
  93. 入口參數:         none
  94. 返 回 值:          none
  95. 其他說明:        當LD模塊接收到音頻信號時,將進入該函數,
  96.                                                 判斷識別是否有結果,如果沒有從新配置寄
  97.             存器準備下一次的識別。
  98. **************************************************************************/
  99. void ProcessInt0(void)
  100. {
  101.         uint8 nAsrResCount=0;

  102.         EX0=0;
  103.         ucRegVal = LD_ReadReg(0x2B);
  104.         LD_WriteReg(0x29,0) ;
  105.         LD_WriteReg(0x02,0) ;
  106.         if((ucRegVal & 0x10) &&
  107.                 LD_ReadReg(0xb2)==0x21 &&
  108.                 LD_ReadReg(0xbf)==0x35)                        /*識別成功*/
  109.         {        
  110.                 nAsrResCount = LD_ReadReg(0xba);
  111.                 if(nAsrResCount>0 && nAsrResCount<=4)
  112.                 {
  113.                         nAsrStatus=LD_ASR_FOUNDOK;
  114.                 }
  115.                 else
  116.             {
  117.                         nAsrStatus=LD_ASR_FOUNDZERO;
  118.                 }        
  119.         }                                                                                                                         /*沒有識別結果*/
  120.         else
  121.         {         
  122.                 nAsrStatus=LD_ASR_FOUNDZERO;
  123.         }
  124.                
  125.   LD_WriteReg(0x2b, 0);
  126.   LD_WriteReg(0x1C,0);/*寫0:ADC不可用*/

  127.         LD_WriteReg(0x29,0) ;
  128.         LD_WriteReg(0x02,0) ;
  129.         LD_WriteReg(0x2B,  0);
  130.         LD_WriteReg(0xBA, 0);        
  131.         LD_WriteReg(0xBC,0);        
  132.         LD_WriteReg(0x08,1);         /*清除FIFO_DATA*/
  133.         LD_WriteReg(0x08,0);        /*清除FIFO_DATA后 再次寫0*/


  134.         EX0=1;
  135. }

  136. /************************************************************************
  137. 功能描述:         運行ASR識別流程
  138. 入口參數:        none
  139. 返 回 值:  asrflag:1->啟動成功, 0—>啟動失敗
  140. 其他說明:        識別順序如下:
  141.                                                 1、RunASR()函數實現了一次完整的ASR語音識別流程
  142.                                                 2、LD_AsrStart() 函數實現了ASR初始化
  143.                                                 3、LD_AsrAddFixed() 函數實現了添加關鍵詞語到LD3320芯片中
  144.                                                 4、LD_AsrRun()        函數啟動了一次ASR語音識別流程                                       
  145.                                                 任何一次ASR識別流程,都需要按照這個順序,從初始化開始
  146. **************************************************************************/
  147. uint8 RunASR(void)
  148. {
  149.         uint8 i=0;
  150.         uint8 asrflag=0;
  151.         for (i=0; i<5; i++)                        //        防止由于硬件原因導致LD3320芯片工作不正常,所以一共嘗試5次啟動ASR識別流程
  152.         {
  153.                 LD_AsrStart();
  154.                 delay(50);
  155.                 if (LD_AsrAddFixed()==0)
  156.                 {
  157.                         LD_Reset();                        //        LD3320芯片內部出現不正常,立即重啟LD3320芯片
  158.                         delay(50);                        //        并從初始化開始重新ASR識別流程
  159.                         continue;
  160.                 }
  161.                 delay(10);
  162.                 if (LD_AsrRun() == 0)
  163.                 {
  164.                         LD_Reset();                        //        LD3320芯片內部出現不正常,立即重啟LD3320芯片
  165.                         delay(50);                        //        并從初始化開始重新ASR識別流程
  166.                         continue;
  167.                 }
  168.                 asrflag=1;
  169.                 break;                                        //        ASR流程啟動成功,退出當前for循環。開始等待LD3320送出的中斷信號
  170.         }

  171.         return asrflag;
  172. }
  173. /************************************************************************
  174. 功能描述:  檢測LD模塊是否空閑
  175. 入口參數:        none
  176. 返 回 值:         flag:1-> 空閑
  177. 其他說明:        none
  178. **************************************************************************/
  179. uint8 LD_Check_ASRBusyFlag_b2()
  180. {
  181.         uint8 j;
  182.         uint8 flag = 0;
  183.         for (j=0; j<10; j++)
  184.         {
  185.                 if (LD_ReadReg(0xb2) == 0x21)
  186.                 {
  187.                         flag = 1;
  188.                         break;
  189.                 }
  190.                 delay(10);               
  191.         }
  192.         return flag;
  193. }
  194. /************************************************************************
  195. 功能描述:         啟動ASR
  196. 入口參數:        none
  197. 返 回 值:         none
  198. 其他說明:        none
  199. **************************************************************************/
  200. void LD_AsrStart()
  201. {
  202.         LD_Init_ASR();
  203. }
  204. /************************************************************************
  205. 功能描述:         運行ASR
  206. 入口參數:        none
  207. 返 回 值:         1:啟動成功
  208. 其他說明:        none
  209. **************************************************************************/
  210. uint8 LD_AsrRun()
  211. {
  212.         EX0=0;
  213.         LD_WriteReg(0x35, MIC_VOL);
  214.         LD_WriteReg(0x1C, 0x09);
  215.         LD_WriteReg(0xBD, 0x20);
  216.         LD_WriteReg(0x08, 0x01);
  217.         delay( 1 );
  218.         LD_WriteReg(0x08, 0x00);
  219.         delay( 1 );

  220.         if(LD_Check_ASRBusyFlag_b2() == 0)
  221.         {
  222.                 return 0;
  223.         }
  224. //        LD_WriteReg(0xB6, 0xa); //識別時間         1S
  225. //        LD_WriteReg(0xB5, 0x1E); //背景音段時間 300ms
  226. //        LD_WriteReg(0xB8, 10); //結束時間

  227. //        LD_WriteReg(0x1C, 0x07); //配置雙通道音頻信號做為輸入信號
  228.         LD_WriteReg(0x1C, 0x0b); //配置麥克風做為輸入信號


  229.         LD_WriteReg(0xB2, 0xff);
  230.         delay( 1);        
  231.         LD_WriteReg(0x37, 0x06);
  232.         delay( 1 );
  233.     LD_WriteReg(0x37, 0x06);
  234.                 delay( 5 );
  235.         LD_WriteReg(0x29, 0x10);
  236.         
  237.         LD_WriteReg(0xBD, 0x00);
  238.         EX0=1;
  239.         return 1;
  240. }
  241. /************************************************************************
  242. 功能描述: 向LD模塊添加關鍵詞
  243. 入口參數: none
  244. 返 回 值: flag:1->添加成功
  245. 其他說明: 用戶修改.
  246.                                          1、根據如下格式添加拼音關鍵詞,同時注意修改sRecog 和pCode 數組的長度
  247.                                          和對應變了k的循環置。拼音串和識別碼是一一對應的。
  248.                                          2、開發者可以學習"語音識別芯片LD3320高階秘籍.pdf"中
  249.            關于垃圾詞語吸收錯誤的用法,來提供識別效果。
  250.                                          3、”xiao jie “ 為口令,故在每次識別時,必須先發一級口令“小捷”
  251. **************************************************************************/
  252. uint8 LD_AsrAddFixed()
  253. {
  254.         uint8 k, flag;
  255.         uint8 nAsrAddLength;
  256.         #define DATE_A 8   /*數組二維數值*/
  257.         #define DATE_B 20                /*數組一維數值*/
  258.         uint8 code sRecog[DATE_A][DATE_B] = {
  259.                                                                                                                                                                 "xiao jie",\               
  260.                                                                                                                                                                 "kai fa ban yan zheng",\
  261.                                                                                                                                                                  "dai ma ce shi",\
  262.                                                                                                                                                                  "kai deng",\
  263.                                                                                                                                                                  "guan deng",\
  264.                                                                                                                                                                  "bei jing",\
  265.                                                                                                                                                                  "shang hai",\
  266.                                                                                                                                                                  "guang zhou"
  267.                                                                                                                                                         };        /*添加關鍵詞,用戶修改*/
  268.         uint8 code pCode[DATE_A] = {
  269.                                                                                                                         CODE_CMD,\
  270.                                                                                                                         CODE_KFBYZ,\
  271.                                                                                                                         CODE_DMCS,\
  272.                                                                                                                         CODE_KD,\
  273.                                                                                                                         CODE_GD,\
  274.                                                                                                                         CODE_BJ,\
  275.                                                                                                                         CODE_SH,\
  276.                                                                                                                         CODE_GZ
  277.                                                                                                                  };        /*添加識別碼,用戶修改*/        
  278.         flag = 1;
  279.         for (k=0; k<DATE_A; k++)
  280.         {
  281.                         
  282.                 if(LD_Check_ASRBusyFlag_b2() == 0)
  283.                 {
  284.                         flag = 0;
  285.                         break;
  286.                 }
  287.                
  288.                 LD_WriteReg(0xc1, pCode[k] );
  289.                 LD_WriteReg(0xc3, 0 );
  290.                 LD_WriteReg(0x08, 0x04);
  291.                 delay(1);
  292.                 LD_WriteReg(0x08, 0x00);
  293.                 delay(1);

  294.                 for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
  295.                 {
  296.                         if (sRecog[k][nAsrAddLength] == 0)
  297.                                 break;
  298.                         LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
  299.                 }
  300.                 LD_WriteReg(0xb9, nAsrAddLength);
  301.                 LD_WriteReg(0xb2, 0xff);
  302.                 LD_WriteReg(0x37, 0x04);
  303.         }
  304.     return flag;
  305. }
  306. /************************************************************************
  307. 功能描述:         獲取識別結果
  308. 入口參數:        none
  309. 返 回 值:         LD_ReadReg(0xc5 );  讀取內部寄存器返回識別碼。
  310. 其他說明:        none
  311. **************************************************************************/
  312. uint8 LD_GetResult()
  313. {               
  314.         return LD_ReadReg(0xc5 );
  315. }




復制代碼


評分

參與人數 2黑幣 +10 收起 理由
收藏傢 + 5 很給力!
569930571 + 5 很給力!

查看全部評分

回復

使用道具 舉報

ID:193104 發表于 2018-10-9 17:07 | 顯示全部樓層
可以,很好。
回復

使用道具 舉報

ID:420097 發表于 2019-5-16 16:45 | 顯示全部樓層
沒有主函數的么?
回復

使用道具 舉報

ID:538511 發表于 2019-5-18 12:35 | 顯示全部樓層
功能很全面!
回復

使用道具 舉報

ID:742468 發表于 2020-5-2 12:19 | 顯示全部樓層
很好的分享
回復

使用道具 舉報

ID:766917 發表于 2020-6-6 16:53 | 顯示全部樓層
這個很nice
回復

使用道具 舉報

ID:650169 發表于 2020-9-16 17:24 | 顯示全部樓層
請問樓主有這個語音模塊的開發手冊嗎?
回復

使用道具 舉報

ID:249957 發表于 2020-9-17 09:13 | 顯示全部樓層
寫的挺好!
回復

使用道具 舉報

ID:545457 發表于 2021-2-13 17:54 | 顯示全部樓層
請問樓主有YS-V0.7語音識別模塊的文檔資料嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品3 | 国产精品无码专区在线观看 | 在线国产一区 | 精品成人在线 | 成人片网址 | 精品熟人一区二区三区四区 | 亚洲欧洲一区二区 | 日韩精品久久久久 | 久草久草久草 | 中文字幕一区二区三区精彩视频 | 91欧美激情一区二区三区成人 | 欧美成人a∨高清免费观看 色999日韩 | 欧美激情99 | 成人av观看 | 日本久久精品视频 | 一区在线视频 | 国产精品欧美一区二区三区不卡 | 毛片视频观看 | 欧美激情va永久在线播放 | 免费天天干 | 亚洲国产精品久久久久秋霞不卡 | 自拍偷拍第一页 | 精品久久电影 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 精品视频一区二区三区 | 成人午夜黄色 | 免费啪啪 | 亚洲成人av在线播放 | 精品在线 | 国产精品一区在线观看 | 可以在线看的黄色网址 | 国产重口老太伦 | 日韩欧美在线播放 | 国产一二三视频在线观看 | 精品国产区 | 久久久久久久国产精品影院 | 国产精品日日做人人爱 | 日韩精品久久一区 | 日本精品一区二区三区视频 | 亚洲成人网在线 | 中文字幕国产精品视频 |