找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的LD3320语音控制智能小车程序

  [复制链接]
跳转到指定楼层
楼主
ID:560735 发表于 2019-6-24 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于51单片机的语音控制智能小车,主控采用STC89C52,语音模块采用LD3320语音识别单元,KEIL4编程。

单片机源程序如下:
  1. **        CPU: STC11L08XE
  2. **        晶振:22.1184MHZ
  3. **        波特率:9600 bit/S

  4. **               
  5. **  说明:普通模式:直接发语音识别
  6. #include "config.h"
  7. /************************************************************************************/
  8. //        nAsrStatus 用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器
  9. //        LD_ASR_NONE:                表示没有在作ASR识别
  10. //        LD_ASR_RUNING:                表示LD3320正在作ASR识别中
  11. //        LD_ASR_FOUNDOK:                表示一次识别流程结束后,有一个识别结果
  12. //        LD_ASR_FOUNDZERO:        表示一次识别流程结束后,没有识别结果
  13. //        LD_ASR_ERROR:                表示一次识别流程中LD3320芯片内部出现不正确的状态
  14. /***********************************************************************************/
  15. uint8 idata nAsrStatus=0;        
  16. void MCU_init();
  17. void ProcessInt0(); //识别处理函数
  18. void  delay(unsigned long uldata);
  19. void         User_handle(uint8 dat);//用户执行操作函数
  20. void Delay200ms();
  21. void Led_test(void);//单片机工作指示
  22. uint8_t G0_flag=DISABLE;//运行标志,ENABLE:运行。DISABLE:禁止运行
  23. sbit LED=P4^2;//信号指示灯
  24. sbit qj=P1^0;//          前进端口控制
  25. sbit ht=P1^1;//           后退端口控制
  26. sbit zz=P1^2;//           左转端口控制
  27. sbit yz=P1^3;//           右转端口控制
  28. sbit tz=P1^4;//                停止端口控制

  29. /***********************************************************
  30. * 名    称: void  main(void)
  31. * 功    能: 主函数        程序入口
  32. * 入口参数:  
  33. * 出口参数:
  34. * 说    明:                                          
  35. * 调用方法:
  36. **********************************************************/
  37. void  main(void)
  38. {
  39.         uint8 idata nAsrRes;
  40.         uint8 i=0;
  41.         Led_test();
  42.         MCU_init();
  43.         LD_Reset();
  44.         UartIni(); /*串口初始化*/
  45.         nAsrStatus = LD_ASR_NONE;                //        初始状态:没有在作ASR
  46.         


  47.         while(1)
  48.         {
  49.                 switch(nAsrStatus)
  50.                 {
  51.                         case LD_ASR_RUNING:
  52.                         case LD_ASR_ERROR:               
  53.                                 break;
  54.                         case LD_ASR_NONE:
  55.                         {
  56.                                 nAsrStatus=LD_ASR_RUNING;
  57.                                 if (RunASR()==0)        /*        启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算*/
  58.                                 {
  59.                                         nAsrStatus = LD_ASR_ERROR;
  60.                                 }
  61.                                 break;
  62.                         }
  63.                         case LD_ASR_FOUNDOK: /*        一次ASR识别流程结束,去取ASR识别结果*/
  64.                         {                                
  65.                                 nAsrRes = LD_GetResult();                /*获取结果*/
  66.                                 User_handle(nAsrRes);//用户执行函数
  67.                                 nAsrStatus = LD_ASR_NONE;
  68.                                 break;
  69.                         }
  70.                         case LD_ASR_FOUNDZERO:
  71.                         default:
  72.                         {
  73.                                 nAsrStatus = LD_ASR_NONE;
  74.                                 break;
  75.                         }
  76.                 }// switch                                 
  77.         }// while

  78. }
  79. /***********************************************************
  80. * 名    称:          LED灯测试
  81. * 功    能: 单片机是否工作指示
  82. * 入口参数: 无
  83. * 出口参数:无
  84. * 说    明:                                          
  85. **********************************************************/
  86. void Led_test(void)
  87. {
  88.         LED=~ LED;
  89.         Delay200ms();
  90.         LED=~ LED;
  91.         Delay200ms();
  92.         LED=~ LED;
  93.         Delay200ms();
  94.         LED=~ LED;
  95.         Delay200ms();
  96.         LED=~ LED;
  97.         Delay200ms();
  98.         LED=~ LED;
  99. }
  100. /***********************************************************
  101. * 名    称: void MCU_init()
  102. * 功    能: 单片机初始化
  103. * 入口参数:  
  104. * 出口参数:
  105. * 说    明:                                          
  106. * 调用方法:
  107. **********************************************************/
  108. void MCU_init()
  109. {
  110.         P0 = 0xff;
  111.         P1 = 0xff;
  112.         P2 = 0xff;
  113.         P3 = 0xff;
  114.         P4 = 0xff;
  115.         LD_MODE = 0;                //        设置MD管脚为低,并行模式读写
  116.         IE0=1;
  117.         EX0=1;
  118.         EA=1;
  119. }
  120. /***********************************************************
  121. * 名    称:        延时函数
  122. * 功    能:
  123. * 入口参数:  
  124. * 出口参数:
  125. * 说    明:                                          
  126. * 调用方法:
  127. **********************************************************/
  128. void Delay200us()                //@22.1184MHz
  129. {
  130.         unsigned char i, j;
  131.         _nop_();
  132.         _nop_();
  133.         i = 5;
  134.         j = 73;
  135.         do
  136.         {
  137.                 while (--j);
  138.         } while (--i);
  139. }

  140. void  delay(unsigned long uldata)
  141. {
  142.         unsigned int j  =  0;
  143.         unsigned int g  =  0;
  144.         while(uldata--)
  145.         Delay200us();
  146. }

  147. void Delay200ms()                //@22.1184MHz
  148. {
  149.         unsigned char i, j, k;

  150.         i = 17;
  151.         j = 208;
  152.         k = 27;
  153.         do
  154.         {
  155.                 do
  156.                 {
  157.                         while (--k);
  158.                 } while (--j);
  159.         } while (--i);
  160. }
  161. /***********************************************************
  162. * 名    称: 中断处理函数
  163. * 功    能:
  164. * 入口参数:  
  165. * 出口参数:
  166. * 说    明:                                          
  167. * 调用方法:
  168. **********************************************************/
  169. void ExtInt0Handler(void) interrupt 0  
  170. {         
  171.         ProcessInt0();                                /*        LD3320 送出中断信号,包括ASR和播放MP3的中断,需要在中断处理函数中分别处理*/
  172. }
  173. /***********************************************************
  174. * 名    称:用户执行函数
  175. * 功    能:识别成功后,执行动作可在此进行修改
  176. * 入口参数: 无
  177. * 出口参数:无
  178. * 说    明:                                          
  179. **********************************************************/
  180. void         User_handle(uint8 dat)
  181. {
  182.      //UARTSendByte(dat);//串口识别码(十六进制)

  183.                          switch(dat)                   /*对结果执行相关操作,客户修改*/
  184.                           {
  185.                                   case CODE_QJ:                        /*命令“测试”*/
  186.                                   qj=0;         ht=1;zz=1; yz=1; tz=1;
  187.                                                 PrintCom("“前进”命令识别成功\r\n"); /*text.....*/
  188.                                                                                                          break;
  189.                                         case CODE_HT:         /*命令“全开”*/
  190.                                         ht=0;         qj=1;         zz=1; yz=1; tz=1;;
  191.                                                 PrintCom("“后退”命令识别成功\r\n"); /*text.....*/
  192.                                                                                                          break;
  193.                                         case CODE_ZZ:                /*命令“复位”*/                        
  194.                                         zz=0;        ht=1; yz=1; tz=1;         qj=1;
  195.                                                 PrintCom("“左转”命令识别成功\r\n"); /*text.....*/
  196.                                                                                                         break;
  197.                                         case CODE_YZ:                /*命令“复位”*/               
  198.                                         yz=0;        qj=1;         ht=1;zz=1;  tz=1;        
  199.                                                 PrintCom("“右转”命令识别成功\r\n"); /*text.....*/
  200.                                                                                                         break;
  201.                                         case CODE_TZ:                /*命令“复位”*/        
  202.                                         tz=0;        qj=1;         ht=1;zz=1; yz=1;               
  203.                                                 PrintCom("“停止”命令识别成功\r\n"); /*text.....*/
  204.                                                                                                         break;
  205.                         //        case CODE_SH:                /*命令“复位”*/                                
  206.                         //                        PrintCom("“上海”命令识别成功\r\n"); /*text.....*/
  207.                         //                                                                                break;
  208.                         //                case CODE_GZ:                /*命令“复位”*/                                
  209.                         //                        PrintCom("“广州”命令识别成功\r\n"); /*text.....*/
  210.                         //                                                                                break;                                                                                                                                                                                                                        
  211.                     //                                default:PrintCom("请重新识别发口令\r\n"); /*text.....*/break;
  212.                                 }        
  213. }         
