LD3320语音模块实现“小白开灯”则实现开灯指令
迪丽瓦拉
2025-05-31 01:57:41
0

首先需要先一一对应1

uint8 LD_AsrAddFixed()
{
    uint8 k, flag;
    uint8 nAsrAddLength;
    #define DATE_A 8   /*数组二维数值*/
    #define DATE_B 30        /*数组一维数值*/
    uint8 code sRecog[DATE_A][DATE_B] = {
                                                                                "xiao bai",\        
                                                                                "kai deng",\
                                                                                 "guan deng",\
                                                                                 "da kai ji dian qi",\
                                                                                 "guan bi ji dian qi",\
                                                                                 "kai deng",\
                                                                                 "guan deng",\
                                                                                 "wan an"
                                                                            };    /*添加关键词,用户修改*/
    uint8 code pCode[DATE_A] = {
                                                            CODE_CMD,\
                                                            CODE_DMCS,\
                                                            CODE_KFBYZ,\
                                                            CODE_KD,\
                                                            CODE_GD,\
                                                            CODE_BJ,\
                                                            CODE_SH,\
                                                            CODE_GZ
                                                         };    /*添加识别码,用户修改*/    
    flag = 1;
    for (k=0; k     {
            
        if(LD_Check_ASRBusyFlag_b2() == 0)
        {
            flag = 0;
            break;
        }
        
        LD_WriteReg(0xc1, pCode[k] );
        LD_WriteReg(0xc3, 0 );
        LD_WriteReg(0x08, 0x04);
        delay(1);
        LD_WriteReg(0x08, 0x00);
        delay(1);

        for (nAsrAddLength=0; nAsrAddLength         {
            if (sRecog[k][nAsrAddLength] == 0)
                break;
            LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
        }
        LD_WriteReg(0xb9, nAsrAddLength);
        LD_WriteReg(0xb2, 0xff);
        LD_WriteReg(0x37, 0x04);
    }
    return flag;
}

随后主函数要写

/******************************************************
**  工程名称:UNV-01语音识别模块驱动程序
**    CPU: STC11L08XE
**    晶振:22.1184MHZ
**    波特率:9600 bit/S
**    配套产品信息:UNV-LD3320+STC11语音识别开发板
**  修改日期:2018.5.13
**  说明:口令模式: 即每次识别时都需要说“小鹰”这个口令 ,才能够进行下一级的识别
***************************/
#include "config.h"
/************************************************************************************/
//    nAsrStatus 用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器
//    LD_ASR_NONE:        表示没有在作ASR识别
//    LD_ASR_RUNING:        表示LD3320正在作ASR识别中
//    LD_ASR_FOUNDOK:        表示一次识别流程结束后,有一个识别结果
//    LD_ASR_FOUNDZERO:    表示一次识别流程结束后,没有识别结果
//    LD_ASR_ERROR:        表示一次识别流程中LD3320芯片内部出现不正确的状态
/***********************************************************************************/
uint8 idata nAsrStatus=0;    
void MCU_init(); 
void ProcessInt0(); //识别处理函数
void delay(unsigned long uldata);
void User_handle(uint8 dat);//用户执行操作函数
void Delay200ms();
void Led_test(void);//单片机工作指示
uint8_t G0_flag=DISABLE;//运行标志,ENABLE:运行。DISABLE:禁止运行 
sbit LED=P4^2;//信号指示灯

/***********************************************************
* 名    称: void  main(void)
* 功    能: 主函数    程序入口
* 入口参数:  
* 出口参数:
* 说    明:                      
* 调用方法: 
**********************************************************/ 
void  main(void)
{
    uint8 idata nAsrRes;
    uint8 i=0;
    Led_test();
    MCU_init();
    LD_Reset();
    UartIni(); /*串口初始化*/
    nAsrStatus = LD_ASR_NONE;        //    初始状态:没有在作ASR
    


    while(1)
    {
        switch(nAsrStatus)
        {
            case LD_ASR_RUNING:
            case LD_ASR_ERROR:        
                break;
            case LD_ASR_NONE:
            {
                nAsrStatus=LD_ASR_RUNING;
                if (RunASR()==0)    /*    启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算*/
                {
                    nAsrStatus = LD_ASR_ERROR;
                }
                break;
            }
            case LD_ASR_FOUNDOK: /*    一次ASR识别流程结束,去取ASR识别结果*/
            {                
                nAsrRes = LD_GetResult();        /*获取结果*/
                User_handle(nAsrRes);//用户执行函数 
                nAsrStatus = LD_ASR_NONE;
                break;
            }
            case LD_ASR_FOUNDZERO:
            default:
            {
                nAsrStatus = LD_ASR_NONE;
                break;
            }
        }// switch                 
    }// while

}
/***********************************************************
* 名    称:      LED灯测试
* 功    能: 单片机是否工作指示
* 入口参数: 无 
* 出口参数:无
* 说    明:                      
**********************************************************/
void Led_test(void)
{
    LED=~ LED;
    Delay200ms();
    LED=~ LED;
    Delay200ms();
    LED=~ LED;
    Delay200ms();
    LED=~ LED;
}
/***********************************************************
* 名    称: void MCU_init()
* 功    能: 单片机初始化
* 入口参数:  
* 出口参数:
* 说    明:                      
* 调用方法: 
**********************************************************/ 
void MCU_init()
{
    P0 = 0xff;
    P1 = 0xff;
    P2 = 0xff;
    P3 = 0xff;
    P4 = 0xff;
    

    LD_MODE = 0;        //    设置MD管脚为低,并行模式读写
    IE0=1;
    EX0=1;
    EA=1;
}
/***********************************************************
* 名    称:    延时函数
* 功    能:
* 入口参数:  
* 出口参数:
* 说    明:                      
* 调用方法: 
**********************************************************/ 
void Delay200us()        //@22.1184MHz
{
    unsigned char i, j;
    _nop_();
    _nop_();
    i = 5;
    j = 73;
    do
    {
        while (--j);
    } while (--i);
}

void  delay(unsigned long uldata)
{
    unsigned int j  =  0;
    unsigned int g  =  0;
    while(uldata--)
    Delay200us();
}

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

    i = 17;
    j = 208;
    k = 27;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

/***********************************************************
* 名    称: 中断处理函数
* 功    能:
* 入口参数:  
* 出口参数:
* 说    明:                      
* 调用方法: 
**********************************************************/ 
void ExtInt0Handler(void) interrupt 0  
{     
    ProcessInt0();                
}
/***********************************************************
* 名    称:用户执行函数 
* 功    能:识别成功后,执行动作可在此进行修改 
* 入口参数: 无 
* 出口参数:无
* 说    明:                      
**********************************************************/
void     User_handle(uint8 dat)
{
     //UARTSendByte(dat);//串口识别码(十六进制)
         if(0==dat)
         {
          G0_flag=ENABLE;
            LED=0;
            PrintCom("收到\r\n"); /*text.....*/
         }
         else if(ENABLE==G0_flag)
         {    
                 G0_flag=DISABLE;
                LED=1;
             switch(dat)           /*对结果执行相关操作,客户可删除Printcom 串口输出语句替换为其他需要控制的代码*/
              {
                  case CODE_DMCS:            
                        PrintCom("00\r\n"); /*text.....*/
                                                     break;
                    case CODE_KFBYZ:    
                        PrintCom("01\r\n"); /*关灯*/
                                                     break;
                    case CODE_KD:                    
                            PrintCom("02\r\n"); /*text.....*/
                                                    break;
                    case CODE_GD:                    
                        PrintCom("03\r\n"); /*text.....*/
                                                    break;
                    case CODE_BJ:                        
                        PrintCom("“开灯”命令识别成功\r\n"); /*text.....*/
                                                    break;
                    case CODE_SH:                        
                        PrintCom("“关灯”命令识别成功\r\n"); /*text.....*/
                                                    break;
                    case CODE_GZ:                    
                        PrintCom("“晚安”命令识别成功\r\n"); /*text.....*/
                                                    break;                                                                                                            
                            default:PrintCom("请重新识别发口令\r\n"); /*text.....*/break;
                }    
            }    
            else     
            {
                PrintCom("请说出一级口令\r\n"); /*text.....*/    
            }
}     
 

这样当识别到开灯指令会串口输出01

然后编译

会出现这个文件

 随后在这个软件进行烧写

 将LD3320语音模块与USB转TTL连接

 

 然后烧录的时候按一下LD3320上面的复位按键,烧录成功!

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...