单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LD3320语音识别与控制单片机源码参考文献及文档手册下载

[复制链接]
跳转到指定楼层
楼主


所有资料51hei提供下载:
LD3320参考文献及文档手册.zip (9.93 MB, 下载次数: 42)



其他共享配套参考程序\
官方开发板配套程序\
MSP430 源程序.zip
凌阳单片机部分程序.c
基于STM32 的 LD3320基本驱动程序.zip
官方开发板配套程序.zip
语音识别 AVR参考.zip
语音识别模块 STM32+SD卡+LD3320工程.zip


模块介绍、应用提高\
LD3320 语音识别芯片应用场景.pdf
可编辑语音识别芯片LD3320.pdf
语音识别芯片LD3320高阶秘籍.pdf


语音识别技术论文资料\
LD3320的嵌入式语音识别系统的应用.pdf
基于AVR单片机的语音识别系统设计.pdf
基于AVR和51单片机的机器鱼语音控制系统设计与实现.pdf
基于LD3320的语音控制系统设计实现.pdf
基于STM32的嵌入式语音识别模块设计.pdf
毕业论文.doc
玩具娃娃语音识别系统.pdf
车载自动语音识别系统设计.pdf



LD3320并行串行读写辅助说明.pdf
LD3320开发手册.pdf
LD3320数据手册.pdf


单片机源程序如下:
  1. /************************************************************************************/
  2. //        版权所有:Copyright (c) 2005 - 2010 ICRoute INC.
  3. /************************************************************************************/

  4. #include "STC10F08XE.H"
  5. #include "LDchip.h"
  6. #include "Reg_RW.h"
  7. #include "FlashDef.h"

  8. sbit LED1=P3^4;
  9. sbit LED2=P3^5;

  10. /************************************************************************************/
  11. //        nAsrStatus 用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器
  12. //        LD_ASR_NONE:                表示没有在作ASR识别
  13. //        LD_ASR_RUNING:                表示LD3320正在作ASR识别中
  14. //        LD_ASR_FOUNDOK:                表示一次识别流程结束后,有一个识别结果
  15. //        LD_ASR_FOUNDZERO:        表示一次识别流程结束后,没有识别结果
  16. //        LD_ASR_ERROR:                表示一次识别流程中LD3320芯片内部出现不正确的状态
  17. /***********************************************************************************/
  18. uint8 idata nAsrStatus=0;        


  19. /************************************************************************************/
  20. //        以下定义是在示范程序中,用来播放的声音数据的起始位置和长度
  21. //        这些声音是事先在PC机上录制好的MP3文件,在PC机上合成到一个文件 voice.dat中
  22. //        可以把这个voide.dat存储到用户系统中的存储芯片中,诸如 spi-flash中
  23. //        在需要播放时,用户的主控MCU可以到spi-flash中根据要播放文件的起始地址无读取MP3数据
  24. //        并送入LD3320进行播放
  25. /************************************************************************************/
  26. #define MP3_BEIJING_START        0x0000;
  27. #define MP3_BEIJING_SIZE        0x08b8;
  28. #define MP3_SHANGHAI_START        0x1000;
  29. #define MP3_SHANGHAI_SIZE        0x0ab0;
  30. #define MP3_TIANJIN_START        0x2000;
  31. #define MP3_TIANJIN_SIZE        0x0a20;
  32. #define MP3_CHONGQING_START        0x3000;
  33. #define MP3_CHONGQING_SIZE        0x0990;
  34. #define MP3_DING_START        0x4000;
  35. #define MP3_DING_SIZE        0x0828;
  36. #define MP3_NIHAO_START        0x5000;
  37. #define MP3_NIHAO_SIZE        0x1170;


  38. extern void          _nop_     (void);

  39. void MCU_init();
  40. void FlashLED(uint8 nTimes);
  41. void PlaySound(uint8 nCode);
  42. uint8 RunASR();
  43. void ProcessInt0();


  44. /************************************************************************************/
  45. //        这个示范程序是基于STC10L08XE编译的完整地,可以执行的程序
  46. //        事先了识别和播放的功能
  47. //        根据用户说出不同的关键词语,识别后播放对应的mp3声音
  48. //
  49. //        与LD3320芯片有关的函数功能,都在"开发手册.pdf"中有详细说明
  50. //        请开发者对照"开发手册.pdf“阅读
  51. //        
  52. //        开发者在学习LD3320开始时,可以直接把在这个main函数拷贝到自己单片机中编译运行
  53. //        如果只实现ASR语音识别功能,可以把程序中PlaySound()函数的调用注释掉就可以
  54. //        
  55. //        当然,用户要根据自己实际的单片机去修改 mcu_init ,以及对应的管脚连接的定义,中断定义
  56. /************************************************************************************/

  57. void  main()
  58. {
  59.         uint8 idata nAsrRes;

  60.         FlashLED(3);

  61.         MCU_init();
  62.         LD_reset();

  63.         nAsrStatus = LD_ASR_NONE;                //        初始状态:没有在作ASR
  64.         PlaySound(CODE_DEFAULT);                //        播放提示音
  65.         while(1)
  66.         {
  67.                 if (bMp3Play!=0)                        //        如果还在播放MP3中,则等待,直到MP3播放完毕 即bMp3Play==0
  68.                         continue;                                //        bMp3Play 是定义的一个全局变量用来记录MP3播放的状态,不是LD3320芯片内部的寄存器

  69.                 switch(nAsrStatus)
  70.                 {
  71.                         case LD_ASR_RUNING:
  72.                         case LD_ASR_ERROR:               
  73.                                 break;
  74.                         case LD_ASR_NONE:
  75.                         {
  76.                                 FlashLED(4);
  77.                                 nAsrStatus=LD_ASR_RUNING;
  78.                                 if (RunASR()==0)        //        启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算
  79.                                 {
  80.                                         nAsrStatus = LD_ASR_ERROR;
  81.                                         LED1=0;
  82.                                         LED2=0;
  83.                                 }
  84.                                 break;
  85.                         }
  86.                         case LD_ASR_FOUNDOK:
  87.                         {
  88.                                 FlashLED(2);
  89.                                 nAsrRes = LD_GetResult();        //        一次ASR识别流程结束,去取ASR识别结果
  90.                                 PlaySound(nAsrRes);
  91.                                 nAsrStatus = LD_ASR_NONE;
  92.                                 break;
  93.                         }
  94.                         case LD_ASR_FOUNDZERO:
  95.                         default:
  96.                         {
  97.                                 FlashLED(1);
  98.                                 PlaySound(CODE_DEFAULT);
  99.                                 nAsrStatus = LD_ASR_NONE;
  100.                                 break;
  101.                         }
  102.                 }// switch
  103.         }// while

  104. }

  105. void MCU_init()
  106. {
  107.         P1M0 |= 1;
  108.         P3M0 |= 8;

  109.         LED1=0;
  110.         LED2=0;
  111.         P0 = 0xff;
  112.         P1 = 0xff;
  113.         P2 = 0xff;
  114.         P3 = 0xf7;
  115.         P4 = 0x0f;

  116. #if defined (SOFT_SPI_PORT)                //        软件模拟SPI读写
  117.         LD_MODE = 1;                                //        设置MD管脚为高
  118. #elif defined (HARD_SPI_PORT)        //        硬件实现SPI读写
  119.         LD_MODE = 1;                                //        设置MD管脚为高
  120. #else                                                        //        并行读写 (硬件实现或者软件模拟)
  121.         LD_MODE = 0;                                //        设置MD管脚为低
  122. #endif


  123.         IP=0;
  124.         IPH=0;

  125.         PX0=1;
  126.         PT0=1;
  127.         PS=1;
  128.         IPH |= 1;        
  129.         
  130.         EX0=0;
  131.         EX1=0;
  132.         EA=1;
  133. }

  134. void  delay(unsigned long uldata)
  135. {
  136.         unsigned int j  =  0;
  137.         unsigned int g  =  0;
  138.         for (j=0;j<5;j++)
  139.         {
  140.                 for (g=0;g<uldata;g++)
  141.                 {
  142.                         _nop_();
  143.                         _nop_();
  144.                         _nop_();
  145.                 }
  146.         }
  147. }

  148. /*********************************************************************
  149. //为了消除编译时的 警告 *** WARNING L15: MULTIPLE CALL TO SEGMENT
  150. //把在中断函数中需要调用的函数重新复制并命名
  151. //消除警告 Warning L15,并且避免由于函数重入可能带来的隐藏Bug
  152. /*********************************************************************/
  153. void  delay_2(unsigned long uldata)
  154. {
  155.         unsigned int j  =  0;
  156.         unsigned int g  =  0;
  157.         for (j=0;j<5;j++)
  158.         {
  159.                 for (g=0;g<uldata;g++)
  160.                 {
  161.                         _nop_();
  162.                         _nop_();
  163.                         _nop_();
  164.                 }
  165.         }
  166. }

  167. void FlashLED(uint8 nTimes)
  168. {
  169.         uint8 k;
  170.         for (k=0; k<nTimes; k++)
  171.         {
  172.                 LED1=0;
  173.                 LED2=0;
  174.                 delay(15000);
  175.                 LED1=1;
  176.                 LED2=1;
  177.                 delay(15000);
  178.         }
  179. }

  180. void PlaySound(uint8 nCode)
  181. {
  182.         switch(nCode)
  183.         {
  184.         case CODE_BEIJING:
  185.                 nMp3StartPos = MP3_BEIJING_START;
  186.                 nMp3Size = MP3_BEIJING_SIZE;
  187.                 break;
  188.         case CODE_SHANGHAI:
  189.                 nMp3StartPos = MP3_SHANGHAI_START;
  190.                 nMp3Size = MP3_SHANGHAI_SIZE;
  191.                 break;
  192.         case CODE_TIANJIN:
  193.                 nMp3StartPos = MP3_TIANJIN_START;
  194.                 nMp3Size = MP3_TIANJIN_SIZE;
  195.                 break;
  196.         case CODE_CHONGQING:
  197.                 nMp3StartPos = MP3_CHONGQING_START;
  198.                 nMp3Size = MP3_CHONGQING_SIZE;
  199.                 break;
  200.         default:
  201.                 nMp3StartPos = MP3_NIHAO_START;
  202.                 nMp3Size = MP3_NIHAO_SIZE;
  203.                 break;               
  204.         }

  205.         LD_Init_MP3();
  206.         LD_AdjustMIX2SPVolume(15);
  207.         LD_play();
  208. }


  209. /************************************************************************************/
  210. //        IO_Send_Byte()是主控MCU向spi-flash (型号为华邦的 W25X40)发送指令
  211. //        开发者应该根据自己使用的存储芯片去写具体的函数
  212. //
  213. //        ICroute公司无法对存储芯片的读写提供技术支持,
  214. //        开发者需要自己向自己使用的存储芯片的厂商获得技术支持
  215. //        或者在网络上搜索相关代码和文档
  216. /************************************************************************************/

  217. void IO_Send_Byte(uint8 dataout)
  218. {
  219.          uint8 i = 0;
  220.          FLASH_CS = 0;
  221.          for (i=0; i<8; i++)
  222.          {
  223.                   if ((dataout & 0x80) == 0x80)
  224.                            FLASH_DIO = 1;
  225.                   else
  226.                            FLASH_DIO = 0;
  227.                   FLASH_CLK = 1;
  228.                   dataout = (dataout << 1);
  229.                   FLASH_CLK = 0;   
  230.          }
  231. }


  232. /************************************************************************************/
  233. //        RunASR()函数实现了一次完整的ASR语音识别流程
  234. //        LD_AsrStart() 函数实现了ASR初始化
  235. //        LD_AsrAddFixed() 函数实现了添加关键词语到LD3320芯片中
  236. //        LD_AsrRun()        函数启动了一次ASR语音识别流程
  237. //
  238. //        任何一次ASR识别流程,都需要按照这个顺序,从初始化开始进行
  239. /************************************************************************************/

  240. uint8 RunASR()
  241. {
  242.         uint8 i=0;
  243. ……………………

  244. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

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

使用道具 举报

沙发
腾飞的龙 发表于 2018-5-11 10:43 | 只看该作者
好资料谢谢分享!!
回复

使用道具 举报

板凳
丁丁东 发表于 2019-1-11 19:27 | 只看该作者
坐等到明早有黑币了,再进一步学习程序。
回复

使用道具 举报

地板
a2597162136 发表于 2019-1-12 11:14 | 只看该作者
可以,好东西,也收藏了
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机. 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

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