📄 main.c
字号:
//传入
//****************训练******************************************
// 提示音 输入语音
//--------------------------------------------------------
// "A同学" "到"
// "B同学" "到"
// "C同学" "到"
// "再说一遍"(以上提示音每说完一遍出现此命令)
// "开始辨识"(以上三条语句全部训练成功时,进入识别)
//*****************识别*****************************************
// 发布命令 应答
//---------------------------------------------------------
// "A同学" "到"
// "B同学" "到"
// "C同学" "到"
///传出/////////////////////////////////////////////////////////////
#include "bsrsd.h"
#include "SPCE061V004.H"
#define NAME_A 0x100//A到
#define NAME_B 0x101
#define NAME_C 0x102
#define RSP_A 0//A同学
#define RSP_B 1
#define RSP_C 2
#define RSP_INTR 3//开始
//.......全程变量.......
int gActivated = 0; //该变量用于检测是否有触发命令
int gTriggerRespond[] = {RSP_A, RSP_B, RSP_C};//
//........playRespond.......
void PlayRespond(int Result)
{
BSR_StopRecognizer();
SACM_S480_Initial(1);
SACM_S480_Play(Result, 3, 3);
while((SACM_S480_Status()&0x0001) != 0)
{
SACM_S480_ServiceLoop();
*P_Watchdog_Clear=C_WDTCLR;
}
SACM_S480_Stop();
BSR_InitRecognizer(BSR_MIC);
BSR_EnableCPUIndicator();
}
//.......trainword.......
int TrainWord(int WordID, int RespondID)
{
int res;
PlayRespond(RespondID);
while(1)
{
res = BSR_Train(WordID,BSR_TRAIN_TWICE);
if(res == 0) break;
else PlayRespond(RSP_INTR);
}
return 0;
}
//.......recognise.......
unsigned int recognise()
{ BSR_InitRecognizer(BSR_MIC); //辨识器初始化
BSR_EnableCPUIndicator();
PlayRespond(RSP_INTR); // 播放开始辨识的提示音
while(1)
{
int res = BSR_GetResult();
int timeCnt = 0;
if(res > 0) //识别出命令
{
if(gActivated)
{
switch(res)
{
case NAME_A:
return 10;
case NAME_B:
gActivated = 0;
return 12;
case NAME_C:
gActivated = 0;
return 14;
default:
return 0;
}
}
}
else if (gActivated)
{
if (++timeCnt > 450) //超出定时
{
gActivated = 0;
timeCnt = 0;
return 0;
}
}
}
}
//.......main........
int main()
{
BSR_DeleteSDGroup(0); // 初始化存储器RAM
while(TrainWord(NAME_A,0) != 0) ; //训练
while(TrainWord(NAME_B,1) != 0) ;
while(TrainWord(NAME_C,2) != 0) ;
///////////////////////////////////////////////////////////////////
//UART传入-点名-识别-返回统计结果-UART传出
///////////////////////////////////////////////////////////////////
unsigned int uiData ,Ret; //接收发送的数据
unsigned int jieguo; //
*P_IOB_Dir=0x0480; //IOB7,IOB10初始化
*P_IOB_Attrib=0x0400;
*P_IOB_Data=0x0000;
*P_UART_Command1=0x20; //Uart内部复位
*P_UART_Command1=0x00;
*P_UART_BaudScalarHigh=0x01; //波特率设置
*P_UART_BaudScalarLow=0x40;
*P_UART_Command1=0x000C; //允许接收
*P_UART_Command2=0x00C0;
Ret=*P_UART_Data; // 清接收缓冲区
while(1) //接收循环
{
Ret=*P_UART_Command2;
Ret=Ret&0x0080;
while(Ret==0) //等待接收完毕
{
Ret=*P_UART_Command2;
Ret=Ret&0x0080;
*P_Watchdog_Clear=1;
}
uiData=*P_UART_Data; //读出接收的数据
while(uiData==10|uiData==12|uiData==14) //接收完毕处理:发送结果
{
PlayRespond(gTriggerRespond[(uiData-10)/2]); //播放名字
jieguo=recognise(); //识别
if(jieguo==uiData) //识别与点名匹配
{ //发送
*P_UART_Command1=0x00c0; //允许发送
*P_UART_Command2=0x000c;
Ret=*P_UART_Data; // 清发送缓冲区
while(1)
{
Ret=*P_UART_Command2;
Ret=Ret&0x0080;
while(Ret==0) //等待发送完毕
{
Ret=*P_UART_Command2;
Ret=Ret&0x0080;
*P_Watchdog_Clear=C_WDTCLR;
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -