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

📄 main.c

📁 智能小车控制系统
💻 C
📖 第 1 页 / 共 2 页
字号:
				{
					Delay();
				}
		}
	
	*P_IOB_Data=0x0000;
}

//=============================================================
// 语法格式:	void TurnRight();
// 实现功能:	右转子函数
// 参数:		无
// 返回值:		无
//=============================================================
void TurnRight()                           		//右转
{
	unsigned int i,j;

	for(j=0;j<20;j++)	
	{	
		*P_IOB_Data=0x0900;	
		Delay();
		*P_IOB_Data=0x0000;
		
			for(i=0;i<4;i++)
			{
				Delay();
			}
	
	}
	
	*P_IOB_Data=0x0000;
}

//=============================================================
// 语法格式:	void Stop();
// 实现功能:	停车子函数
// 参数:		无
// 返回值:		无
//=============================================================
void Stop()                           			//停车
{
	*P_IOB_Data=0x0000;							//停车
	PlaySnd(S_RDY,3);							//语音提示
}

//=============================================================
// 语法格式:	void Line();
// 实现功能:	循线子函数
// 参数:		无
// 返回值:		无
//=============================================================
void Line()                           		 		//循线
{
	
	 int flag = 0;
	//unsigned int j;
	PlaySnd(S_ACT1,3);									//延时
	
		while(flag == 0)
			{	
					stated = nowstate;
					nowstate=*P_IOB_Data;
					nowstate&=0x0030;
					switch(nowstate)
						{
							case 0x0030:                 //左边和右边都有反射信号,小车应该前进
							{ 
								flag = 1;
							} break;
							
							case 0x0020:                 //左边传感器有反射,右边传感器没有反射,小车右转
							{ 
								TurnRight();
							} break;
							case 0x0010:              //右边传感器有反射,左边传感器没有反射,小车左转
							{   
							     TurnLeft();
							} break;
							case 0x0000:                //左边和右边都没有反射信号,小车应该前进
							{ 
							    GoAhead();
							} break;
						default :
				 			break;
		 
				      }
			}
			
	*P_IOB_Data=0x0000;							//停车
	PlaySnd(S_WANBI,3);							//语音提示
	
}


//=============================================================
// 语法格式:	void Circle();
// 实现功能:	画圆子函数
// 参数:		无
// 返回值:		无
//=============================================================
void Circle()                           		 		//右转
{
	unsigned int i,j,uiTimecont;
	PlaySnd(S_ACT2,3);									//延时
	
	
	for(j=0;j<500;j++)
    
		{
			
			GoAhead();
		 	//*P_IOB_Data=0x0300;								
			//Delay();                       //延时
			*P_IOB_Data=0x0200;
			for(i=0;i<4;i++)
				{
					Delay();      //延时
				}
		
		}
    
	*P_IOB_Data=0x0000;							//停车
	PlaySnd(S_WANBI,3);							//语音提示		
}

//=============================================================
// 语法格式:	void Dingdian();
// 实现功能:	定点子函数
// 参数:		无
// 返回值:		无
//=============================================================
void Dingdian()                           		 		//右转
{
	float x = 0;
	float y = 0;
	int i,j,k,n,TurnTime;
	float distancex,distancey;
	float s,tgveual,jiaodu,RunTime,Temp;
	int numxid[5] = {S_Twenty,S_FOURty,S_Sixty,S_Sevty,S_NINEty};
	int numyid[5] = {S_Twenty,S_THREEty,S_FOURty,S_Sixty,S_Sevty};
	float numx[6] = {0,20,40,60,70,90};
	float numy[6] = {0,20,30,40,60,70};
	float jiaodutemp[6];
	jiaodutemp[0] = 0;
	
	
	PlaySnd(S_ACT3,3);									//延时
	for(i=1;i<6;i++)
	{
		PlaySnd(S_OX,3);									//延时
		PlaySnd(numxid[i-1],3);
		
		PlaySnd(S_OY,3);									//延时
		PlaySnd(numyid[i-1],3);
	
		distancex = numx[i]-numx[i-1];
		distancey = numy[i]-numy[i-1];
		
		s = sqrtf(distancex*distancex+distancey*distancey);
		RunTime = 2*s/speed;
		
		tgveual = distancey/s;
		jiaodu = acosf(tgveual);
		jiaodutemp[i] = jiaodu;
		//TurnTimes = OneTime*jiaodu
		Temp = 20*(jiaodutemp[i] - jiaodutemp[i-1]);
		TurnTime = (int)Temp;
		if(Temp >0)
		{
		 	for(n=0;n<TurnTime;n++)
		 	{
		 	 	TurnRight();		
		 	}
		 	
		 	*P_IOB_Data=0x0000;
			for(j=0;j<4;j++)	
			{
				Delay();
			}
			
		 	for(k=0;k<RunTime;k++)
		 	{
		 		GoAhead();
				//Delay();
		 	}
		}
		/*else if (jiaodu==0)	
		{
			//GoAhead();
			
			for(k=0;k<RunTime;k++)
			{
				GoAhead();
				//Delay();
			}
		
		}*/
		else
		{
		    for(n=0;n<TurnTime;n++)
			{
				
				 TurnLeft();
			}
		   
		   *P_IOB_Data=0x0000;
			for(j=0;j<4;j++)	
			{
				Delay();
			}
			
		    for(k=0;k<RunTime;k++)
		    {
		    	GoAhead();
				//Delay();
		    }
	
		}
	
		*P_IOB_Data=0x0000;
		for(j=0;j<4;j++)	
			{
				Delay();
			}	
		
	}
	*P_IOB_Data=0x0000;							//停车
	PlaySnd(S_WANBI,3);							//语音提示	
		
}

