⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 凌阳61板单片机应用
💻 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 + -