📄 main.c
字号:
//传入
//****************训练******************************************
// 提示音 输入语音
//--------------------------------------------------------
// "A同学" "到"
// "B同学" "到"
// "C同学" "到"
// "再说一遍"(以上提示音每说完一遍出现此命令)
// "开始辨识"(以上三条语句全部训练成功时,进入识别)
//*****************识别*****************************************
// 发布命令 应答
//---------------------------------------------------------
// "A同学" "到"
// "B同学" "到"
// "C同学" "到"
///传出/////////////////////////////////////////////////////////////
#include "bsrsd.h"
#include "SPCE061V004.H"
#define NAME_A 0x100//A同学应答
#define NAME_B 0x101//B同学应答
#define NAME_C 0x102//C同学应答
#define RSP_A 0//A同学
#define RSP_B 1//B同学
#define RSP_C 2//C同学
#define RSP_INTR 3//开始
//.......全程变量.......
int gTriggerRespond[] = {RSP_A, RSP_B, RSP_C};//
int PlayFlag=0;
int res,r; int timeCnt=0;
//........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();
}
//.......TrainWord函数定义.........
int TrainWord(int WordID, int RespondID)
{
PlayRespond(RespondID);//播放应答语
BSR_InitRecognizer(BSR_MIC);
BSR_EnableCPUIndicator();
while(1)
{
res = BSR_Train(WordID,BSR_TRAIN_TWICE);//训练两次
if(res == 0) break;//如果训练成功 跳出训练循环
else PlayRespond(RSP_INTR);//否则 继续播放点名
BSR_InitRecognizer(BSR_MIC);//辨识器初始化
BSR_EnableCPUIndicator();//实时监控
}
return 0;
}
//.......recognise函数定义.......
unsigned int recognise()
{
r=3;
while(r--){
PlayRespond(RSP_INTR); // 播放开始辨识的提示音
BSR_InitRecognizer(BSR_MIC); //辨识器初始化
BSR_EnableCPUIndicator(); //实时监控
while(1){ //识别循环
res=BSR_GetResult();
if(res>0){
switch(res)
{
case NAME_A: //识别结果是A同学
return 10;
case NAME_B: //识别结果是B同学
return 12;
case NAME_C: //识别结果是C同学
return 14;
default:
return 0;
};
}
else
{
*P_Watchdog_Clear=C_WDTCLR; //请看门狗
if (++timeCnt > 45000) //超出定时
{
*P_Watchdog_Clear=C_WDTCLR;
timeCnt = 0;
break;
};
};
};
};
return 0;
}
//.......web........
void web()
{
unsigned int uiData ,Ret,uoData,i; //接收发送的数据
unsigned int jieguo; //点名统计结果
*P_IOB_Dir=0x0402; //IOB7,IOB10初始化
*P_IOB_Attrib=0x0482;
*P_IOB_Data=0x0000;
while(1) //接收循环
{
*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;
*P_Watchdog_Clear=1;
Ret=*P_UART_Data; // 清接收缓冲区
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; //读出接收的数据
if(uiData==10||uiData==12||uiData==14) //接收完毕处理:发送结果
{
*P_IOB_Data=*P_IOB_Data|0x0002;//接受到
PlayRespond(gTriggerRespond[(uiData-10)/2]); //播放名字
jieguo=recognise();//识别
if(jieguo==uiData){
uoData = 10 ; //识别与点名匹配
}
else uoData = 12; //
i=100;
while(i--){*P_Watchdog_Clear=C_WDTCLR;};//延时
//*P_UART_Command1=0x00c0; //允许发送
//*P_UART_Command2=0x000c;
Ret=*P_UART_Data; // 清发送缓冲区
Ret=*P_UART_Command2;
Ret=Ret&0x0040;
while(Ret==0) //等待发送完毕
{
Ret=*P_UART_Command2;
Ret=Ret&0x0040;
*P_Watchdog_Clear=C_WDTCLR;
}
*P_UART_Data =uoData;
*P_IOB_Data=*P_IOB_Data&0xfffd;//发送出
i=100;
while(i--){*P_Watchdog_Clear=C_WDTCLR;};
uiData=0; //将输入数据清零 以免死循环
};
};
}
//........main........
int main()
{
BSR_DeleteSDGroup(0); // 初始化存储器RAM
PlayRespond(RSP_INTR); //播放开始训练的提示音
while(TrainWord(NAME_A,0) != 0) ;
while(TrainWord(NAME_B,1) != 0) ;
while(TrainWord(NAME_C,2) != 0) ;
///////////////////////////////////////////////////////////////////
//UART传入-点名-识别-返回统计结果-UART传出
///////////////////////////////////////////////////////////////////
web();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -