基于51单片机的红外巡迹小车

在做巡迹小车的时候,需要用到一下几个方面的:

  首先就是先让小车可以调速的跑起来,就是用L298N来驱动直流电机,再用pwm技术实现控速,完成第一步。L298N的连接,其中有两个使能位ENA 和ENB,开始是由跳线连接的,但是没法实现控速,如果想要实现控速,就用拔掉跳线,用接入生成pwm的两个引脚。

  其次是四路巡迹模块的使用,该模块的传感器可以检测黑色与白色,有不同的返回值,于是就可以实现沿着一条黑色的线前进或是转弯,不过转弯的时候有时候反应速度太慢,可以用一边前进一边后退的方式实现转弯,速度就更快。

 一下是用51单片机的代码:

#include 

sbit IN1 = P1^0; 
sbit IN2 = P1^1;
sbit ENA = P1^2;
sbit IN3 = P1^3;
sbit IN4 = P1^4;
sbit ENB = P1^5;

sbit left = P0^0;
sbit right = P0^2;
sbit mid = P0^1;


unsigned char zkb1 = 0;
unsigned char zkb2 = 0;
unsigned char t = 0;

void init()
{
	EA = 1;
	TMOD |= 0x01;
	TH0 =(65536 - 100) / 256;
	TL0 = (65536 - 100)% 256;	
	ET0 = 1;
	TR0 = 1;
}

void time() interrupt 1
{

	TH0 = (65536 - 100) / 256;
	TL0 = (65536 - 100) % 256;
		
	if(t < zkb1)
	{
		ENA = 1;
	}
	else 
	{
		ENA = 0;
	}
	if(t < zkb2)
	{
		ENB =1;
	}
	else 
	{
		ENB = 0;
	}
	++t;
	if(t >= 50)
	{
		t = 0;
	}
}

void turn_left1()
{
	zkb1 = 25;
	zkb2 = 0;
}


void turn_right1()
{
	zkb1 = 0;
	zkb2 = 25;
}


void qianjin()
{
	zkb1 =14;
	zkb2 =14;
}
void xunji()
{
	unsigned char flag;
	     if((right == 0)&&(left == 0))//直行
			{
			    	flag = 0;
			}
			if(((right == 1)&&(left == 0)))
			{
					flag = 2;
			}
			if(((right == 0)&&(left == 1)))
			{
					flag = 1;
			}

	switch(flag)
	{
		case 0:qianjin();break;
		
		case 1:turn_left1();break;
		
		case 2:turn_right1();break;
		
		default:qianjin();break;
	}
  }
void main()
{
	init();
	IN1 = 0;
	IN2 = 1;
    IN3 = 0;
    IN4 = 1;
	while(1)
	{
			
			xunji();
		
	}
}


你可能感兴趣的:(430/51单片机)