智能小车电机驱动代码电路

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

驱动两路电机,可以实现电机的正转,反转,开始,停止,左拐,右拐,加速,减速。

代码

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit ma1=P2^5; //电机控制位

sbit mb1=P2^4;

sbit pwm1=P2^6;

sbit key1=P3^0; //减速

sbit key2=P3^1; //加速

sbit key3=P3^2; //前进后退

sbit key4=P3^3; //停止

sbit key5=P3^4; //左拐

sbit key6=P3^5; //右拐

sbit ma2=P2^2;

sbit mb2=P2^1;

sbit pwm2=P2^3; //占空比控制位

bit flag=0,flag0=0,flag1=0,flag2=0; //电机转动控制标志位。

uchar num=0;

void delay(uchar xms) //简单的延时

uint i;

uchar j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void turn_around() //电机转动占空比控制函数{

pwm1=0;

pwm2=0;

delay(num);

pwm1=1;

pwm2=1;

delay(100-num);

}

void Rotational_mode() //电机转动模式选择,正转,反转,停止,开启

{

if(flag0==0)

{

if(flag==0) //flag用来控制电机的正反转,flag=0时电机正转,否则电机反转。

{

ma1=1;

ma2=1;

mb1=0;

mb2=0;

}

else

{

ma1=0;

ma2=0;

mb1=1;

mb2=1;

}

}

else //电机停止控制

{

ma1=0;

ma2=0;

mb1=0;

mb2=0;

}

}

void turn_left() //电机左转,使两个电机的占空比不同,电机就会有不同的转动模式。

{

pwm1=0;

pwm2=1;

delay(60);

pwm1=1;

pwm2=0;

delay(40);

}

void turn_right() //电机右转{

pwm1=0;

pwm2=1;

delay(40);

pwm1=1;

pwm2=0;

delay(60);

}

void keyscan() //按键检测部分

{

if(key1==0)

{

delay(5);

if(key1==0) //key1按下后,num++,电机减速。

{

while(!key1);

num+=20;

if(num>100)

num=100;

flag1=0;

flag2=0;

}

}

if(key2==0)

{

delay(5);

if(key2==0) //key2按下后,num--,电机加速。

while(!key2);

num-=20;

if(num<0)

num=0;

flag1=0;

flag2=0;

}

}

if(key3==0)

{

delay(5);

if(key3==0) //key3按下后,flag的值发生改变,从而,改变电机的转动放向。

{

while(!key3);

flag=~flag;

flag1=0;

flag2=0;

}

if(key4==0)

{

delay(5);

if(key4==0) //key4按下后电机停止工作,再次按下后电机开始工作。

{

while(!key4);

flag0=~flag0;

flag1=0;

flag2=0;

}

}

if(key5==0)

{

delay(5); //key5按下后电机左转。

if(key5==0)

{

while(!key5);

flag1=1; //flag1=1,按左转模式转动。

flag2=0;

}

}

if(key6==0)

{

delay(5); //key6按下后电机右转。

if(key6==0)

{

while(!key6);

flag2=1;

flag1=0; //flag2=1,按右转模式转动。然后每次按按完key5和key6后,

//要保证flag1,flag2都复位为0,因此每次有键按下后,

// 都有flag1,flag2为0。

}

相关文档
最新文档