#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();
}
}
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();
}
}