//=============================================================
// 语法格式:	void Zidong();
// 实现功能:	自动子函数
// 参数:		无
// 返回值:		无
//=============================================================
void Zidong()                           		 		//右转
{
	unsigned int i,j,obstacle;
	PlaySnd(S_ACT4,3);									//延时
	for(j=0;j<2000;j++)
	{
		obstacle =*P_IOB_Data;
		obstacle&=0x0008;
			
			switch(obstacle)
			{
				case 0x0008:
				{
				   GoAheadzd();	
					
				}
				case 0x0000:
				{	
					BackUp();
					for(i=0;i<4;i++)
					{
				  		Delay();
					}
					TurnRight();
				}
			}

		}
		
	*P_IOB_Data=0x0000;							//停车
	PlaySnd(S_WANBI,3);							//语音提示
}


//=============================================================
// 语法格式:	void BSR(void);
// 实现功能:	辨识子函数
// 参数:		无
// 返回值:		无
//=============================================================
void BSR(void)
{	
	int Result;									//辨识结果寄存
	Result = BSR_GetResult();					//获得识别结果

	if(Result>0)								//有语音触发?
	{	
		*P_IOB_Data=0x0000;						//临时停车
		switch(Result)
		{
		case NAME_ID:							//识别出名称命令
			Stop();								//停车待命
			
			break;
		case COMMAND_ACT1_ID:						//识别出第一条命令
			Line();							//执行动作一:循线
			break;
		case COMMAND_ACT2_ID:					//识别出第二条命令
			Circle();							//执行动作二:画圆
			break;
		case COMMAND_ACT3_ID:					//识别出第三条命令
			Dingdian();							//执行动作三:定点
			break;
		case COMMAND_ACT4_ID:					//识别出第四条命令
			Zidong();						//执行动作四:自动
			break;
		default:
			break;
		}
	}
}

//=============================================================
// 语法格式:	int main(void);
// 实现功能:	主函数
// 参数:		无
// 返回值:		无
//=============================================================
int main(void)
{	
	unsigned int BS_Flag;						//Train标志位
	
	*P_IOA_Dir=0xff00;							//初始化IOA,IOA0~7下拉输入
	*P_IOA_Attrib=0xff00;
	*P_IOA_Data=0x0000;
	
	*P_IOB_Dir = 0x0f00;                        //IOB8~IOB11设置为同相输出口 
	*P_IOB_Attrib = 0x0f00;
	*P_IOB_Data=0x0000;
	
	BSR_DeleteSDGroup(0);						//初始化存储器RAM
	BS_Flag=*(unsigned int *)0xf700;			//读存储单元0xe000
	if(BS_Flag==0xffff)							//没有经过训练(0xe000内容为0xffff)
	{
		FormatFlash();
		TrainSD();								//训练第一组
		StoreSD();								//存储训练结果(语音模型)	
	}
	else 										//经过训练(0xe000内容为0x0055)
	{
		LoadSD();								//语音模型载入识别器
	}
	
	
	PlaySnd(S_START,3);							//开始识别提示
	BSR_InitRecognizer(BSR_MIC);				//初始化识别器
	
	while(1)
	{	
		
		BSR();
		if((*P_IOA_Data)&0x0004)				//是否重新训练
		{	
			F_FlashErase(0xf700);
			while(1);
		}
		
	}
}



⌨️ 快捷键说明

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