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

📄 car01.c

📁 启动定时保护无线加按键设定
💻 C
字号:
#include"reg51.h"

sbit p20=P2^0;sbit p21=P2^1;sbit p22=P2^2;sbit p23=P2^3;
//1车P20=1A,P21=1B,P23=2A,P22=2B,2车p20=1A,P21=1B,P22=2A,P23=2B;

sbit left=P3^6;//左寻								    
sbit right=P3^7;//右寻								   
sbit zhong=P3^5;//黑线探测p35;
sbit qian=P1^6;//前避障							   
sbit you=P1^7;//右避障  
sbit p15=P1^5;
sbit p27=P2^7;
sbit p32=P3^2;
sbit p26=P2^6;//fmq	
sbit jichu=P1^4;	//按键切换功能    接地 直走  接空壁障 或停车  
	  
unsigned char flag_left_or_right,flag_along_right,flag_chaoche,flag_stop,flag_bizhang,flag_xunji_zhuan;//1--left;2--right;
bit flag_change=0,flag_start=0,flag_ok=0;
unsigned int flag=0,timer=0;
unsigned int n;
//****************************************************************************************************************//

void delay1ms()
{
   	unsigned char i,j;	
	for(i=0;i<10;i++)
	for(j=0;j<33;j++)
	   ;		 
} 
void delay(unsigned int n)//
{
   	unsigned int i;
	for(i=0;i<n;i++)
	delay1ms();
}

void send232byte(unsigned char bytebuf)
{
 	SBUF=bytebuf;
	while(!TI);	
    TI=0;   	
}
//****************************************************************************************************************//
//****************************************************************************************************************//
void turn_left(void)	{	p20=0;p21=0;p22=1;p23=0;	}//左转			   
void turn_right(void)	{	p20=1;p21=0;p22=0;p23=0;	}//右转			   
void turn_cleft(void)	{	p20=0;p21=1;p22=1;p23=0;	}//左原地转			 
void turn_cright(void)	{	p20=1;p21=0;p22=0;p23=1;	}//右原地转		    
void go_along(void)		{	p20=1;p21=0;p22=1;p23=0;	}//直走				 
void go_back(void)		{	p20=0;p21=1;p22=0;p23=1;	}//后					 
void stop(void)			{	p20=0;p21=0;p22=0;p23=0;	}//停止					   
void go_along_right(void) 	{	go_along();delay(14);turn_right();delay(2);	}//偏右直走		  
void go_along_slow_r(void)	{	go_along();delay(9);stop();delay(20);	}//低直走(避障用到)		 
void go_back_slow(void)		{	go_back();delay(10);stop();delay(25);	}//低速后(避障用到)		    
void go_along_left(void) 	{	go_along();delay(10);turn_left();delay(1);	}
void turn_left_go(void) 	{	turn_cleft();delay(1);turn_left();delay(7);	}//	  
void turn_left_go1(void) 	{	turn_cleft();delay(3);stop();delay(6);turn_left();delay(5);	}
void turn_left_go_low(void)	{turn_cleft();delay(4);stop();delay(8);turn_left();delay(5);stop();delay(1);}

void turn_left_tan(void)	{turn_cleft();delay(3);turn_left();delay(10);stop();delay(2);}//低弹	  

void turn_right_go(void) 	{	turn_cright();delay(4);turn_right();delay(7);}//


void go_along_right_lowlow(void){go_along();delay(3);stop();delay(9);turn_right();delay(2);stop();delay(9);}
void turn_right_go_verylow(void){turn_cright();delay(2);stop();delay(9);turn_right();delay(7);stop();delay(9);}
void turn_left_verylow(void){turn_left();delay(6);stop();delay(20);}

void turn_left_low(void) 	{	turn_left_go();delay(10);stop();delay(8);	}
//****************************************************************************************************************//

