基于51单片机的循迹小车

#include<reg52.h>


sbit IN1 = P3^0;   //定义串口
sbit IN2 = P3^1;   //定义串口
sbit ENA = P3^2;   //定义串口
sbit IN3 = P3^3;   //定义串口
sbit IN4 = P3^4;   //定义串口
sbit ENB = P3^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 intit()
{
EA = 1;
TMOD = 0x01;
TH0=(65535-100)/256; //晶振频率为12M
TL0=(65535-100)%256;
ET0 = 1;
TR0 = 1;
}


void turn_left()
{
zkb1 = 30;
zkb2 = 0;
}


void turn_right()
{
zkb1 = 0;
zkb2 = 30;
}


void turn_line()
{
zkb1 = 15;
zkb2 = 15;
}


void time() interrupt 1
{
TR0 = 0; //关闭定时器
TH0 = (65535-100)/256;
TL0 = (65535-100)%256;
TR0 = 1; //打开定时器


if(t < zkb1)   //模拟pwm小于时车辆转动
{
ENA = 1;
}
else
{
ENA = 0;
}
if(t < zkb2)
{
ENB = 1;
}
else
{
ENB = 0;
}
if(t >= 50)    //大于50时归零
{
t = 0;
}
}


void f()
{
unsigned char flag;
if(left == 1 && right == 1)
flag = 1;
else if(left == 1 && right == 0)
flag = 2;
else if(left == 0 && right == 1)
flag = 3;


switch(flag)
{
case 1: turn_line(); 
break;
case 2: turn_left();
break;
case 3: turn_right();
break;
default:turn_line();
break;
}


}


void main()
{
intit();
IN1 = 0;
IN2 = 1;
    IN3 = 0;
    IN4 = 1;
while(1)
{
f();
}
}

猜你喜欢

转载自blog.csdn.net/huluwadeyeye/article/details/80488593