把前进,后退,左转,右转封装起来,直接调用函数完成
#include<AT89X51.H>
//定义小车驱动模块输入IO口
sbit IN1=P1^0; // 左1电机 高电平前进
sbit IN2=P1^1; // 左1电机 高电平后退 可以改接成PWM输出
sbit IN3=P1^2; // 左2电机 高电平前进
sbit IN4=P1^3; // 左2电机 高电平后退 可以改接成PWM输出
sbit IN5=P1^4; // 右1电机 高电平前进
sbit IN6=P1^5; // 右1电机 高电平后退 可以改接成PWM输出
sbit IN7=P1^6; // 右2电机 高电平前进
sbit IN8=P1^7; // 右2电机 高电平后退 可以改接成PWM输出
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
//前进函数
void run(void)
{
IN1=1; //右1电机 高电平前进
IN2=0; //右1电机 高电平后退
IN3=0; //右2电机 高电平后退
IN4=1; //右2电机 高电平前进
IN5=1; //左1电机 高电平前进
IN6=0; //左1电机 高电平后退
IN7=0; //左2电机 高电平后退
IN8=1; //左2电机 高电平前进
}
//后退函数
void backrun(void)
{
IN1=0; //右1电机 高电平前进
IN2=1; //右1电机 高电平后退
IN3=1; //右2电机 高电平后退
IN4=0; //右2电机 高电平前进
IN5=0; //左1电机 高电平前进
IN6=1; //左1电机 高电平后退
IN7=1; //左2电机 高电平后退
IN8=0; //左2电机 高电平前进
}
//小车左转函数 小车前面看 左电机后退 右电前进可以实现
void leftrun(void)
{
IN1=1; //右1电机 高电平前进
IN2=0; //右1电机 高电平后退
IN3=0; //右2电机 高电平后退
IN4=1; //右2电机 高电平前进
IN5=0; //左1电机 高电平前进
IN6=1; //左1电机 高电平后退
IN7=1; //左2电机 高电平后退
IN8=0; //左2电机 高电平前进
}
//小车右转函数 小车前面看 左电机前进 右电后退可以实现
void rightrun(void)
{
IN1=0; //右1电机 高电平前进
IN2=1; //右1电机 高电平后退
IN3=1; //右2电机 高电平后退
IN4=0; //右2电机 高电平前进
IN5=1; //左1电机 高电平前进
IN6=0; //左1电机 高电平后退
IN7=0; //左2电机 高电平后退
IN8=1; //左2电机 高电平前进
}
//电机停止转动函数 电机控制线全部为低电平0时电机停止转动
void stop(void)
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
IN5=0;
IN6=0;
IN7=0;
IN8=0;
//P1=0X00;
}
void main(void)
{
while(1)
{
run(); //调用后退函数
delay(200);
stop();//调用小车停止函数
delay(200);
leftrun(); //调用右转函数
delay(50);
stop();//调用小车停止函数
delay(200);
}
}