凌阳语音控制小车程序Word文档下载推荐.docx
- 文档编号:16512983
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:16
- 大小:18.55KB
凌阳语音控制小车程序Word文档下载推荐.docx
《凌阳语音控制小车程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《凌阳语音控制小车程序Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
#defineP_TimerA_Data(volatileunsignedint*)0x700A
#defineP_TimerA_Ctrl(volatileunsignedint*)0x700B
#defineP_TimerB_Data(volatileunsignedint*)0x700C
#defineP_TimerB_Ctrl(volatileunsignedint*)0x700D
#defineP_Watchdog_Clear(volatileunsignedint*)0x7012
#defineP_INT_Mask(volatileunsignedint*)0x702D
#defineP_INT_Clear(volatileunsignedint*)0x7011
#defineNAME_ID0x100
#defineCOMMAND_GO_ID0x101
#defineCOMMAND_BACK_ID0x102
#defineCOMMAND_LEFT_ID0x103
#defineCOMMAND_RIGHT_ID0x104
#defineS_NAME0//给我取个名字吧
#defineS_ACT11//前进
#defineS_ACT22//倒车,请注意
#defineS_ACT33//左拐
#defineS_ACT44//右拐
#defineS_RDY5//Yeah
#defineS_AGAIN6//请再说一遍
#defineS_NOVOICE7//没有听到任何声音
#defineS_CMDDIFF8//说什么暗语呀
#defineS_NOISY8//说什么暗语呀
#defineS_START9//准备就绪,开始辨识
#defineS_GJG10//拐就拐
#defineS_DCZY11//倒车,请注意
externunsignedintBSR_SDModel[100];
//外部变量BSR_SDModel[100],辨识器自带
externvoidF_FlashWrite1Word(unsignedintaddr,unsignedintValue);
externvoidF_FlashErase(unsignedintsector);
unsignedintuiTimeset=3;
//运行时间定时,调整该参数控制运行时间
unsignedintuiTimecont;
//运行时间计时
//=============================================================
//语法格式:
voidDelay();
//实现功能:
延时
//参数:
无
//返回值:
voidDelay()
{
unsignedinti;
for(i=0;
i<
0x3Fff;
i++)
{
*P_Watchdog_Clear=0x0001;
}
}
voidPlaySnd(unsignedSndIndex,unsignedDAC_Channel);
语音播放函数
SndIndex-播放语音资源索引号
//DAC_Channel-播放声道选择
voidPlaySnd(unsignedSndIndex,unsignedDAC_Channel)
BSR_StopRecognizer();
//停止识别器
SACM_S480_Initial
(1);
//初始化为自动播放
SACM_S480_Play(SndIndex,DAC_Channel,3);
//开始播放一段语音
while((SACM_S480_Status()&
0x0001)!
=0)//是否播放完毕?
SACM_S480_ServiceLoop();
//解码并填充队列
//清看门狗
SACM_S480_Stop();
//停止播放
BSR_InitRecognizer(BSR_MIC);
//初始化识别器
intTrainWord(intWordID,intSndID);
训练一条指令
WordID-指令编码
//SndID-指令提示音索引号
intTrainWord(unsignedintWordID,unsignedintSndID)
intResult;
PlaySnd(SndID,3);
//引导训练,播放指令对应动作
while
(1)
Result=BSR_Train(WordID,BSR_TRAIN_TWICE);
//训练两次,获得训练结果
if(Result==0)break;
switch(Result)
case-1:
//没有检测出声音
PlaySnd(S_NOVOICE,3);
return-1;
case-2:
//需要训练第二次
PlaySnd(S_AGAIN,3);
break;
case-3:
//环境太吵
PlaySnd(S_NOISY,3);
return-3;
case-4:
//数据库满
return-4;
case-5:
//检测出声音不同
PlaySnd(S_CMDDIFF,3);
return-5;
case-6:
//序号错误
return-6;
default:
return0;
voidTrainSD();
训练函数
voidTrainSD()
while(TrainWord(NAME_ID,S_NAME)!
=0);
//训练名称
while(TrainWord(COMMAND_GO_ID,S_ACT1)!
//训练第1个动作
while(TrainWord(COMMAND_BACK_ID,S_ACT2)!
//训练第2个动作
while(TrainWord(COMMAND_LEFT_ID,S_ACT3)!
//训练第3个动作
while(TrainWord(COMMAND_RIGHT_ID,S_ACT4)!
//训练第4个动作
voidStoreSD();
存储语音模型函数
voidStoreSD()
{unsignedintulAddr,i,commandID,g_Ret;
F_FlashWrite1Word(0xef00,0xaaaa);
F_FlashErase(0xe000);
F_FlashErase(0xe100);
F_FlashErase(0xe200);
ulAddr=0xe000;
//********
for(commandID=0x100;
commandID<
0x105;
commandID++)
g_Ret=BSR_ExportSDWord(commandID);
while(g_Ret!
=0)//模型导出成功?
100;
i++)//保存语音模型SD1(0xe000---0xe063)
F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);
ulAddr+=1;
装载语音模型函数
voidLoadSD()
{unsignedint*p,k,jk,Ret,g_Ret;
p=(int*)0xe000;
for(jk=0;
jk<
5;
jk++)
for(k=0;
k<
k++)
Ret=*p;
BSR_SDModel[k]=Ret;
//装载语音模型
p+=1;
}
g_Ret=BSR_ImportSDWord();
=0)//模型装载成功?
voidGoAhead();
前进子函数
voidGoAhead()//前进
{
PlaySnd(S_ACT1,3);
//提示
*P_IOB_Data=0x0100;
//前进
*P_INT_Mask|=0x0004;
//以下为中断定时操作
__asm("
intfiq,irq"
);
uiTimecont=0;
voidBackUp();
后退子函数
voidBackUp()//倒退
PlaySnd(S_DCZY,3);
*P_IOB_Data=0x0200;
//倒退
voidTurnLeft();
左转子函数
voidTurnLeft()//左转
PlaySnd(S_GJG,3);
*P_IOB_Data=0x0900;
//右转
Delay();
//延时
*P_IOB_Data=0x0500;
//左转
voidTurnRight();
右转子函数
voidTurnRight()//右转
//语音提示
voidStop();
停车子函数
voidStop()//停车
*P_IOB_Data=0x0000;
//停车
PlaySnd(S_RDY,3);
voidBSR(void);
辨识子函数
voidBSR(void)
//辨识结果寄存
Result=BSR_GetResult();
//获得识别结果
if(Result>
0)//有语音触发?
{
//临时停车
caseNAME_ID:
//识别出名称命令
Stop();
//停车待命
caseCOMMAND_GO_ID:
//识别出第一条命令
GoAhead();
//执行动作一:
直走
caseCOMMAND_BACK_ID:
//识别出第二条命令
BackUp();
//执行动作二:
倒车
caseCOMMAND_LEFT_ID:
//识别出第三条命令
TurnLeft();
//执行动作三:
左转
caseCOMMAND_RIGHT_ID:
//识别出第四条命令
TurnRight();
//执行动作四:
右转
voidIRQ5(void);
中断服务子函数
voidIRQ5(void)__attribute__((ISR));
//运动定时控制
voidIRQ5(void)
if(uiTimecont++==uiTimeset)
*P_IOB_Data=0x0000;
*P_INT_Clear=0x0004;
intmain(void);
主函数
intmain(void)
{unsignedintBS_Flag;
//Train标志位
*P_IOA_Dir=0xff00;
//初始化IOA,IOA0~7下拉输入
*P_IOA_Attrib=0xff00;
*P_IOA_Data=0x0000;
*P_IOB_Dir=0x0f00;
//初始化IOB,IOB8~11同向输出
*P_IOB_Attrib=0x0f00;
BSR_DeleteSDGroup(0);
//初始化存储器RAM
BS_Flag=*(unsignedint*)0xe000;
//读存储单元0xe000
if(BS_Flag==0xffff)//没有经过训练(0xe000内容为0xffff)
TrainSD();
//训练
StoreSD();
//存储训练结果(语音模型)
else//经过训练(0xe000内容为0x0055)
LoadSD();
//语音模型载入识别器
PlaySnd(S_START,3);
//开始识别提示
BSR();
if((*P_IOA_Data)&
0x0004)//是否重新训练
while
(1);
//============================================================
//文件名称:
flash.asm
//实现功能:
SPCE06132Kflash的读写
2003-6-9V1.0
.INCLUDEhardware.inc
.DEFINEC_FLASH_SIZE0x8000
.DEFINEC_FLASH_BLOCK_SIZE0x100
.DEFINEC_FLASH_MATCH0xAAAA
.DEFINEC_FLASH_PAGE_ERASE0x5511//擦除一页
.DEFINEC_FLASH_MASS_ERASE0x5522//
.DEFINEC_FLASH_1WORD_PGM0x5533//写一个字
.DEFINEC_FLASH_SEQUENT_PGM0x5544//写多个字
.DEFINEC_FLASH_MAIN_BLOCK0x5555
.DEFINEC_FLASH_INFORM_BLOCK0x5566
.CODE
//============================================================================================
//语法:
voidF_FlashWrite1Word(intaddr,intValue)
//描述:
写一个字到FLASH中
//参数:
addr-被写数据的存储地址Value-被写数据
//返回:
无
//===============================================================================================
.PUBLIC_F_FlashWrite1Word
.DEFINEP_Flash_Ctrl0x7555
_F_FlashWrite1Word:
.proc
pushbpto[sp]
bp=sp+1
r1=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语音 控制 小车 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)