凌阳语音控制小车程序.docx

上传人:b****5 文档编号:3608039 上传时间:2022-11-24 格式:DOCX 页数:16 大小:18.55KB
下载 相关 举报
凌阳语音控制小车程序.docx_第1页
第1页 / 共16页
凌阳语音控制小车程序.docx_第2页
第2页 / 共16页
凌阳语音控制小车程序.docx_第3页
第3页 / 共16页
凌阳语音控制小车程序.docx_第4页
第4页 / 共16页
凌阳语音控制小车程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

凌阳语音控制小车程序.docx

《凌阳语音控制小车程序.docx》由会员分享,可在线阅读,更多相关《凌阳语音控制小车程序.docx(16页珍藏版)》请在冰豆网上搜索。

凌阳语音控制小车程序.docx

凌阳语音控制小车程序

 

//工程名称:

Car_Demo

//功能描述:

实现小车的语音控制

//涉及的库:

CMacro1016.lib

//bsrv222SDL.lib

//sacmv26e.lib

//组成文件:

main.c

//Flash.asm,hardware.asm,ISR.asm

//hardware.h,s480.h,hardware.inc

//硬件连接:

IOA0-----KEY1

//IOA1-----KEY2

//IOA2-----KEY3

//IOB8-----前进

//IOB9-----倒车

//IOB10----左拐

//IOB11----右拐

//维护记录:

2005-12-12v1.0

//========================================================

#include"s480.h"

#include"bsrsd.h"

#defineP_IOA_Data(volatileunsignedint*)0x7000

#defineP_IOA_Dir(volatileunsignedint*)0x7002

#defineP_IOA_Attrib(volatileunsignedint*)0x7003

#defineP_IOB_Data(volatileunsignedint*)0x7005

#defineP_IOB_Dir(volatileunsignedint*)0x7007

#defineP_IOB_Attrib(volatileunsignedint*)0x7008

#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();//解码并填充队列

*P_Watchdog_Clear=0x0001;//清看门狗

}

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:

break;

}

}

return0;

}

//=============================================================

//语法格式:

voidTrainSD();

//实现功能:

训练函数

//参数:

//返回值:

//=============================================================

voidTrainSD()

{

while(TrainWord(NAME_ID,S_NAME)!

=0);//训练名称

while(TrainWord(COMMAND_GO_ID,S_ACT1)!

=0);//训练第1个动作

while(TrainWord(COMMAND_BACK_ID,S_ACT2)!

=0);//训练第2个动作

while(TrainWord(COMMAND_LEFT_ID,S_ACT3)!

=0);//训练第3个动作

while(TrainWord(COMMAND_RIGHT_ID,S_ACT4)!

=0);//训练第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)//模型导出成功?

g_Ret=BSR_ExportSDWord(commandID);

for(i=0;i<100;i++)//保存语音模型SD1(0xe000---0xe063)

{

F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);

ulAddr+=1;

}

}

}

//=============================================================

//语法格式:

voidStoreSD();

//实现功能:

装载语音模型函数

//参数:

//返回值:

//=============================================================

voidLoadSD()

{unsignedint*p,k,jk,Ret,g_Ret;

p=(int*)0xe000;

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

{

for(k=0;k<100;k++)

{

Ret=*p;

BSR_SDModel[k]=Ret;//装载语音模型

p+=1;

}

g_Ret=BSR_ImportSDWord();

while(g_Ret!

=0)//模型装载成功?

g_Ret=BSR_ImportSDWord();

}

}

//=============================================================

//语法格式:

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;//倒退

*P_INT_Mask|=0x0004;//以下为中断定时操作

__asm("intfiq,irq");

uiTimecont=0;

}

//=============================================================

//语法格式:

voidTurnLeft();

//实现功能:

左转子函数

//参数:

//返回值:

//=============================================================

voidTurnLeft()//左转

{

PlaySnd(S_GJG,3);

*P_IOB_Data=0x0900;//右转

Delay();//延时

*P_IOB_Data=0x0500;//左转

*P_INT_Mask|=0x0004;//以下为中断定时操作

__asm("intfiq,irq");

uiTimecont=0;

}

//=============================================================

//语法格式:

voidTurnRight();

//实现功能:

右转子函数

//参数:

//返回值:

//=============================================================

voidTurnRight()//右转

{

PlaySnd(S_GJG,3);//语音提示

*P_IOB_Data=0x0500;//左转

Delay();//延时

*P_IOB_Data=0x0900;//右转

*P_INT_Mask|=0x0004;//以下为中断定时操作

__asm("intfiq,irq");

uiTimecont=0;

}

//=============================================================

//语法格式:

voidStop();

//实现功能:

停车子函数

//参数:

//返回值:

//=============================================================

voidStop()//停车

{

*P_IOB_Data=0x0000;//停车

PlaySnd(S_RDY,3);//语音提示

}

//=============================================================

//语法格式:

voidBSR(void);

//实现功能:

辨识子函数

//参数:

//返回值:

//=============================================================

voidBSR(void)

{

intResult;//辨识结果寄存

Result=BSR_GetResult();//获得识别结果

if(Result>0)//有语音触发?

{

*P_IOB_Data=0x0000;//临时停车

switch(Result)

{

caseNAME_ID:

//识别出名称命令

Stop();//停车待命

break;

caseCOMMAND_GO_ID:

//识别出第一条命令

GoAhead();//执行动作一:

直走

break;

caseCOMMAND_BACK_ID:

//识别出第二条命令

BackUp();//执行动作二:

倒车

break;

caseCOMMAND_LEFT_ID:

//识别出第三条命令

TurnLeft();//执行动作三:

左转

break;

caseCOMMAND_RIGHT_ID:

//识别出第四条命令

TurnRight();//执行动作四:

右转

break;

default:

break;

}

}

}

//=============================================================

//语法格式:

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;

*P_IOB_Data=0x0000;

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_InitRecognizer(BSR_MIC);//初始化识别器

while

(1)

{

BSR();

if((*P_IOA_Data)&0x0004)//是否重新训练

{

F_FlashErase(0xe000);

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=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1