欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
YS-V0.7語音識(shí)別模塊的STC11L08XE單片機(jī)驅(qū)動(dòng)程序
[打印本頁]
作者:
henanda
時(shí)間:
2018-5-25 19:21
標(biāo)題:
YS-V0.7語音識(shí)別模塊的STC11L08XE單片機(jī)驅(qū)動(dòng)程序
單片機(jī)源程序如下:
/***************************飛音云電子****************************
** 工程名稱:YS-V0.7語音識(shí)別模塊驅(qū)動(dòng)程序
** CPU: STC11L08XE
** 晶振:22.1184MHZ
** 波特率:9600 bit/S
** 配套產(chǎn)品信息:YS-V0.7語音識(shí)別開發(fā)板
** 修改日期:2013.9.13
** 說明:口令模式: 即每次識(shí)別時(shí)都需要說“小杰”這個(gè)口令 ,才能夠進(jìn)行下一級(jí)的識(shí)別
/***************************飛音云電子******************************/
#include "config.h"
extern void delay(unsigned long uldata);
uint8 idata ucRegVal;
extern uint8 idata nAsrStatus;
void ProcessInt0(void);
/************************************************************************
功能描述: 復(fù)位LD模塊
入口參數(shù): none
返 回 值: none
其他說明: none
**************************************************************************/
void LD_Reset()
{
RSTB=1;
delay(5);
RSTB=0;
delay(5);
RSTB=1;
delay(5);
CSB=0;
delay(5);
CSB=1;
delay(5);
}
/************************************************************************
功能描述: LD模塊命令初始化
入口參數(shù): none
返 回 值: none
其他說明: 該函數(shù)為出廠配置,一般不需要修改;
有興趣的客戶可對(duì)照開發(fā)手冊(cè)根據(jù)需要自行修改。
**************************************************************************/
void LD_Init_Common()
{
LD_ReadReg(0x06);
LD_WriteReg(0x17, 0x35);
delay(10);
LD_ReadReg(0x06);
LD_WriteReg(0x89, 0x03);
delay(5);
LD_WriteReg(0xCF, 0x43);
delay(5);
LD_WriteReg(0xCB, 0x02);
/*PLL setting*/
LD_WriteReg(0x11, LD_PLL_11);
LD_WriteReg(0x1E,0x00);
LD_WriteReg(0x19, LD_PLL_ASR_19);
LD_WriteReg(0x1B, LD_PLL_ASR_1B);
LD_WriteReg(0x1D, LD_PLL_ASR_1D);
delay(10);
LD_WriteReg(0xCD, 0x04);
// LD_WriteReg(0x17, 0x4c);
delay(5);
LD_WriteReg(0xB9, 0x00);
LD_WriteReg(0xCF, 0x4F);
LD_WriteReg(0x6F, 0xFF);
}
/************************************************************************
功能描述: LD模塊 ASR功能初始化
入口參數(shù): none
返 回 值: none
其他說明: 該函數(shù)為出廠配置,一般不需要修改;
有興趣的客戶可對(duì)照開發(fā)手冊(cè)根據(jù)需要自行修改。
**************************************************************************/
void LD_Init_ASR()
{
LD_Init_Common();
LD_WriteReg(0xBD, 0x00);
LD_WriteReg(0x17, 0x48);
delay( 10 );
LD_WriteReg(0x3C, 0x80);
LD_WriteReg(0x3E, 0x07);
LD_WriteReg(0x38, 0xff);
LD_WriteReg(0x3A, 0x07);
LD_WriteReg(0x40, 0);
LD_WriteReg(0x42, 8);
LD_WriteReg(0x44, 0);
LD_WriteReg(0x46, 8);
delay( 1 );
}
/************************************************************************
功能描述: 中斷處理函數(shù)
入口參數(shù): none
返 回 值: none
其他說明: 當(dāng)LD模塊接收到音頻信號(hào)時(shí),將進(jìn)入該函數(shù),
判斷識(shí)別是否有結(jié)果,如果沒有從新配置寄
存器準(zhǔn)備下一次的識(shí)別。
**************************************************************************/
void ProcessInt0(void)
{
uint8 nAsrResCount=0;
EX0=0;
ucRegVal = LD_ReadReg(0x2B);
LD_WriteReg(0x29,0) ;
LD_WriteReg(0x02,0) ;
if((ucRegVal & 0x10) &&
LD_ReadReg(0xb2)==0x21 &&
LD_ReadReg(0xbf)==0x35) /*識(shí)別成功*/
{
nAsrResCount = LD_ReadReg(0xba);
if(nAsrResCount>0 && nAsrResCount<=4)
{
nAsrStatus=LD_ASR_FOUNDOK;
}
else
{
nAsrStatus=LD_ASR_FOUNDZERO;
}
} /*沒有識(shí)別結(jié)果*/
else
{
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;
}
/************************************************************************
功能描述: 運(yùn)行ASR識(shí)別流程
入口參數(shù): none
返 回 值: asrflag:1->啟動(dòng)成功, 0—>啟動(dòng)失敗
其他說明: 識(shí)別順序如下:
1、RunASR()函數(shù)實(shí)現(xiàn)了一次完整的ASR語音識(shí)別流程
2、LD_AsrStart() 函數(shù)實(shí)現(xiàn)了ASR初始化
3、LD_AsrAddFixed() 函數(shù)實(shí)現(xiàn)了添加關(guān)鍵詞語到LD3320芯片中
4、LD_AsrRun() 函數(shù)啟動(dòng)了一次ASR語音識(shí)別流程
任何一次ASR識(shí)別流程,都需要按照這個(gè)順序,從初始化開始
**************************************************************************/
uint8 RunASR(void)
{
uint8 i=0;
uint8 asrflag=0;
for (i=0; i<5; i++) // 防止由于硬件原因?qū)е翷D3320芯片工作不正常,所以一共嘗試5次啟動(dòng)ASR識(shí)別流程
{
LD_AsrStart();
delay(50);
if (LD_AsrAddFixed()==0)
{
LD_Reset(); // LD3320芯片內(nèi)部出現(xiàn)不正常,立即重啟LD3320芯片
delay(50); // 并從初始化開始重新ASR識(shí)別流程
continue;
}
delay(10);
if (LD_AsrRun() == 0)
{
LD_Reset(); // LD3320芯片內(nèi)部出現(xiàn)不正常,立即重啟LD3320芯片
delay(50); // 并從初始化開始重新ASR識(shí)別流程
continue;
}
asrflag=1;
break; // ASR流程啟動(dòng)成功,退出當(dāng)前for循環(huán)。開始等待LD3320送出的中斷信號(hào)
}
return asrflag;
}
/************************************************************************
功能描述: 檢測(cè)LD模塊是否空閑
入口參數(shù): 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;
}
delay(10);
}
return flag;
}
/************************************************************************
功能描述: 啟動(dòng)ASR
入口參數(shù): none
返 回 值: none
其他說明: none
**************************************************************************/
void LD_AsrStart()
{
LD_Init_ASR();
}
/************************************************************************
功能描述: 運(yùn)行ASR
入口參數(shù): none
返 回 值: 1:啟動(dòng)成功
其他說明: none
**************************************************************************/
uint8 LD_AsrRun()
{
EX0=0;
LD_WriteReg(0x35, MIC_VOL);
LD_WriteReg(0x1C, 0x09);
LD_WriteReg(0xBD, 0x20);
LD_WriteReg(0x08, 0x01);
delay( 1 );
LD_WriteReg(0x08, 0x00);
delay( 1 );
if(LD_Check_ASRBusyFlag_b2() == 0)
{
return 0;
}
// LD_WriteReg(0xB6, 0xa); //識(shí)別時(shí)間 1S
// LD_WriteReg(0xB5, 0x1E); //背景音段時(shí)間 300ms
// LD_WriteReg(0xB8, 10); //結(jié)束時(shí)間
// LD_WriteReg(0x1C, 0x07); //配置雙通道音頻信號(hào)做為輸入信號(hào)
LD_WriteReg(0x1C, 0x0b); //配置麥克風(fēng)做為輸入信號(hào)
LD_WriteReg(0xB2, 0xff);
delay( 1);
LD_WriteReg(0x37, 0x06);
delay( 1 );
LD_WriteReg(0x37, 0x06);
delay( 5 );
LD_WriteReg(0x29, 0x10);
LD_WriteReg(0xBD, 0x00);
EX0=1;
return 1;
}
/************************************************************************
功能描述: 向LD模塊添加關(guān)鍵詞
入口參數(shù): none
返 回 值: flag:1->添加成功
其他說明: 用戶修改.
1、根據(jù)如下格式添加拼音關(guān)鍵詞,同時(shí)注意修改sRecog 和pCode 數(shù)組的長度
和對(duì)應(yīng)變了k的循環(huán)置。拼音串和識(shí)別碼是一一對(duì)應(yīng)的。
2、開發(fā)者可以學(xué)習(xí)"語音識(shí)別芯片LD3320高階秘籍.pdf"中
關(guān)于垃圾詞語吸收錯(cuò)誤的用法,來提供識(shí)別效果。
3、”xiao jie “ 為口令,故在每次識(shí)別時(shí),必須先發(fā)一級(jí)口令“小捷”
**************************************************************************/
uint8 LD_AsrAddFixed()
{
uint8 k, flag;
uint8 nAsrAddLength;
#define DATE_A 8 /*數(shù)組二維數(shù)值*/
#define DATE_B 20 /*數(shù)組一維數(shù)值*/
uint8 code sRecog[DATE_A][DATE_B] = {
"xiao jie",\
"kai fa ban yan zheng",\
"dai ma ce shi",\
"kai deng",\
"guan deng",\
"bei jing",\
"shang hai",\
"guang zhou"
}; /*添加關(guān)鍵詞,用戶修改*/
uint8 code pCode[DATE_A] = {
CODE_CMD,\
CODE_KFBYZ,\
CODE_DMCS,\
CODE_KD,\
CODE_GD,\
CODE_BJ,\
CODE_SH,\
CODE_GZ
}; /*添加識(shí)別碼,用戶修改*/
flag = 1;
for (k=0; k<DATE_A; 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<DATE_B; 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;
}
/************************************************************************
功能描述: 獲取識(shí)別結(jié)果
入口參數(shù): none
返 回 值: LD_ReadReg(0xc5 ); 讀取內(nèi)部寄存器返回識(shí)別碼。
其他說明: none
**************************************************************************/
uint8 LD_GetResult()
{
return LD_ReadReg(0xc5 );
}
復(fù)制代碼
作者:
T阿里巴巴
時(shí)間:
2018-10-9 17:07
可以,很好。
作者:
c2559985683
時(shí)間:
2019-5-16 16:45
沒有主函數(shù)的么?
作者:
QWERGFS
時(shí)間:
2019-5-18 12:35
功能很全面!
作者:
a生生
時(shí)間:
2020-5-2 12:19
很好的分享
作者:
ZIMOXIXUAN
時(shí)間:
2020-6-6 16:53
這個(gè)很nice
作者:
1715605760
時(shí)間:
2020-9-16 17:24
請(qǐng)問樓主有這個(gè)語音模塊的開發(fā)手冊(cè)嗎?
作者:
youyouxhz
時(shí)間:
2020-9-17 09:13
寫的挺好!
作者:
玩卟欺
時(shí)間:
2021-2-13 17:54
請(qǐng)問樓主有YS-V0.7語音識(shí)別模塊的文檔資料嗎
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1