复制代码

所有资料51hei提供下载:
语音控制功能.zip (176.86 KB, 下载次数: 192)
语音控制小车源程序x2.rar (164.76 KB, 下载次数: 153)


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

使用道具 举报

沙发
ID:1 发表于 2019-6-25 02:48 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:401857 发表于 2019-12-31 16:30 | 只看该作者
对我很有用啊,哇擦
回复

使用道具 举报

地板
ID:323589 发表于 2020-2-12 21:32 | 只看该作者
那么识别语言模块放到小车上 ,小车跑了  那还怎么识别呀
回复

使用道具 举报

5#
ID:656153 发表于 2020-2-21 14:07 | 只看该作者
这是STC89C52?也可以一起用吗?
回复

使用道具 举报

6#
ID:714909 发表于 2020-4-17 18:03 | 只看该作者
你好,我买的LD3320语音识别芯片是搭载STC11L08XE一起使用的,现在不知道怎么连接到小车上,小车上装的是STC89C52
回复

使用道具 举报

7#
ID:731033 发表于 2020-4-28 15:44 | 只看该作者
没有总程序,有个鸟用
回复

使用道具 举报

8#
ID:736550 发表于 2020-4-30 13:34 | 只看该作者
13525814699 发表于 2020-4-17 18:03
你好,我买的LD3320语音识别芯片是搭载STC11L08XE一起使用的,现在不知道怎么连接到小车上,小车上装的是ST ...