void zhuanwan4(void)//4步拟合曲线	    
{									   
	go_along();delay(240);turn_left_low();delay(85);stop();delay(100);		
	go_along();delay(240);stop();delay(50);turn_left_go();delay(160);		
	go_along();delay(130);stop();delay(50);turn_left_go();delay(160);
	go_along();delay(100);stop();delay(50);turn_left_go();delay(100);
	while((right!=1)&&(left!=1)){go_along();}stop();delay(50);go_back();delay(50);turn_left_go();delay(10);
}
void  zhuanwan3(void)//3步拟合曲线	    
{
	go_along();delay(280);turn_left_go();delay(70);stop();delay(60);		
	go_along();delay(200);stop();delay(50);turn_left_go();delay(200);		
	go_along();delay(130);stop();delay(50);turn_left_go();delay(180);
	while(right!=1){go_along();}stop();delay(50);go_back();delay(50);turn_left_go();delay(10);
}
void xunji_bizhang_normal(void)//避障走法正常循迹		    
{																  
		if(left==0&&right==0)
   	 	{
		 go_along_right();
  	  	} 
		if(left==0&&right==1)	     
    	{
	     turn_left_go1();
   		}
   		if(left==1&&right==0)	     
   		{
	 	turn_right_go();
    	}
   		if(left==1&&right==1)	     
    	{
		 go_along_right();
    	}
}
void xunji_bizhang_low_speed(void)//低速避障循迹			   
{
		if(left==0&&right==0)
   	 	{
		 go_along_right();delay(5);stop();delay(95);
  	  	} 
		if(left==0&&right==1)	     
    	{
	 	turn_left_go_low();
   		 }
   		if(left==1&&right==0)	     
   		 {
	 	turn_right_go();
    	}
   		if(left==1&&right==1)	     
    	{
		 go_along_right();delay(5);stop();delay(95);
    	}
}
void xunji_bizhang_chaoche_over(void)//超车结束后特殊循迹
{
		if(left==0&&right==1)	     
    	{
	 	turn_left_go_low();
   		 }
   		if(right==0)	     
   		 {
	 	go_along();delay(15);stop();delay(85);
    	}
   		if(left==1&&right==1)	     
    	{
		 go_along();delay(15);stop();delay(85);
    	}
}
void chaoche_bizhang(void)//避障动作		  
{
		flag_bizhang=1;
		while(qian!=1)	{turn_left();delay(27);stop();delay(30);}	
		stop();delay(500);
		go_along();delay(600);
		stop();delay(500);
		while(you!=1) //如果有再直走;
		{go_along_slow_r();}	stop();delay(500);
		while(you==1)//转到有	  
		{turn_right();delay(39);stop();delay(60);}stop();delay(500);
		while(you!=1)//转到没有		  
		{turn_right();delay(40);stop();delay(60);}stop();delay(500);
		while(you==1)//走到有
		{go_along_slow_r();}	stop();delay(500);
		while(you!=1)//走到没有		    
		{go_along_slow_r();}	stop();delay(500);
		while(you==1)//退到有	  
		{go_back_slow();}	stop();delay(500);
		while(you!=1)//转到没有	
		{turn_right();delay(30);stop();delay(70);}stop();delay(500);
		go_along();delay(500);
		stop();delay(500);
		turn_left();delay(80);			
		stop();delay(500);
		flag_xunji_zhuan=1;
		flag_bizhang=0;
}
void xunji_bizhang(void)//避障走法循迹函数		  
{
  if(zhong==0)
  {	
	  if(jichu==0)
	  {
	  	xunji_bizhang_normal();
	  }

	  if(jichu==1)
	  {
   		 if(flag_chaoche==0)
   		 {	
			xunji_bizhang_normal();
   		 }
  		 if(flag_chaoche==1)
   		  {
		 	if(flag_xunji_zhuan==0)
		   	{
				xunji_bizhang_low_speed();
				if(qian==0)
				{
					chaoche_bizhang();
				}
		  	}
		 	  if(flag_xunji_zhuan==1)
		  	 {
				xunji_bizhang_chaoche_over();
		  	 }
 	  	  }
	  }
  }
  if(zhong==1) flag++;
  if(flag_stop==1)	
  {
  	stop();delay(5000);flag_stop=0;flag_chaoche=0;
  }
}
//***********************************************************************************************************//
//***********************************************************************************************************//
void xunji_stop_normal(void)//停车走法循迹	    
{
	if(left==0&&right==0)
   	{
	 go_along_right();
  	} 
	if(left==0&&right==1)	     
    {
	 turn_left_go_low();
   	}
   	if(left==1&&right==0)	     
   	{
	 turn_right_go();
    }
   	if(left==1&&right==1)	     
    {
	 go_along_right();
    }
}
void xunji_stop_low_speed(void)//停车走法低速循迹		  
{
	if(left==0&&right==0)
   	{
	 go_along_right();delay(5);stop();delay(95);
  	} 
	if(left==0&&right==1)	     
    {
	 turn_left_go_low();
   	}
   	if(left==1&&right==0)	     
   	{
 	 turn_right_go();
    }
   	if(left==1&&right==1)	     
    {
	 go_along_right();delay(5);stop();delay(95);
   	}
}
void xunji_very_low_speed(void)//停车区超低速走		     
{
	if(left==0&&right==0)
   	{
	 go_along_right_lowlow();delay(2);stop();delay(98);
  	} 
	if(left==0&&right==1)	     
    {
	 turn_left_verylow();
   	}
   	if(left==1&&right==0)	     
   	{
 	 turn_right_go_verylow();
    }
   	if(left==1&&right==1)	     
    {
	 go_along_right_lowlow();delay(2);stop();delay(98);
   	}
//	if(flag_ok==1){stop();delay(5000);flag_chaoche=0;flag_stop=0;}
}
void xunji_stop(void)//停车走法循迹函数				  
{
  if(zhong==0)
  {	
    if(jichu==0)
	{
	  xunji_stop_normal();
	}

	if(jichu==1)
	{
       if(flag_chaoche==0)
   	   {
		xunji_stop_normal();
     	}
    	if((flag_chaoche==1)&&(flag_stop!=1))
   	   {
		xunji_stop_low_speed();
     	}
      if((flag_chaoche==1)&&(flag_stop==1))
   	    {
		xunji_very_low_speed();
  	    } 
	}
  }
  if(zhong==1) flag++;
}
//***********************************************************************************************************//

