迷宫小车思路,附带自己的成功代码及一副成功地图(51)

二维数组:用二维数组将坐标保存,如果芯片51则变量最多128个,故适用于地图范围在11*11之内。

暴力走:遇见岔路口默认方向左中右则暴力走出,适用于简单地图。

参加比赛建议暴力走,地图在赛前会给出,将硬件搞好即可,软件问题不大,选用模块建议超声波测距离,最好是4个,保证每一步的精确。车一定足够小,建议将芯片焊在板子上,大小最好在8*8以内,电池建议用蓄电池,298建议用12V,只要硬件好其他的都不是事。

千万不能按格走,很难保证精确度。

 按格走代码如下,二维数组有些繁琐,地图长度为8*8;

#include<reg52.h>
#define u8 unsigned char
#define u16 unsigned int
sbit int1=P1^4;
sbit int2=P1^5;
sbit int3=P1^6;
sbit int4=P1^7;
sbit hongwai1=P3^5;	//????
sbit hongwai2=P3^6; //????
sbit hongwai3=P3^7;
u8 ditu[8][8];
u8 ditu1[8];
u8 bushu;
char zuoyou,qianhou;
u8 fangxiang=1;
u8 chalukoushu;
u8 sihutong;
u8 zuoyoubian;
u8 qianhoubian;
u8 zuoyoubian1;
u8 qianhoubian1;
u8 duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
						void delay(u16 i)
{
  while(i--);
}
					void display()
					{
						 u8 i,k;
						 k=zuoyou;
//						 k=ditu[0][0];
//						 k=ditu[0][0];
//            for(i=0;i<2;i++)
//						{
//						  switch(i)
//							{
							  	 P0=duan[k];
								case 1:  P0= ~duan[k];break;
//							}
//							delay(50000);
//						}

					}


void tingzhi()
{
  int1=0;
	int2=0;
	int3=0;
	int4=0;
  delay(50000);
	delay(50000);
	delay(50000);

}

void houtui()
{
  int1=0;
	int2=1;
	int3=0;
	int4=1;
	delay(40000);
	
			 tingzhi();
			 bushu-=1;
}

void zuozhuan()
{
	u16 i=20,j=0;
	 			for(j=0;j<17000;j++)
	{
				 int1=1;
	int2=0;
	int3=1;
	int4=0;
	}
	
	i=17;	 
	while(i--)
	{			
	  
		for(j=0;j<2000;j++)
	{
				 int1=0;
	int2=0;
	int3=1;
	int4=0;
	}		
				
		 }

		 		for(j=0;j<23000;j++)
	{
				 int1=1;
	int2=0;
	int3=1;
	int4=0;
	}	

		 tingzhi();
	 bushu+=2;

}


void youzhuan()
{
	u16 i=20,j=0;
	 			for(j=0;j<17000;j++)
	{
				 int1=1;
	int2=0;
	int3=1;
	int4=0;
	}
	
	i=25;	 
	while(i--)
	{			
	  
		for(j=0;j<2000;j++)
	{
				 int1=1;
	int2=0;
	int3=0;
	int4=0;
	}		
				
		 }
		 		for(j=0;j<20000;j++)
	{
				 int1=1;
	int2=0;
	int3=1;
	int4=0;
	}	

		 tingzhi();
	 bushu+=2;

}



void qianjin()
{
	int1=1;
	int2=0;
	int3=1;
	int4=0;
	delay(41000);


			 tingzhi();
			 bushu+=1;
}
void kaishidezhizou()
{
	int1=1;
	int2=0;
	int3=1;
	int4=0;
	delay(50000);
		delay(50000);
	tingzhi();
			
}




void fanyouzhuan()
{
	u16 i=20,j=0;
	 			for(j=0;j<13000;j++)
	{
				 int1=0;
	int2=1;
	int3=0;
	int4=1;
	}
	
	i=24;	 
	while(i--)
	{			
	  
		for(j=0;j<2000;j++)
	{
				 int1=0;
	int2=1;
	int3=0;
	int4=0;
	}		
				
		 }

		 		for(j=0;j<23000;j++)
	{
				 int1=0;
	int2=1;
	int3=0;
	int4=1;
	}	

		 tingzhi();
	 bushu-=2;

}

void fanzuozhuan()
{
	u16 i=20,j=0;
	 			for(j=0;j<17000;j++)
	{
				 int1=0;
	int2=1;
	int3=0;
	int4=1;
	}
	
	i=20;	 
	while(i--)
	{			
	  
		for(j=0;j<2000;j++)
	{
				 int1=0;
	int2=0;
	int3=0;
	int4=1;
	}		
				
		 }

		 		for(j=0;j<23000;j++)
	{
				 int1=0;
	int2=1;
	int3=0;
	int4=1;
	}	

		 tingzhi();
	 bushu-=2;

}

void jilu()
{
  if(  ditu[zuoyou][qianhou]!=90)
				 {

		     ditu[zuoyou][qianhou]=1+bushu;

				 }
}
void panduan()
{
		 	 if(zuoyou+1>7)
					 {
					   zuoyoubian=1;
					 }
					 if(zuoyou==0)
					 {
					   zuoyoubian1=1;
					 }
					 if(qianhou+1>7)
					 {
					    qianhoubian=1;
					 }
					 if(qianhou==0)
					 {
					 	 qianhoubian1=1;
					 }

}
void main()//?????????,?????,????	 ????????????д???
{
u8 lukoushu;//???????
  u8 i,j;	//??????????????????????????
	zuoyou=0;
	qianhou=0;
	fangxiang=1;
	chalukoushu=0;
	sihutong=0;
   
	while(hongwai3==0)
	{
	  tingzhi();				 //???
	}
	qianjin();//?????
	 bushu=2;
	while(1)
	{
		 lukoushu=0;
	   zuoyoubian=0;
		 qianhoubian=0;
		 zuoyoubian1=0;
		 qianhoubian1=0;
		 i=0;
		j=0;
		if(zuoyou==8)
		{
		  zuoyou=0;
		}
		if(qianhou==8)
		{
		  qianhou=0;
		}
		if(fangxiang==5)
		{
		  fangxiang=1;
		}
		if(fangxiang==0)
		{
		  fangxiang=4;
		}

		if(hongwai1==1)
		{
		  i+=1;
		}
		if(hongwai2==1)
		{
		  i+=1;
		}
		if(hongwai3==1)
		{
		  i+=1;
		}
	
//		else	if(i>=2&&sihutong==1)		 //????
//		{
//		 chalukoushu-=1;
//		}
		panduan();


		if(sihutong==1)
		{
			 ditu[zuoyou][qianhou]=100;

     	 if(fangxiang==1)
		   {

		
		if(hongwai1==1&&ditu[zuoyou+zuoyoubian1*8-1][qianhou]==0)
		{
				 lukoushu+=1;
		}
		if(hongwai2==1&&ditu[zuoyou+1-zuoyoubian*8][qianhou]==0)
		{
			 lukoushu+=1;
		}
		if(hongwai3==1&&ditu[zuoyou][qianhou+1-qianhoubian*8]==0)
		{
		   lukoushu+=1;
		}
		if(lukoushu>0)
		{
		   sihutong=0;
		}
		 		else  if(ditu[zuoyou+1-zuoyoubian*8][qianhou+qianhoubian1*8-1]==(bushu-1))
					{
						ditu[zuoyou][qianhou]=100;
					  fanyouzhuan();
//						zuoyou+=1; 
						qianhou+=qianhoubian1*8;		qianhou-=1;
						qianjin();
							 
						 ditu[zuoyou][qianhou]=100;
						fangxiang=4;
					
					}
				  else if(ditu[zuoyou+zuoyoubian1*8-1][qianhou+qianhoubian1*8-1]==(bushu-1))
					{
						ditu[zuoyou][qianhou]=100;
					  fanzuozhuan();
					//	zuoyou-=1;
					qianjin();	
									qianhou+=qianhoubian1*8;
						qianhou-=1;
					
						 ditu[zuoyou][qianhou]=100;
						fangxiang=2;
						
					}
				  else if(ditu[zuoyou][qianhou+qianhoubian1*8-1]==(bushu))//???
			  	  {
			  	 		ditu[zuoyou][qianhou]=100;
				      houtui();	qianhou+=qianhoubian1*8;
							qianhou-=1;
							
							 ditu[zuoyou][qianhou]=100;
			      }
	
				 
		 }

  else	 if(fangxiang==2)
	  {
					
		if(hongwai1==1&&ditu[zuoyou][qianhou+1-qianhoubian*8]==0)
		{
				 lukoushu+=1;
		}
		if(hongwai2==1&&ditu[zuoyou][qianhou+qianhoubian1*8-1]==0)
		{
				 lukoushu+=1;
		}
		if(hongwai3==1&&ditu[zuoyou+1-zuoyoubian*8][qianhou]==0)
		{
				lukoushu+=1;
		}
		if(lukoushu>0)
		{
		   sihutong=0;
		}
		 		 else if(ditu[zuoyou+zuoyoubian1*8-1][qianhou+qianhoubian1*8-1]==(bushu-1))
					{
						ditu[zuoyou][qianhou]=100	;
					  fanyouzhuan();
						qianjin();		zuoyou+=zuoyoubian1*8;
						zuoyou-=1;
						
						ditu[zuoyou][qianhou]=100;	
					//	qianhou-=1;
						fangxiang=1;
					}
				  else if(ditu[zuoyou+zuoyoubian1*8-1][qianhou+1-qianhoubian*8]==(bushu-1))
					{
						ditu[zuoyou][qianhou]=100;
					  fanzuozhuan();
						qianjin(); 			 	zuoyou+=zuoyoubian1*8;	
						zuoyou-=1;
			
							ditu[zuoyou][qianhou]=100;
				//		qianhou+=1;
						fangxiang=3;
					}
			      else if(ditu[zuoyou+zuoyoubian1*8-1][qianhou]==(bushu))
			    	{
						ditu[zuoyou][qianhou]=100;
				       houtui(); 	zuoyou+=zuoyoubian1*8;
							 zuoyou-=1;
							  
								ditu[zuoyou][qianhou]=100;
			    	}
		
				
		 }
	else  if(fangxiang==3)
		 {
		 			
		if(hongwai1==1&&ditu[zuoyou+1-zuoyoubian*8][qianhou]==0)
		{
			  lukoushu+=1;
		}
		if(hongwai2==1&&ditu[zuoyou+zuoyoubian1*8-1][qianhou]==0)
		{
			 lukoushu+=1;
		}
		if(hongwai3==1&&ditu[zuoyou][qianhou+qianhoubian1*8-1]==0)
		{
				lukoushu+=1;
		}
			if(lukoushu>0)
		{
		   sihutong=0;
		}
		 		else  if(ditu[zuoyou+1-zuoyoubian*8][qianhou+1-qianhoubian*8]==(bushu-1))
					{
						ditu[zuoyou][qianhou]=100	;
					 			 fanzuozhuan();
						qianjin();
					//	zuoyou+=1;
						qianhou+=1;
						qianhou-=qianhoubian*8;	 ditu[zuoyou][qianhou]=100;
						fangxiang=4;
					}
				  else if(ditu[zuoyou+zuoyoubian1*8-1][qianhou+1-qianhoubian*8]==(bushu-1))
					{
							 ditu[zuoyou][qianhou]=100	;
					  	 fanyouzhuan();
						qianjin();
					//	zuoyou-=1;
						qianhou+=1;
						qianhou-=qianhoubian*8;			ditu[zuoyou][qianhou]=100;
						fangxiang=2;
					}
				  else if(ditu[zuoyou][qianhou+1-qianhoubian*8]==(bushu))
			  	  {
						ditu[zuoyou][qianhou]=100;
				     		houtui();
						 		qianhou+=1;
								qianhou-=qianhoubian*8;
								ditu[zuoyou][qianhou]=100;
			  	  }
	
				
		 }

	else	if(fangxiang==4)
		 {
					              
		if(hongwai1==1&&ditu[zuoyou][qianhou+qianhoubian1*8-1]==0)
		{
			 lukoushu+=1;
		}
		if(hongwai2==1&&ditu[zuoyou][qianhou+1-qianhoubian*8]==0)
		{
			 lukoushu+=1;
		}
		if(hongwai3==1&&ditu[zuoyou+zuoyoubian1*8-1][qianhou]==0)
		{
			 	 lukoushu+=1;
		}
			if(lukoushu>0)
		{
		   sihutong=0;
		}

		 		 else if(ditu[zuoyou+1-zuoyoubian*8][qianhou+qianhoubian1*8-1]==(bushu-1))
					{
							ditu[zuoyou][qianhou]=100;
					  fanzuozhuan();																

						qianjin();
						zuoyou+=1;
						zuoyou-=zuoyoubian*8;	 	ditu[zuoyou][qianhou]=100;
					//	qianhou+=1;
						fangxiang=1;
					}
				  else if(ditu[zuoyou+1-zuoyoubian*8][qianhou+1-qianhoubian1*8]==(bushu-1))
					{
							ditu[zuoyou][qianhou]=100;
					  fanyouzhuan();
						zuoyou+=1;
							zuoyou-=zuoyoubian*8;	
							qianjin();			ditu[zuoyou][qianhou]=100;
					//	qianhou-=1;
						fangxiang=3;
					}
				  else if(ditu[zuoyou+1-zuoyoubian*8][qianhou]==(bushu))
			  	    {
							
							ditu[zuoyou][qianhou]=100;
				       houtui();
							 zuoyou+=1;
							 	zuoyou-=zuoyoubian*8;
								ditu[zuoyou][qianhou]=100;
			  	    }
	

				
		 }
	}

   else
	 {
	   if(fangxiang==1)
		 {
		  	if((hongwai1==0||ditu[zuoyou-1+zuoyoubian1*8][qianhou]==100)&&(hongwai2==0||ditu[zuoyou+1-zuoyoubian*8][qianhou]==100)&&(hongwai3==0||ditu[zuoyou][qianhou+1-qianhoubian*8]==100))
		{
		
		  sihutong=1;
		}

	   	 if(hongwai1==1&&ditu[zuoyou+zuoyoubian1*8-1][qianhou]==0)
		{

					jilu();
			 	houtui();		 
			 	qianhou-=1;
			
			 	jilu();
		  zuozhuan();
				panduan();
				
			zuoyou-=1;
		
					qianhou+=1;
				
			jilu();
			fangxiang-=1;
		}

		else if(hongwai3==1&&ditu[zuoyou][qianhou+1-qianhoubian*8]==0)
		{
		 if(qianhou==7)
			{
			  qianjin();
				tingzhi();
				while(1);
			}
				jilu();
		  qianjin();
			qianhou+=1;
	
			jilu();

		}	
		else	if((hongwai2==1)&&((ditu[zuoyou+1-zuoyoubian*8][qianhou])==0))
		{

			jilu();
				 houtui();			 
				 qianhou-=1;
		
				 jilu();
				panduan();
		  	youzhuan();
				zuoyou+=1;
					
				qianhou+=1;
	
			
			 jilu();
			 
			fangxiang+=1;
		}
	
	 }
else	 	if(fangxiang==2)
	{
			  	if((hongwai1==0||ditu[zuoyou][qianhou+1-qianhoubian*8]==100)&&(hongwai2==0||ditu[zuoyou][qianhou+qianhoubian1*8-1]==100)&&(hongwai3==0||ditu[zuoyou+1-zuoyoubian*8][qianhou]==100))
		{
		  sihutong=1;
		}
		 	/*if(	ditu[zuoyou][qianhou]!=90)
		{
				ditu[zuoyou][qianhou]=1+bushu;
		}*/
		 if(hongwai1==1&&ditu[zuoyou][qianhou+1-qianhoubian*8]==0)
		{

								   if(qianhou==7)
			{
			  houtui();
				zuozhuan();
					tingzhi();
				while(1);
			}
				jilu();
				houtui();	 		
				zuoyou-=1;
		
				jilu();
		  	zuozhuan();
					panduan();
				qianhou+=1;

				 zuoyou+=1;
				
				jilu();
				fangxiang-=1;
		}

		else if(hongwai3==1&&ditu[zuoyou+1-zuoyoubian*8][qianhou]==0)
		{
		    		jilu();
		  qianjin();
		  zuoyou+=1;

		  jilu();
			
	
		}

		else	  if(hongwai2==1&&ditu[zuoyou][qianhou+qianhoubian1*8-1]==0)
		{

					jilu();
					houtui();	 
					zuoyou-=1;
					
					jilu();
		  	 youzhuan();
				 	panduan();
	
				 qianhou-=1;
				 zuoyou+=1;
		
				 jilu();
				 fangxiang+=1;
		}
		 
	}
else		if(fangxiang==3)
	{

		  	if((hongwai1==0||ditu[zuoyou+1-zuoyoubian*8][qianhou]==100)&&(hongwai2==0||ditu[zuoyou+zuoyoubian1*8-1][qianhou]==100)&&(hongwai3==0||ditu[zuoyou][qianhou+qianhoubian1*8-1]==100))
		{
		  sihutong=1;
		}

	   if(hongwai1==1&&ditu[zuoyou+1-zuoyoubian*8][qianhou]==0)
		{

 				jilu();
 				houtui();
 				qianhou+=1;

 				jilu();
					panduan();
		    zuozhuan();
				zuoyou+=1;
		
						qianhou-=1;

			
				jilu();
				fangxiang-=1;
		}

		else if(hongwai3==1&&ditu[zuoyou][qianhou+qianhoubian1*8-1]==0)
		{
		    	jilu();
		  	qianjin();
				
				qianhou-=1;

		
				jilu();
		}

	else	 if(hongwai2==1&&ditu[zuoyou+zuoyoubian1*8-1][qianhou]==0)
		{

			 jilu();
			 houtui();
			 qianhou+=1;
			
			 jilu();
			 	panduan();

		  	youzhuan();	
		
				zuoyou-=1;
			 	
						 qianhou-=1;
		
	 jilu();
		fangxiang+=1;
		}
		
	}
else	 	if(fangxiang==4)
	{
		 	if((hongwai1==0||ditu[zuoyou][qianhou+qianhoubian1*8-1]==100)&&(hongwai2==0||ditu[zuoyou][qianhou+1-qianhoubian*8]==100)&&(hongwai3==0||ditu[zuoyou-+zuoyoubian1*81][qianhou]==100))
		{
		  sihutong=1;
		}
		 if(hongwai1==1&&ditu[zuoyou][qianhou+qianhoubian1*8-1]==0)
		{
		jilu();
			houtui();
			zuoyou+=1;
		
			jilu();
				panduan();
		  		zuozhuan();	
						
					qianhou-=1;
				
				
						zuoyou-=1;
				
		jilu();
					fangxiang-=1;
		}



		else if(hongwai3==1&&ditu[zuoyou+zuoyoubian1*8-1][qianhou]==0)
		{
		    		jilu();
		  qianjin();
			
			zuoyou-=1;
			

				jilu();
		}
		 	 else if(hongwai2==1&&ditu[zuoyou][qianhou+1-qianhoubian*8]==0)
		{
						 if(qianhou==7)
			{
			  houtui();
				youzhuan();
				tingzhi();
				while(1);
			}

					jilu();
					houtui();
					zuoyou+=1;
					
					jilu();
						panduan();
		  	 youzhuan();

				 qianhou+=1;
			
				 	zuoyou-=1;
				
		           jilu();
			   fangxiang+=1;
		}
		
	}

	}	 

	}

}

  • 9
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C51迷宫小车是一款基于C51单片机的智能小车,它具有自主避障、寻找路径等功能。CSND是CSDN社区的一个讨论与资源分享的频道。 C51迷宫小车是一种智能玩具,它内置了C51单片机,可以通过编写程序来控制小车的运动。小车上配备有红外避障传感器,可以感知周围的障碍物并做出适应性的避障动作。当遇到障碍物时,小车会通过测量障碍物的距离来决定是向左转、向右转还是停下来。这样,小车就能够自主地避开障碍物,完成自动导航过程。 同时,C51迷宫小车还具备寻找路径的功能。它通过在迷宫中行进,利用内置的数字编码系统来控制方向,并且可以通过传感器检测是否到达终点。在寻找路径的过程中,小车会根据迷宫的形状和难度自动调整速度和转弯角度,以确保能够稳定地通过迷宫并找到最短路径。 CSND是CSDN社区中一个专门讨论C51迷宫小车的频道。在CSND中,人们可以发表关于C51迷宫小车的问题、分享关于小车的技术经验和编程思路,以及获取与C51迷宫小车相关的资源和教程。通过参与CSND,人们可以更好地了解C51迷宫小车的使用和应用,提高对于智能小车的控制和编程能力。 总而言之,C51迷宫小车是一款功能丰富的智能玩具,具备自主避障和寻找路径的能力,而CSND是一个专门讨论C51迷宫小车的资源分享和讨论的社区频道。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值