别人说是可以进行通信,就好像52驱动L298N。但是没试过,我也在做语音识别的设计 ,还在找更简单的识别模块,因为不想用已经封装好的(就是你买的那种),但是LD3320接口有点复杂。不知道怎么办
回复

使用道具 举报

9#
ID:829985 发表于 2020-11-9 21:03 | 只看该作者
哥只是传说857 发表于 2020-4-28 15:44
没有总程序,有个鸟用

语音程序和小车程序是分开的好吧
回复

使用道具 举报

10#
ID:910202 发表于 2021-5-12 16:02 | 只看该作者
你好,请问LD3320和C52是用串口相连的吗
回复

使用道具 举报

11#
ID:93341 发表于 2021-7-1 19:06 | 只看该作者
有用,语音智能控制。
回复

使用道具 举报

12#
ID:1032083 发表于 2022-6-5 09:49 | 只看该作者
我的单片机是STC89C52RC,语音控制芯片为SU-03T,电机驱动为L293D,不知能用不?
回复

使用道具 举报

13#
ID:1032083 发表于 2022-6-6 11:18 | 只看该作者
1直到世界尽头 发表于 2020-2-12 21:32
那么识别语言模块放到小车上 ,小车跑了  那还怎么识别呀

距离不能远,不然只能换种方式,通过APP语音来控制蓝牙小车
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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