(完整版)基于单片机的语音控制开关设计毕业设计 下载本文

}

LD_WriteReg(0x44, 0); LD_WriteReg(0x46, 8); delay( 1 );

/************************************************************************ 功能描述: 中断处理函数 入口参数:

none

返 回 值: none 其他说明:

当LD模块接收到音频信号时,将进入该函数,

判断识别是否有结果,如果没有从新配置寄

存器准备下一次的识别。

**************************************************************************/ void ProcessInt0(void) {

uint8 nAsrResCount=0; EX0=0;

ucRegVal = LD_ReadReg(0x2B); LD_WriteReg(0x29,0) ; LD_WriteReg(0x02,0) ; if((ucRegVal & 0x10) &&

{ { } else { }

LD_ReadReg(0xb2)==0x21 && LD_ReadReg(0xbf)==0x35)

nAsrResCount = LD_ReadReg(0xba); if(nAsrResCount>0 && nAsrResCount<=4) { } else

nAsrStatus=LD_ASR_FOUNDOK;

/*识别成功*/

}

nAsrStatus=LD_ASR_FOUNDZERO;

/*没有识别结果*/

nAsrStatus=LD_ASR_FOUNDZERO;

LD_WriteReg(0x2b, 0);

LD_WriteReg(0x1C,0);/*写0:ADC不可用*/

LD_WriteReg(0x29,0) ; LD_WriteReg(0x02,0) ;

}

LD_WriteReg(0x2B, 0); LD_WriteReg(0xBA, 0); LD_WriteReg(0xBC,0);

LD_WriteReg(0x08,1); /*清除FIFO_DATA*/

LD_WriteReg(0x08,0); /*清除FIFO_DATA后 再次写0*/ EX0=1;

/************************************************************************ 功能描述: 运行ASR识别流程 入口参数:

none

返 回 值: asrflag:1->启动成功, 0—>启动失败 其他说明: 程

2、LD_AsrStart() 函数实现了ASR初始化 3、LD_AsrAddFixed() 函数实现了添加关键词语到

识别顺序如下:

1、RunASR()函数实现了一次完整的ASR语音识别流

LD3320芯片中

任何一次ASR识别流程,都需要按照这个顺序,从4、LD_AsrRun()

函数启动了一次ASR语音识

别流程

初始化开始

**************************************************************************/

uint8 RunASR(void) { uint8 i=0; uint8 asrflag=0;

for (i=0; i<5; i++)

正常,所以一共尝试5次启动ASR识别流程 {LD_AsrStart(); delay(50);

if (LD_AsrAddFixed()==0) {

LD_Reset();

重启LD3320芯片 delay(50);

continue;

}

delay(10);

if (LD_AsrRun() == 0)

{LD_Reset();

LD3320芯片 delay(50);

continue;

}

asrflag=1;

//

防止由于硬件原因导致LD3320芯片工作不

//

LD3320芯片内部出现不正常,立即

//

并从初始化开始重新ASR识别流程

//

LD3320芯片内部出现不正常,立即重启

//

并从初始化开始重新ASR识别流程

break; // ASR流程启动成功,退出当前for

循环。开始等待LD3320送出的中断信号

}

return asrflag; }

/************************************************************************ 功能描述: 检测LD模块是否空闲 入口参数:

none

返 回 值: flag:1-> 空闲 其他说明:

none

**************************************************************************/ uint8 LD_Check_ASRBusyFlag_b2() {

uint8 j; uint8 flag = 0; for (j=0; j<10; j++) {

if (LD_ReadReg(0xb2) == 0x21) {

flag = 1; break;