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

📄 main.c

📁 凌阳单片机的语音遥控车实验原码,压缩包无密码.
💻 C
字号:

#include "bsrsd.h"
#include "hardware.h"
#define NAME_ID 		0x100
#define COMMAND_ONE_ID 	0x101
#define COMMAND_TWO_ID 	0x102
#define COMMAND_THREE_ID 	0x103
#define COMMAND_FORE_ID 	0x104
#define COMMAND_FIVE_ID 	0x105
#define COMMAND_SIX_ID 	0x106
#define COMMAND_SEVEN_ID 	0x107
#define RSP_INTR		0
#define RSP_NAME		1
#define RSP_AGAIN		4
#define RSP_NOVOICE		5
#define RSP_STAR		8
#define RSP_MASTER		9
#define RSP_HERE		10
#define RSP_GUNSHOT		0
#define RSP_PATROL		11
#define RSP_READY		12
#define RSP_COPY		13
#define RSP_NOISY		14

//..................全程变量....................
int gActivated = 0;	//该变量用于检测是否有触发命令,当有识别出语句
                    //为触发名称则该位置1 
					 
int gTriggerRespond[] = {RSP_MASTER, RSP_HERE, RSP_MASTER};
int gComm2Respond[] = {RSP_PATROL, RSP_READY, RSP_COPY};
extern void ClearWatchDog();
int PlayFlag = 0;
unsigned uiSpeed=0;

void PlayRespond2(int Result)
{
	BSR_StopRecognizer();
	SACM_A2000_Initial(1);
	SACM_A2000_Play(Result, 3, 3);
	while((SACM_A2000_Status()&0x0001) != 0)
	{
		SACM_A2000_ServiceLoop();
		ClearWatchDog();
	}
	SACM_A2000_Stop();
	BSR_InitRecognizer(BSR_MIC);
	BSR_EnableCPUIndicator();	
}

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();
		ClearWatchDog();
	}
	SACM_S480_Stop();
	BSR_InitRecognizer(BSR_MIC);
	BSR_EnableCPUIndicator();	
}

int TrainWord(int WordID, int RespondID)
{
	int res;
	PlayRespond(RespondID);
	while(1)
	{
		res = BSR_Train(WordID,BSR_TRAIN_TWICE);
		//res = BSR_Train(WordID,1);
		if(res == 0) break;
		switch(res)
		{
		case -1: 									//没有检测出声音
			PlayRespond(RSP_NOVOICE);
			return -1;
		case -2: 									//需要重新训练一遍
			PlayRespond(RSP_AGAIN);
			break;
		case -3: 									//环境太吵
			PlayRespond(RSP_NOISY);
			return -1;		
		case -4: 									//数据库满
		 	return -1;
		case -5: 									//检测出声音不同
			if(WordID == NAME_ID)	PlayRespond(RSP_NOVOICE);
			else					PlayRespond(RSP_NOVOICE);
			return -1;
		case -6: 									//序号错误
			return -1;
		}
	}
	return 0;
}

int main()
{
	int res, timeCnt=0, random_no=0,iMoveFlag=0xffff,aFlag=0;
	unsigned int * ClearWatchdog = 0x7012;
	unsigned int uiIOB,i;
	unsigned int *p;
	p=0x7005;
    F_Speed();
	* ClearWatchdog = 0x0001; 
	SP_Init_IOB(0xff00,0xff00,0x00ff); 		    //设置A口为输出口
    


    BSR_DeleteSDGroup(0);							// 初始化存储器RAM

	PlayRespond(RSP_INTR);				    		//播放开始训练的提示音
	//..........训练名称..............................
	while(TrainWord(NAME_ID,1) != 0) ;
	//..........训练第一条命令.......................
	while(TrainWord(COMMAND_ONE_ID,2) != 0) ;
	//..........训练第二条命令.......................
	while(TrainWord(COMMAND_TWO_ID,3) != 0) ;
	//..........训练第三条命令.......................
	while(TrainWord(COMMAND_THREE_ID,3) != 0) ;
	//..........训练第四条命令.......................
	while(TrainWord(COMMAND_FORE_ID,3) != 0) ;
	
	//..........开始识别命令.........................
	BSR_InitRecognizer(BSR_MIC);		    		//辨识器初始化
	//BSR_EnableCPUIndicator();

	PlayRespond(RSP_STAR);			    			// 播放开始辨识的提示音
	
	while(1)
	{
	

	    SP_Init_IOB(0xff00,0xff00,0x00ff); 
		SP_Export(Port_IOB_Data,iMoveFlag);	
	    * ClearWatchdog = 0x0001; 

       
        uiIOB=*p;
        uiIOB=uiIOB&0x00f0;
        if(uiIOB==0x00e0||uiIOB==0x00b0||uiIOB==0x00d0||uiIOB==0x00f0)
		{
		switch(uiIOB)
		 {
		    case 0x00e0:
		  SP_Export(Port_IOB_Data,0xdaff);  //左拐  
  
          * ClearWatchdog = 0x0001; 
          iMoveFlag=0xdaff;
          break;
          //******************************************//
		  case 0x00b0:
		    SP_Export(Port_IOB_Data,0xfdff);  //慢速倒退   
		  	for(i=0; i<4; i++)
	     {
			F_Delay();
	      * ClearWatchdog = 0x0001;
         }	
		iMoveFlag=0xfdff;		         
		 SP_Init_IOB(0xff00,0xff00,0x00ff);
          SP_Export(Port_IOB_Data,0xeaff);  //右拐
          
          for(i=0; i<5; i++)
	     {
		    F_Delay();
	      * ClearWatchdog = 0x0001;
         }	
		 iMoveFlag=0xeaff;
          break;
          
          //******************************************//
		  case 0x00d0:
	      SP_Export(Port_IOB_Data,0xeaff);  //右拐
          * ClearWatchdog = 0x0001;
          iMoveFlag=0xeaff;
		  break;
		  
		  //******************************************//
		  case 0x00f0:
		   SP_Export(Port_IOB_Data,0xfeff);  
		  * ClearWatchdog = 0x0001;	      
          break; 
		}
        }
		else
     
        random_no ++;
		if(random_no >= 3) random_no = 0;
		res = BSR_GetResult();
		if(res > 0)							//识别出命令
		{
			if(gActivated)
			{
				timeCnt = 0;
				switch(res)
				{
				case NAME_ID:
				    SP_Init_IOB(0xff00,0xff00,0x00ff);
				    SP_Export(Port_IOB_Data,0xffff);
		for(i=0; i<3; i++)
	     {
			F_Delay();
	      * ClearWatchdog = 0x0001;
         }	
				    PlayFlag = 1;
					PlayRespond2(RSP_GUNSHOT);
					PlayFlag = 0;
					* ClearWatchdog = 0x0001;
				//	PlayRespond(gTriggerRespond[random_no]);
					
				    iMoveFlag=0xffff;					
					break;
				case COMMAND_ONE_ID:
				    SP_Init_IOB(0xff00,0xff00,0x00ff);
				 SP_Export(Port_IOB_Data,0xfeff);  //慢速前进 
		for(i=0; i<3; i++)
	     {
			F_Delay();
	      * ClearWatchdog = 0x0001;
         }	  
					PlayFlag = 1;
					PlayRespond2(RSP_GUNSHOT);
					
					PlayFlag = 0;
					* ClearWatchdog = 0x0001;
					iMoveFlag=0xfeFF;
					gActivated = 0;
					break;
				case COMMAND_TWO_ID:
					SP_Init_IOB(0xff00,0xff00,0x00ff);
				   SP_Export(Port_IOB_Data,0xdaff);  //左拐 
		for(i=0; i<3; i++)
	     {
			F_Delay();
	      * ClearWatchdog = 0x0001;
         }	
				    PlayFlag = 1;
					PlayRespond2(RSP_GUNSHOT);
					PlayFlag = 0;
				//	PlayRespond(gComm2Respond[random_no]);
					* ClearWatchdog = 0x0001;
					
					
					iMoveFlag=0xdaFF;
					gActivated = 0;
					break;
				case COMMAND_THREE_ID:
				    SP_Init_IOB(0xff00,0xff00,0x00ff);
				  SP_Export(Port_IOB_Data,0xeaff);  //右拐
		for(i=0; i<3; i++)
	     {
			F_Delay();
	      * ClearWatchdog = 0x0001;
         }	
				    PlayFlag = 1;
					PlayRespond2(RSP_GUNSHOT);
					PlayFlag = 0;
					* ClearWatchdog = 0x0001;
				    
				    iMoveFlag=0xeaFF;
				    gActivated = 0;
				    break;
				case COMMAND_FORE_ID:
				    SP_Init_IOB(0xff00,0xff00,0x00ff);
				   SP_Export(Port_IOB_Data,0xfdff);  //慢速倒退  
				   aFlag=aFlag+1;
		for(i=0; i<3; i++)
	     {
			F_Delay();
	      * ClearWatchdog = 0x0001;
         }	
				    PlayFlag = 1;
					PlayRespond2(RSP_GUNSHOT);
					PlayFlag = 0;
					* ClearWatchdog = 0x0001;
					
				    iMoveFlag=0xfdFF;
				    gActivated = 0;
				    break; 
			   }				
			}
			else
			{
				if(res == NAME_ID)
				{
					* ClearWatchdog = 0x0001; 
					PlayRespond(gTriggerRespond[random_no]);
					gActivated = 1;
					timeCnt = 0;
				}
			}	
		}
		else if (gActivated)
		{
			if (++timeCnt > 450)			//超出定时
			{
				* ClearWatchdog = 0x0001; 
				PlayRespond(RSP_NOVOICE); 	//在设定时间内没有检测出声音					
				gActivated = 0;
				timeCnt = 0;
			}
		}
	}
}

int ShowAndVoic()
{ 
	int i,t,time,carlong,tm0,tm1,tm2,tm3,second,distance,dst0,dst1,dst2,dst3,dst4,dst5;
   	time=car_time();
	carlong=car_long();
	carlong=carlong*15;
    tm0=time%10;
    t=time/10;
    tm1=t%10;
	t=time/100;
	tm2=t%10;
	t=time/1000;
	tm3=t%10;
	dst0=carlong%10;
	t=carlong/10;
	dst1=t%10;
	t=carlong/100;
	dst2=t%10;
	t=carlong/1000;
	dst3=t%10;
	t=carlong/10000;
	dst4=t%10;
	t=carlong/100000;
	dst5=t%10;

loop:
t=0;
	do
	{ t=t+1; 
	singleled(0,tm0);
		 
	for(i=1;i<=0x50;i++)
       delay(); 
       
	    singleled(1,tm1);
	   for(i=1;i<=50;i++)
      delay();
     singleled(2,tm2);
     for(i=1;i<=50;i++)
       delay();
      
    
    
}
while(t<2000);

       
       t=0;
	do
	{ t=t+1; 
	singleled(0,dst0);
		 
	for(i=1;i<=0x50;i++)
       delay(); 
       
	    singleled(1,dst1);
	   for(i=1;i<=50;i++)
      delay();
     singleled(2,dst2);
     for(i=1;i<=50;i++)
       delay();
      
    
     singleled(3,dst3);
		 
	for(i=1;i<=0x50;i++)
       delay(); 
}
while(t<2000);
            
  //////////////////////////////////////////////////////////
  
    PlayRespond(12); 

       delay();
     PlayRespond(tm2);
     
       delay();
	PlayRespond(tm1);
	
       delay();
	PlayRespond(tm0);
	
       delay();
	 PlayRespond(11);
	  delay();
	  delay();
	   delay();
	    delay();
	     delay();
	      delay();
	       delay();
       delay();
	PlayRespond(dst3);
	
       delay();
	PlayRespond(dst2); 

       delay();
	PlayRespond(dst1);
	
       delay();
	PlayRespond(dst0);
	
       delay();
	PlayRespond(13); 
	
       delay();
	////////////////////////////////////////////////////
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -