#include <reg51.h>
sbit motor1_1=P2^0;
sbit motor1_2=P2^1;
sbit motor2_1=P2^2;
sbit motor2_2=P2^3;
sbit sensor1=P1^0;
sbit sensor2=P1^1;
sbit sensor3=P1^2;
sbit sensor4=P1^3;
sbit sensor5=P1^4;
void delay1ms(int);
//=================================
main()
{motor1_1=1;
motor1_2=0;
motor2_1=1;
motor2_2=0;
sensor1=1;
sensor2=1;
sensor3=1;
while(1)
{	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==0)        //右轉
      {motor1_1=1;      
       motor1_2=0;
       motor2_1=1;
       motor2_2=0;
       delay1ms(800);
       motor1_1=1;      
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;
       delay1ms(800);
	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
	   motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);}  
	   } 
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==0)        //右轉
      {motor1_1=1;      
       motor1_2=0;
       motor2_1=1;
       motor2_2=0;
       delay1ms(800);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;
       delay1ms(800);
	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(70);}
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	   }
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==0)        //右轉
      {motor1_1=1;      
       motor1_2=0;
       motor2_1=1;
       motor2_2=0;
       delay1ms(800);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;
       delay1ms(800);
	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(70);}
	 if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);}  
	   } 
	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	 if(sensor1==1 && sensor2==1 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==0 && sensor2==1 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==1 && sensor2==0 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	 if(sensor1==0 && sensor2==0 && sensor3==0 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
     if(sensor1==1 && sensor2==0 && sensor3==1 && sensor4==0 && sensor5==0)        //值走
      {motor1_1=1;
       motor1_2=0;
       motor2_1=1;
       motor2_2=0;
       delay1ms(10);} 
        if(sensor1==0 && sensor2==0 && sensor3==1 && sensor4==0 && sensor5==0)        //值走
      {motor1_1=1;
       motor1_2=0;
       motor2_1=1;
       motor2_2=0;
       delay1ms(10);} 
	if(sensor1==1 && sensor2==0 && sensor3==1 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
	if(sensor1==0 && sensor2==0 && sensor3==1 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
 	if(sensor1==1 && sensor2==0 && sensor3==1 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);}  
	if(sensor1==0 && sensor2==0 && sensor3==1 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);}  
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
      if(sensor1==0 && sensor2==1 && sensor3==1 && sensor4==0 && sensor5==0)        //左轉
      {motor1_1=1;      
       motor1_2=0;
       motor2_1=1;
       motor2_2=0;
       delay1ms(800);
       motor1_1=0;      
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;
       delay1ms(1000);
     if(sensor1==0 && sensor2==1 && sensor3==1 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
    if(sensor1==0 && sensor2==1 && sensor3==1 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
	   }
    if(sensor1==0 && sensor2==1 && sensor3==1 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
     if(sensor1==0 && sensor2==1 && sensor3==1 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
     if(sensor1==0 && sensor2==0 && sensor3==0)         //走出迷宮
      {motor1_1=1;
       motor1_2=0;
       motor2_1=1;
       motor2_2=0;       
       delay1ms(10);}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
     if(sensor1==1 && sensor2==1 && sensor3==1 && sensor4==0 && sensor5==0)        //迴轉
      {motor1_1=0;      
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;
       delay1ms(1000);
       motor1_1=1;      
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;
       delay1ms(1700);
	 if(sensor1==1 && sensor2==1 && sensor3==1 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
     if(sensor1==1 && sensor2==1 && sensor3==1 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 
       }
	 if(sensor1==1 && sensor2==1 && sensor3==1 && sensor4==0 && sensor5==1)        //右偏移向左修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=0;
       motor1_2=1;
       motor2_1=1;
       motor2_2=0;      
       delay1ms(80);}
     if(sensor1==1 && sensor2==1 && sensor3==1 && sensor4==1 && sensor5==0)        //左偏移向右修正
      {motor1_1=0;
       motor1_2=0;
       motor2_1=0;
       motor2_2=0;      
       delay1ms(1000);
       motor1_1=1;
       motor1_2=0;
       motor2_1=0;
       motor2_2=1;      
       delay1ms(80);} 	   
}}
//=================================
void delay1ms(int x)
{    int i,j;
for (i=0;i<x;i++)
      for(j=0;j<120;j++);
}