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

📄 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
#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 + -