#include
typedef unsigned int u16;
typedef unsigned char u8;
sbit ENB = P1^7; //左电机使能
sbit IN1 = P1^6; //为0左轮反转
sbit IN2 = P1^5; //为0左轮正转
sbit IN3 = P1^3; //为0右轮反转
sbit IN4 = P1^4; //为0右轮正转
sbit ENA = P1^2; //右点机使能
sbit BEEP=P1^0;
//left1,left2,right1,right2
//P22 P23 P24 P25
sbit MidLeft=P2^0;
sbit MidRight=P2^1;
sbit left1 = P2^2;
sbit left2 = P2^3;
sbit right1 = P2^4;
sbit right2 = P2^5;
u8 PWMCnt1 = 0;
u8 PWMCnt2 = 0;
u8 cntPWM1 = 0;
u8 cntPWM2 = 0;
u8 timeflag=0;
u8 turn90Flag=0;
//定时器0产生PWM,并且测速,测位移,定时器1,产生波特率
void Timer0Init();//定时器0产生PWM
void XunJi();
void TurnRight1() ; //右转,左轮速度快,速度差这里设置70-55
void TurnRight2() ; //右转
void TurnLeft1(); //左转
void TurnLeft2(); //左转
void Backward(); //后退
void Stop(); //停止
void Forward();
void delayms(unsigned int tms)
{
unsigned int i,j;
for(i=0;i<100;i++)
{
for(j=0;j= 200)//50us*200=10 000us=10ms
{
PWMCnt1 = 0;
}
if(PWMCnt1 <= cntPWM1)
{
ENA = 1;
}
else
{
ENA = 0;
}
if(PWMCnt2 >= 200)
{
PWMCnt2 = 0;
}
if(PWMCnt2 <= cntPWM2)
{
ENB = 1;
}
else
{
ENB = 0;
}
// TH0 = (65536 - 50)/256;//50us
// TL0 = (65536 - 50)%256;
TH0 = 0xFF;//等价于上面的两行,减小计算量
TL0 = 0xA3;
}