void TIMER0_ROUTINE(void) interrupt 1
{
	timer++;
	TH0=0x4c; //周期50MS
	TL0=0x00;
	if(timer==180){timer=0;TR0=0;ET0=0;flag_stop=1;}
}
void ri_inter() interrupt 4 using 1
{
	unsigned char key;
	RI=0;
	key=SBUF;
	if(key==3)	{flag_ok=1;flag_chaoche=0;flag_stop=0;}
	if(key==2)	{flag_start=1;}
}
void main()
{
	TMOD=0x21;    	
	SCON=0x50;	//8 bit	
	TL1=0xfd;	//9600	
 	TH1=0xfd;
	TR1=1;
	ES=1;
	EA=1;//		  
	flag=0;
	while(1)
	{	
		if(flag_change==0){xunji_stop();	}				   //停车标志 等待 超车函数 
		if(flag_change==1){xunji_bizhang();	}				   // 在超车区壁障超车 
		switch(flag)
		{
		case 0:break;		 
		case 1:stop();delay(2000);	//开始停车时间 
				if(flag_change==0){send232byte(2);delay(50);}
				go_along_right();delay(50);flag++;break;//1
		case 2:break;
		case 3:stop();delay(50);zhuanwan4();flag++;break;//2
		case 4:break;
		case 5:stop();delay(50);zhuanwan4();flag++;break;//3
		case 6:break;
		case 7:go_along();delay(100);zhuanwan3();flag++;break;//4
		case 8:while(right!=1){go_along();}stop();delay(50);go_back();delay(40);turn_left();delay(40);
				flag_chaoche=1;
				if(flag_change==0){	TH0=0x4c;TL0=0x00;TR0=1;ET0=1;}
				flag++;break;//
		case 9:break;
		case 10:flag_chaoche=0;flag_xunji_zhuan=0;stop();delay(50);zhuanwan3();flag++;break;//5
		case 11:break;
		case 12:stop();delay(1000);if(flag_change==1){send232byte(3);delay(50);}flag=2;flag_change=!flag_change;break;//6
		default:while(1){stop();delay(50);}break;
		}

	}
}

⌨️ 快捷键说明

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