#include <REGX52.H>
sbit PWMA=P2^5;
sbit AIN1=P2^4;
sbit AIN2=P2^3;
sbit STBY1=P2^6;
sbit PWMB=P2^0;
sbit BIN3=P2^2;
sbit BIN4=P2^1;
sbit PWMC=P1^5;
sbit AIN5=P1^3;
sbit AIN6=P1^4;
sbit STBY2=P1^6;
sbit PWMD=P1^0;
sbit BIN7=P1^1;
sbit BIN8=P1^2;
sbit R1=P0^0;
sbit M=P0^2;
sbit L1=P0^3;
unsigned char counter,compare,X;
void PWM_ON()
{
PWMA=1;
PWMB=1;
PWMC=1;
PWMD=1;
}
void PWM_OFF()
{
PWMA=0;
PWMB=0;
PWMC=0;
PWMD=0;
}
void Motor_Forward()//前进
{
AIN1=1;
AIN2=0;//右前轮
BIN3=1;
BIN4=0;//右后轮
AIN5=1;
AIN6=0;//左前轮
BIN7=1;
BIN8=0;//左后轮
}
void Motor_Back()//后退
{
AIN1=1;
AIN2=0;//右前轮
BIN3=1;
BIN4=0;//右后轮
AIN5=1;
AIN6=0;//左前轮
BIN7=1;
BIN8=0;//左后轮
}
void Motor_start()//启动
{
STBY1=1;//右两轮
STBY2=1;//后两轮
}
void Motor_Stop()//停止
{
STBY1=0;//右两轮
STBY2=0;//后两轮
}
void Left_Motor_Forward()//左转
{
AIN1=1;
AIN2=0;//右前轮
BIN3=1;
BIN4=0;//右后轮
AIN5=1;
AIN6=0;//左前轮
BIN7=1;
BIN8=0;//左后轮
}
void Right_Motor_Forward()//右转
{
AIN1=1;
AIN2=0;//右前轮
BIN3=1;
BIN4=0;//右后轮
AIN5=1;
AIN6=0;//左前轮
BIN7=1;
BIN8=0;//左后轮
}
void Speed(char X)
{
switch (X)
{ case 1: compare=1;break;
case 2: compare=2;break;
case 3: compare=3;break;
case 4: compare=4;break;
case 5: compare=5;break;
case 6: compare=6;break;
case 7: compare=7;break;
case 8: compare=8;break;
case 9: compare=9;break;
}
}
void Timer0_Init() //100微秒@12MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TH0 = (65536-100)/256; //设置定时初始值
TL0 = (65536-100)%256; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
EA = 1;
PT0 = 0;
}
void main()
{
if((R1==0)&&(M==1)&&(L1==0))
{
Speed(2);
Motor_Forward();//前进
}
// if((R1==1)&&(R2==1)&&(M==1)&&(L1==1)&&(L2==1))
// {
// Speed(2);
// Left_Motor_Forward();//左转
// }
// if((R1==1)&&(R2==1)&&(M==1)&&(L1==1)&&(L2==1))
// {
// Speed(2);
// Right_Motor_Forward();
// }
}
void Timer0_Routine() interrupt 1
{
TH0 = (65536-100)/256; //设置定时初始值
TL0 = (65536-100)%256; //设置定时初始值
counter++;
if(counter==10)
{
counter=0;
}
if(counter<=compare)
{
PWM_ON();
}
if(counter>compare && counter<=10)
{
PWM_OFF();
}
}