#include
#define sense P1 /*宏定义光电传感器端口*/
#define input1 P0 /*左电机的IN1,IN2定义在P0口*/
#define input2 P2 /*右电机的IN3,IN4及ENA,ENB定义在P2口*/
//宏定义电机的具体端口
sbit MOTO1_INT1=P0^0;
sbit MOTO1_INT2=P0^1;
sbit MOTO1_ENA=P2^0;
sbit MOTO2_INT3=P2^5;
sbit MOTO2_INT4=P2^4;
sbit MOTO2_ENB=P2^2;
//宏定义传感器的具体端口
sbit sense_L=P1^3;
sbit sense_R=P1^6;
//宏定义金属传感器端口
sbit METAL=P1^1;
//宏定义DELAY函数中的一些变量
int Dtime1=20000;
int Dtime2=2000;
int i=0;
unsigned char SIGNAL(void); //传感器信号分析函数
void DELAY(void); //延时函数
void main()
{
int a;
MOTO1_INT1=1; //使车开始时运动
MOTO1_INT2=0;
MOTO1_ENA=1;
MOTO2_INT3=1;
MOTO2_INT4=0;
MOTO2_ENB=1;
while(1)
{
if(METAL==1) //有金属时车停止
DELAY();
else
{
a=SIGNAL();
switch(a)
{
case 1:input2=0x25;break; //前进
case 2:input2=0x24;break; //左转
case 3:input2=0x21;break; //右转
default:break;
}
}
}
}
void DELAY() //延时函数
{
input2=0x20; //使驱动芯片的两个使能端为0, 使两个电机停转
for(i=0;i
input2=0x25; //使驱动芯片的两个使能端为1,使两个电机重新转
for(i=0;i
}
unsigned char SIGNAL()
{
unsigned char Re;
Re=sense&0x28;
if(Re==40)return 1;//前进
else if(Re==8)return 2;//左转
else if(Re==32)return 3;//右转
else return 1;//有错时前进
}