您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > LD3320操作程序
/************************************************************************************///版权所有:Copyright(c)2005-2010ICRouteINC./************************************************************************************/#includeSTC10F08XE.H#includeLDchip.h#includeReg_RW.h#includeFlashDef.hsbitLED1=P3^4;sbitLED2=P3^5;/************************************************************************************///nAsrStatus用来在main主程序中表示程序运行的状态,不是LD3320芯片内部的状态寄存器//LD_ASR_NONE:表示没有在作ASR识别//LD_ASR_RUNING:表示LD3320正在作ASR识别中//LD_ASR_FOUNDOK:表示一次识别流程结束后,有一个识别结果//LD_ASR_FOUNDZERO:表示一次识别流程结束后,没有识别结果//LD_ASR_ERROR:表示一次识别流程中LD3320芯片内部出现不正确的状态/***********************************************************************************/uint8idatanAsrStatus=0;/************************************************************************************///以下定义是在示范程序中,用来播放的声音数据的起始位置和长度//这些声音是事先在PC机上录制好的MP3文件,在PC机上合成到一个文件voice.dat中//可以把这个voide.dat存储到用户系统中的存储芯片中,诸如spi-flash中//在需要播放时,用户的主控MCU可以到spi-flash中根据要播放文件的起始地址无读取MP3数据//并送入LD3320进行播放/************************************************************************************/#defineMP3_BEIJING_START0x0000;#defineMP3_BEIJING_SIZE0x08b8;#defineMP3_SHANGHAI_START0x1000;#defineMP3_SHANGHAI_SIZE0x0ab0;#defineMP3_TIANJIN_START0x2000;#defineMP3_TIANJIN_SIZE0x0a20;#defineMP3_CHONGQING_START0x3000;#defineMP3_CHONGQING_SIZE0x0990;#defineMP3_DING_START0x4000;#defineMP3_DING_SIZE0x0828;#defineMP3_NIHAO_START0x5000;#defineMP3_NIHAO_SIZE0x1170;externvoid_nop_(void);voidMCU_init();voidFlashLED(uint8nTimes);voidPlaySound(uint8nCode);uint8RunASR();voidProcessInt0();/************************************************************************************///这个示范程序是基于STC10L08XE编译的完整地,可以执行的程序//事先了识别和播放的功能//根据用户说出不同的关键词语,识别后播放对应的mp3声音////与LD3320芯片有关的函数功能,都在开发手册.pdf中有详细说明//请开发者对照开发手册.pdf“阅读////开发者在学习LD3320开始时,可以直接把在这个main函数拷贝到自己单片机中编译运行//如果只实现ASR语音识别功能,可以把程序中PlaySound()函数的调用注释掉就可以////当然,用户要根据自己实际的单片机去修改mcu_init,以及对应的管脚连接的定义,中断定义/************************************************************************************/voidmain(){uint8idatanAsrRes;FlashLED(3);MCU_init();LD_reset();nAsrStatus=LD_ASR_NONE;//初始状态:没有在作ASRPlaySound(CODE_DEFAULT);//播放提示音while(1){if(bMp3Play!=0)//如果还在播放MP3中,则等待,直到MP3播放完毕即bMp3Play==0continue;//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;}break;}caseLD_ASR_FOUNDOK:{FlashLED(2);nAsrRes=LD_GetResult();//一次ASR识别流程结束,去取ASR识别结果PlaySound(nAsrRes);nAsrStatus=LD_ASR_NONE;break;}caseLD_ASR_FOUNDZERO:default:{FlashLED(1);PlaySound(CODE_DEFAULT);nAsrStatus=LD_ASR_NONE;break;}}//switch}//while}voidMCU_init(){P1M0|=1;P3M0|=8;LED1=0;LED2=0;P0=0xff;P1=0xff;P2=0xff;P3=0xf7;P4=0x0f;#ifdefined(SOFT_SPI_PORT)//软件模拟SPI读写LD_MODE=1;//设置MD管脚为高#elifdefined(HARD_SPI_PORT)//硬件实现SPI读写LD_MODE=1;//设置MD管脚为高#else//并行读写(硬件实现或者软件模拟)LD_MODE=0;//设置MD管脚为低#endifIP=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;j5;j++){for(g=0;guldata;g++){_nop_();_nop_();_nop_();}}}voidFlashLED(uint8nTimes){uint8k;for(k=0;knTimes;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的技术支持的文档页面在://://=915RL41&dname=23T0M41&xpos=84/************************************************************************************/voidIO_Send_Byte(uint8dataout){uint8i=0;FLASH_CS=0;for(i=0;i8;i++){if((dataout&0x80)==0x80)FLASH_DIO=1;elseFLASH_DIO=0;FLASH_CLK=1;dataout=(dataout1);FLASH_CLK=0;}}/************************************************************************************///RunASR()函数实现了一次完整的ASR语音识别流程//LD_AsrStart()函数实现了ASR初始化//LD_AsrAddFixed()函数实现了添加关键词语到LD3320芯片中//LD_AsrRun()函数启动了一次ASR语音识别流程////任何一次ASR识别流程,都需要按照这个顺序,从初始化开始进行/************************************************************************************/uint8RunASR(){uint8i=0;uint8asrflag=0;for(i=0;i5;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(
本文标题:LD3320操作程序
链接地址:https://www.777doc.com/doc-5394236 .html