找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8547|回复: 1
打印 上一主题 下一主题
收起左侧

ld3320语音识别芯片程序资料(口令模式+单片机IO口控制)

[复制链接]
跳转到指定楼层
楼主
1、本工程采用 KEIL4 版本建立

2、本工程为口令模式+IO口控制方式,每次识别都需要喊“小杰”然后才可以喊其他二级的口令,另外IO口的输出可以查看程序PAx的端口利用情况


单片机源程序如下:
  1. /***************************
  2. **  工程名称:YS-V0.7语音识别模块驱动程序
  3. **        CPU: STC11L08XE
  4. **        晶振:22.1184MHZ
  5. **        波特率:9600 bit/S
  6. **  说明:口令模式+IO控制: 即每次识别时都需要说“小杰”这个口令 ,才能够进行下一级的识别
  7. /***************************
  8. #include "config.h"
  9. /************************************************************************************/
  10. //        nAsrStatus 用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器
  11. //        LD_ASR_NONE:                表示没有在作ASR识别
  12. //        LD_ASR_RUNING:                表示LD3320正在作ASR识别中
  13. //        LD_ASR_FOUNDOK:                表示一次识别流程结束后,有一个识别结果
  14. //        LD_ASR_FOUNDZERO:        表示一次识别流程结束后,没有识别结果
  15. //        LD_ASR_ERROR:                表示一次识别流程中LD3320芯片内部出现不正确的状态
  16. /***********************************************************************************/
  17. uint8 idata nAsrStatus=0;       
  18. void MCU_init();
  19. void ProcessInt0(); //识别处理函数
  20. void  delay(unsigned long uldata);
  21. void         User_handle(uint8 dat);//用户执行操作函数
  22. void Led_test(void);//单片机工作指示
  23. void Delay200ms();
  24. uint8_t G0_flag=DISABLE;//运行标志,ENABLE:运行。DISABLE:禁止运行
  25. sbit LED=P4^2;//信号指示灯
  26. //应用IO口定义 (模块标注 P2)
  27. sbit PA1=P1^0; //对应板上标号 P1.0
  28. sbit PA2=P1^1;  //对应板上标号 P1.1
  29. sbit PA3=P1^2;  //.....
  30. sbit PA4=P1^3;  //.....
  31. sbit PA5=P1^4;  //.....
  32. sbit PA6=P1^5;  //.....
  33. sbit PA7=P1^6;  //对应板上标号 P1.6
  34. sbit PA8=P1^7;  //对应板上标号 P1.7


  35. /***********************************************************
  36. * 名    称: void  main(void)
  37. * 功    能: 主函数        程序入口
  38. * 入口参数:  
  39. * 出口参数:
  40. * 说    明:                                          
  41. * 调用方法:
  42. **********************************************************/
  43. void  main(void)
  44. {
  45.         uint8 idata nAsrRes;
  46.         uint8 i=0;
  47.         Led_test();
  48.         MCU_init();
  49.         LD_Reset();
  50.         UartIni(); /*串口初始化*/
  51.         nAsrStatus = LD_ASR_NONE;                //        初始状态:没有在作ASR
  52.        
  53.         #ifdef TEST       
  54.     PrintCom("一级口令:小杰\r\n"); /*text.....*/
  55.         PrintCom("二级口令:1、代码测试\r\n"); /*text.....*/
  56.         PrintCom("        2、开发板验证\r\n"); /*text.....*/
  57.         PrintCom("        3、开灯\r\n"); /*text.....*/
  58.         PrintCom("        4、关灯\r\n"); /*text.....*/
  59.         PrintCom("  5、北京\r\n"); /*text.....*/
  60.         PrintCom("        6、上海\r\n"); /*text.....*/
  61.         PrintCom("        7、广州\r\n"); /*text.....*/
  62.         #endif

  63.         while(1)
  64.         {
  65.                 switch(nAsrStatus)
  66.                 {
  67.                         case LD_ASR_RUNING:
  68.                         case LD_ASR_ERROR:               
  69.                                 break;
  70.                         case LD_ASR_NONE:
  71.                         {
  72.                                 nAsrStatus=LD_ASR_RUNING;
  73.                                 if (RunASR()==0)        /*        启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算*/
  74.                                 {
  75.                                         nAsrStatus = LD_ASR_ERROR;
  76.                                 }
  77.                                 break;
  78.                         }
  79.                         case LD_ASR_FOUNDOK: /*        一次ASR识别流程结束,去取ASR识别结果*/
  80.                         {                               
  81.                                 nAsrRes = LD_GetResult();                /*获取结果*/
  82.                                 User_handle(nAsrRes);//用户执行函数
  83.                                 nAsrStatus = LD_ASR_NONE;
  84.                                 break;
  85.                         }
  86.                         case LD_ASR_FOUNDZERO:
  87.                         default:
  88.                         {
  89.                                 nAsrStatus = LD_ASR_NONE;
  90.                                 break;
  91.                         }
  92.                 }// switch                                
  93.         }// while

  94. }
  95. /***********************************************************
  96. * 名    称:          LED灯测试
  97. * 功    能: 单片机是否工作指示
  98. * 入口参数: 无
  99. * 出口参数:无
  100. * 说    明:                                          
  101. **********************************************************/
  102. void Led_test(void)
  103. {
  104.         LED=~ LED;
  105.         Delay200ms();
  106.         LED=~ LED;
  107.         Delay200ms();
  108.         LED=~ LED;
  109.         Delay200ms();
  110.         LED=~ LED;
  111.         Delay200ms();
  112.         LED=~ LED;
  113.         Delay200ms();
  114.         LED=~ LED;
  115. }
  116. /***********************************************************
  117. * 名    称: void MCU_init()
  118. * 功    能: 单片机初始化
  119. * 入口参数:  
  120. * 出口参数:
  121. * 说    明:                                          
  122. * 调用方法:
  123. **********************************************************/
  124. void MCU_init()
  125. {
  126.         P0 = 0xff;
  127.         P1 = 0x00;
  128.         P2 = 0xff;
  129.         P3 = 0xff;
  130.         P4 = 0xff;

  131.         P1M0=0XFF;        //P1端口设置为推挽输出功能,即提高IO口驱动能力,从驱动继电器模块工作
  132.         P1M1=0X00;

  133.         LD_MODE = 0;                //        设置MD管脚为低,并行模式读写
  134.         IE0=1;
  135.         EX0=1;
  136.         EA=1;
  137. }
  138. /***********************************************************
  139. * 名    称:        延时函数
  140. * 功    能:
  141. * 入口参数:  
  142. * 出口参数:
  143. * 说    明:                                          
  144. * 调用方法:
  145. **********************************************************/
  146. void Delay200us()                //@22.1184MHz
  147. {
  148.         unsigned char i, j;
  149.         _nop_();
  150.         _nop_();
  151.         i = 5;
  152.         j = 73;
  153.         do
  154.         {
  155.                 while (--j);
  156.         } while (--i);
  157. }

  158. void  delay(unsigned long uldata)
  159. {
  160.         unsigned int j  =  0;
  161.         unsigned int g  =  0;
  162.         while(uldata--)
  163.         Delay200us();
  164. }

  165. void Delay200ms()                //@22.1184MHz
  166. {
  167.         unsigned char i, j, k;

  168.         i = 17;
  169.         j = 208;
  170.         k = 27;
  171.         do
  172.         {
  173.                 do
  174.                 {
  175.                         while (--k);
  176.                 } while (--j);
  177.         } while (--i);
  178. }

  179. /***********************************************************
  180. * 名    称: 中断处理函数
  181. * 功    能:
  182. * 入口参数:  
  183. * 出口参数:
  184. * 说    明:                                          
  185. * 调用方法:
  186. **********************************************************/
  187. void ExtInt0Handler(void) interrupt 0  
  188. {        
  189.         ProcessInt0();                                /*        LD3320 送出中断信号,包括ASR和播放MP3的中断,需要在中断处理函数中分别处理*/
  190. }
  191. /***********************************************************
  192. * 名    称:用户执行函数
  193. * 功    能:识别成功后,执行动作可在此进行修改
  194. * 入口参数: 无
  195. * 出口参数:无
  196. * 说    明: 通过控制PAx端口的高低电平,从而控制外部继电器的通断                                         
  197. **********************************************************/
  198. void         User_handle(uint8 dat)
  199. {
  200.      //UARTSendByte(dat);//串口识别码(十六进制)
  201.                  if(0==dat)
  202.                  {
  203.                           G0_flag=ENABLE;
  204.                                 LED=0;
  205.                  }
  206.                  else if(ENABLE==G0_flag)
  207.                  {       
  208.                                  G0_flag=DISABLE;
  209.                                 LED=1;
  210.                          switch(dat)                   /*对结果执行相关操作,客户修改*/
  211.                           {
  212.                                   case CODE_DMCS:                        /*命令“测试”*/
  213.                                                 PrintCom("“代码测试”命令识别成功\r\n"); //串口输出提示信息(可删除)
  214.                                                 PA1=1;//让PA1端口为高电平
  215.                                                                                                          break;
  216.                                         case CODE_KFBYZ:         /*命令“全开”*/
  217.                                                 PrintCom("“开发板验证”命令识别成功\r\n");//串口输出提示信息(可删除)
  218.                                                 PA2=1;//让PA2端口为高电平
  219.                                                                                                          break;
  220.                                         case CODE_KD:                /*命令“复位”*/                               
  221.                                                 PrintCom("“开灯”命令识别成功\r\n"); //串口输出提示信息(可删除)
  222.                                                 PA3=1;//让PA3端口为高电平
  223.                                                                                                         break;
  224.                                         case CODE_GD:                /*命令“复位”*/                               
  225.                                                 PrintCom("“关灯”命令识别成功\r\n"); //串口输出提示信息(可删除)
  226.                                                 PA3=0;//让PA3端口为低电平
  227.                                                                                                         break;
  228.                                         case CODE_BJ:                /*命令“复位”*/                               
  229.                                                 PrintCom("“北京”命令识别成功\r\n"); //串口输出提示信息(可删除)
  230.                                                 PA4=1;//让PA4端口为高电平
  231.                                                                                                         break;
  232.                                         case CODE_SH:                /*命令“复位”*/                               
  233.                                                 PrintCom("“上海”命令识别成功\r\n"); //串口输出提示信息(可删除)
  234.                                                 PA5=1;//让PA5端口为高电平
  235.                                                                                                         break;
  236.                                         case CODE_GZ:                /*命令“复位”*/                               
  237.                                                 PrintCom("“广州”命令识别成功\r\n"); //串口输出提示信息(可删除)
  238.                                                 PA6=1;//让PA6端口为高电平
  239.                                                                                                         break;                                                                                                                                                                                                                       
  240.                                                         default:PrintCom("请重新识别发口令\r\n"); //串口输出提示信息(可删除)
  241.                                                                                                         break;
  242.                                 }       
  243.                         }       
  244.                         else        
  245.                         {
  246.                                 PrintCom("请说出一级口令\r\n"); //串口输出提示信息(可删除)       
  247.                         }
  248. }         
复制代码

所有资料51hei提供下载:
LDV7语音模块驱动程序.zip (627.33 KB, 下载次数: 70)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:359903 发表于 2019-4-22 16:37 | 只看该作者
这个控制步进电机哪里加入程序啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表