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

📄 car02.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 jichu=P1^4;  //按键切换功能    接地 直走  接空壁障 或停车  
sbit p15=P1^5;
sbit p27=P2^7;
sbit p32=P3^2;
sbit p26=P2^6;//fmq	    

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;  	
unsigned int t;
//**********************************************************************************************************//
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 delay100us()
{
	unsigned char j;	
	for(j=0;j<33;j++)
	   ;
}void delayus(unsigned int n)//
{
   	unsigned int i;
	for(i=0;i<n;i++)
	delay100us();
}*/

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(10);stop();delay(20);	}
void go_back_slow(void)		{	go_back();delay(10);stop();delay(25);	}
void turn_left_go(void) 	{	turn_cleft();delay(3);turn_left();delay(7);	}
void turn_left_go_low(void)	{turn_cleft();delay(4);stop();delay(1);turn_left();delay(5);stop();delay(1);}
void turn_right_go(void) 	{	turn_cright();delay(4);turn_right();delay(7);}
void turn_left_low(void) 	{	turn_left_go();delay(14);stop();delay(8);	}
void turn_left_go1(void) 	{	turn_cleft();delay(3);stop();delay(6);turn_left();delay(5);	}

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 go_along_left(void) 	{	go_along();delay(10);turn_left();delay(1);	}
//void turn_right_low(void) 	{	turn_right_go();delay(14);stop();delay(8);  }
//********************************************************************************************************//
//********************************************************************************************************//
void xunji_bizhang_normal(void)//避障走法正常循迹		 
{
		if(left==0&&right==0)
   	 	{
		 go_along_right();
  	  	} 
		if(left==0&&right==1)	     
    	{
	 	turn_left_go();
   		 }
   		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();}	
		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(40);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(40);stop();delay(60);}stop();delay(500);
		go_along();delay(500);
		stop();delay(500);
		turn_left();delay(110);			
		stop();delay(1000);
		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);
   	}
}
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++;
//  if(flag_stop==1)	{stop();delay(10000);flag_stop=0;flag_chaoche=0;}
}
//*********************************************************************************************************//
void zhuanwan4(void)//4步拟合曲线	  
{
	go_along();delay(260);turn_left_low();delay(150);		
	go_along();delay(200);stop();delay(50);turn_left_go();delay(200);		
	go_along();delay(130);stop();delay(50);turn_left_go();delay(170);
	go_along();delay(100);stop();delay(50);turn_left_go();delay(150);
	while((right!=1)&&(left!=1)){go_along();}
	stop();delay(50);go_back();delay(50);
}
void  zhuanwan3(void)//3步拟合曲线	    
{
	go_along();delay(300);turn_left_low();delay(150);		
	go_along();delay(200);stop();delay(50);turn_left_go();delay(200);		
	go_along();delay(130);stop();delay(50);turn_left_go();delay(200);
	while(right!=1){go_along();}stop();delay(50);go_back();delay(50);turn_left_go();delay(70);
}
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
{
	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;p27=0;}
}
void main()
{
	TMOD=0x21;    	
	SCON=0x50;	//8 bit	
	TL1=0xfd;	//9600	
 	TH1=0xfd;
	TR1=1;
	ES=1;
	EA=1;//
	flag=0;

	while(flag_start==0)
	{
	t++;delay(100);
	if(t==65)      // 启动保护  定时 6S 自启动 
	  {	t=0;
	    flag_start=1;
	  }
	}
	flag_start=0;

	while(1)
	{	
		if(flag_change==1){xunji_stop();	}
		if(flag_change==0){xunji_bizhang();	}
		switch(flag)
		{
		case 0:break;		 
		case 1:stop();delay(4500);					   //开始停车时间 3S		   
				if(flag_change==1){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==1){	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==0){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 + -