LD3320操作程序.docx
《LD3320操作程序.docx》由会员分享,可在线阅读,更多相关《LD3320操作程序.docx(9页珍藏版)》请在冰点文库上搜索。
LD3320操作程序
/************************************************************************************/
#include""
sbitLED1=P3^4;
sbitLED2=P3^5;
df"中有详细说明
df“阅读
//
//开发者在学习LD3320开始时,可以直接把在这个main函数拷贝到自己单片机中编译运行
//如果只实现ASR语音识别功能,可以把程序中PlaySound()函数的调用注释掉就可以
//当然,用户要根据自己实际的单片机去修改mcu_init,以及对应的管脚连接的定义,中断定义
voidmain()
{
uint8idatanAsrRes;
FlashLED(3);
MCU_init();
LD_reset();
nAsrStatus=LD_ASR_NONE;//初始状态:
没有在作ASR
PlaySound(CODE_DEFAULT);//播放提示音
while
(1)
if(bMp3Play!
=0)//如果还在播放MP3中,则等待,直到MP3播放完毕即bMp3Play==0
continue;//bMp3Play是定义的一个全局变量用来记录MP3播放的状态,不是LD3320芯片内部的寄存器
switch(nAsrStatus)
caseLD_ASR_RUNING:
caseLD_ASR_ERROR:
break;
caseLD_ASR_NONE:
FlashLED(4);
nAsrStatus=LD_ASR_RUNING;
if(RunASR()==0)//启动一次ASR识别流程:
ASR初始化,ASR添加关键词语,启动ASR运算
nAsrStatus=LD_ASR_ERROR;
LED1=0;
LED2=0;
}
caseLD_ASR_FOUNDOK:
FlashLED
(2);
nAsrRes=LD_GetResult();//一次ASR识别流程结束,去取ASR识别结果
PlaySound(nAsrRes);
nAsrStatus=LD_ASR_NONE;
caseLD_ASR_FOUNDZERO:
default:
(1);
PlaySound(CODE_DEFAULT);
}//switch
}//while
voidMCU_init()
P1M0|=1;
P3M0|=8;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xf7;
P4=0x0f;
#ifdefined(SOFT_SPI_PORT)//软件模拟SPI读写
LD_MODE=1;//设置MD管脚为高
#elifdefined(HARD_SPI_PORT)//硬件实现SPI读写
#else//并行读写(硬件实现或者软件模拟)
LD_MODE=0;//设置MD管脚为低
#endif
IP=0;
IPH=0;
PX0=1;
PT0=1;
PS=1;
IPH|=1;
EX0=0;
EX1=0;
EA=1;
voiddelay(unsignedlonguldata)
unsignedintj=0;
unsignedintg=0;
for(j=0;j<5;j++)
for(g=0;g{_nop_();_nop_();_nop_();}}}voidFlashLED(uint8nTimes){uint8k;for(k=0;k{LED1=0;LED2=0;delay(15000);LED1=1;LED2=1;delay(15000);}}voidPlaySound(uint8nCode){switch(nCode){caseCODE_BEIJING:nMp3StartPos=MP3_BEIJING_START;nMp3Size=MP3_BEIJING_SIZE;break;caseCODE_SHANGHAI:nMp3StartPos=MP3_SHANGHAI_START;nMp3Size=MP3_SHANGHAI_SIZE;break;caseCODE_TIANJIN:nMp3StartPos=MP3_TIANJIN_START;nMp3Size=MP3_TIANJIN_SIZE;break;caseCODE_CHONGQING:nMp3StartPos=MP3_CHONGQING_START;nMp3Size=MP3_CHONGQING_SIZE;break;default:nMp3StartPos=MP3_NIHAO_START;nMp3Size=MP3_NIHAO_SIZE;break;}LD_Init_MP3();LD_AdjustMIX2SPVolume(15);LD_play();}/************************************************************************************///IO_Send_Byte()是主控MCU向spi-flash(型号为华邦的W25X40)发送指令//开发者应该根据自己使用的存储芯片去写具体的函数////ICroute公司无法对存储芯片的读写提供技术支持,//开发者需要自己向自己使用的存储芯片的厂商获得技术支持//或者在网络上搜索相关代码和文档////华邦的spi-flash的技术支持的文档页面在://&dname=23T0M41&xpos=84/************************************************************************************/voidIO_Send_Byte(uint8dataout){uint8i=0;FLASH_CS=0;for(i=0;i<8;i++){if((dataout&0x80)==0x80)FLASH_DIO=1;elseFLASH_DIO=0;FLASH_CLK=1;dataout=(dataout<<1);FLASH_CLK=0;}}/************************************************************************************///RunASR()函数实现了一次完整的ASR语音识别流程//LD_AsrStart()函数实现了ASR初始化//LD_AsrAddFixed()函数实现了添加关键词语到LD3320芯片中//LD_AsrRun()函数启动了一次ASR语音识别流程////任何一次ASR识别流程,都需要按照这个顺序,从初始化开始进行/************************************************************************************/uint8RunASR(){uint8i=0;uint8asrflag=0;for(i=0;i<5;i++)//防止由于硬件原因导致LD3320芯片工作不正常,所以一共尝试5次启动ASR识别流程{LD_AsrStart();delay(100);if(LD_AsrAddFixed()==0){LD_reset();//LD3320芯片内部出现不正常,立即重启LD3320芯片delay(100);//并从初始化开始重新ASR识别流程continue;}delay(10);if(LD_AsrRun()==0){LD_reset();//LD3320芯片内部出现不正常,立即重启LD3320芯片delay(100);//并从初始化开始重新ASR识别流程continue;}asrflag=1;break;//ASR流程启动成功,退出当前for循环。开始等待LD3320送出的中断信号}returnasrflag;}voidExtInt0Handler(void)interrupt0{ProcessInt0();//LD3320送出中断信号,包括ASR和播放MP3的中断,需要在中断处理函数中分别处理}
_nop_();
voidFlashLED(uint8nTimes)
uint8k;
for(k=0;k{LED1=0;LED2=0;delay(15000);LED1=1;LED2=1;delay(15000);}}voidPlaySound(uint8nCode){switch(nCode){caseCODE_BEIJING:nMp3StartPos=MP3_BEIJING_START;nMp3Size=MP3_BEIJING_SIZE;break;caseCODE_SHANGHAI:nMp3StartPos=MP3_SHANGHAI_START;nMp3Size=MP3_SHANGHAI_SIZE;break;caseCODE_TIANJIN:nMp3StartPos=MP3_TIANJIN_START;nMp3Size=MP3_TIANJIN_SIZE;break;caseCODE_CHONGQING:nMp3StartPos=MP3_CHONGQING_START;nMp3Size=MP3_CHONGQING_SIZE;break;default:nMp3StartPos=MP3_NIHAO_START;nMp3Size=MP3_NIHAO_SIZE;break;}LD_Init_MP3();LD_AdjustMIX2SPVolume(15);LD_play();}/************************************************************************************///IO_Send_Byte()是主控MCU向spi-flash(型号为华邦的W25X40)发送指令//开发者应该根据自己使用的存储芯片去写具体的函数////ICroute公司无法对存储芯片的读写提供技术支持,//开发者需要自己向自己使用的存储芯片的厂商获得技术支持//或者在网络上搜索相关代码和文档////华邦的spi-flash的技术支持的文档页面在://&dname=23T0M41&xpos=84/************************************************************************************/voidIO_Send_Byte(uint8dataout){uint8i=0;FLASH_CS=0;for(i=0;i<8;i++){if((dataout&0x80)==0x80)FLASH_DIO=1;elseFLASH_DIO=0;FLASH_CLK=1;dataout=(dataout<<1);FLASH_CLK=0;}}/************************************************************************************///RunASR()函数实现了一次完整的ASR语音识别流程//LD_AsrStart()函数实现了ASR初始化//LD_AsrAddFixed()函数实现了添加关键词语到LD3320芯片中//LD_AsrRun()函数启动了一次ASR语音识别流程////任何一次ASR识别流程,都需要按照这个顺序,从初始化开始进行/************************************************************************************/uint8RunASR(){uint8i=0;uint8asrflag=0;for(i=0;i<5;i++)//防止由于硬件原因导致LD3320芯片工作不正常,所以一共尝试5次启动ASR识别流程{LD_AsrStart();delay(100);if(LD_AsrAddFixed()==0){LD_reset();//LD3320芯片内部出现不正常,立即重启LD3320芯片delay(100);//并从初始化开始重新ASR识别流程continue;}delay(10);if(LD_AsrRun()==0){LD_reset();//LD3320芯片内部出现不正常,立即重启LD3320芯片delay(100);//并从初始化开始重新ASR识别流程continue;}asrflag=1;break;//ASR流程启动成功,退出当前for循环。开始等待LD3320送出的中断信号}returnasrflag;}voidExtInt0Handler(void)interrupt0{ProcessInt0();//LD3320送出中断信号,包括ASR和播放MP3的中断,需要在中断处理函数中分别处理}
delay(15000);
LED1=1;
LED2=1;
voidPlaySound(uint8nCode)
switch(nCode)
caseCODE_BEIJING:
nMp3StartPos=MP3_BEIJING_START;
nMp3Size=MP3_BEIJING_SIZE;
caseCODE_SHANGHAI:
nMp3StartPos=MP3_SHANGHAI_START;
nMp3Size=MP3_SHANGHAI_SIZE;
caseCODE_TIANJIN:
nMp3StartPos=MP3_TIANJIN_START;
nMp3Size=MP3_TIANJIN_SIZE;
caseCODE_CHONGQING:
nMp3StartPos=MP3_CHONGQING_START;
nMp3Size=MP3_CHONGQING_SIZE;
nMp3StartPos=MP3_NIHAO_START;
nMp3Size=MP3_NIHAO_SIZE;
LD_Init_MP3();
LD_AdjustMIX2SPVolume(15);
LD_play();
//IO_Send_Byte()是主控MCU向spi-flash(型号为华邦的W25X40)发送指令
//开发者应该根据自己使用的存储芯片去写具体的函数
//ICroute公司无法对存储芯片的读写提供技术支持,
//开发者需要自己向自己使用的存储芯片的厂商获得技术支持
//或者在网络上搜索相关代码和文档
//华邦的spi-flash的技术支持的文档页面在:
//&dname=23T0M41&xpos=84
voidIO_Send_Byte(uint8dataout)
uint8i=0;
FLASH_CS=0;
for(i=0;i<8;i++)
if((dataout&0x80)==0x80)
FLASH_DIO=1;
else
FLASH_DIO=0;
FLASH_CLK=1;
dataout=(dataout<<1);
FLASH_CLK=0;
//RunASR()函数实现了一次完整的ASR语音识别流程
//LD_AsrStart()函数实现了ASR初始化
//LD_AsrAddFixed()函数实现了添加关键词语到LD3320芯片中
//LD_AsrRun()函数启动了一次ASR语音识别流程
//任何一次ASR识别流程,都需要按照这个顺序,从初始化开始进行
uint8RunASR()
uint8asrflag=0;
for(i=0;i<5;i++)//防止由于硬件原因导致LD3320芯片工作不正常,所以一共尝试5次启动ASR识别流程
LD_AsrStart();
delay(100);
if(LD_AsrAddFixed()==0)
LD_reset();//LD3320芯片内部出现不正常,立即重启LD3320芯片
delay(100);//并从初始化开始重新ASR识别流程
continue;
delay(10);
if(LD_AsrRun()==0)
asrflag=1;
break;//ASR流程启动成功,退出当前for循环。
开始等待LD3320送出的中断信号
returnasrflag;
voidExtInt0Handler(void)interrupt0
ProcessInt0();//LD3320送出中断信号,包括ASR和播放MP3的中断,需要在中断处理函数中分别处理
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2