驱动模块是L298N,开源智能小车电机
单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint PWM_R=0,PWM_L=0,t=0;
sbit inputL=P3^0;
sbit inputC=P3^1;
sbit inputR=P3^2;
sbit PWMA=P1^0;
sbit AIN2=P1^1;
sbit AIN1=P1^2;
sbit STBY=P1^3;
sbit BIN1=P1^4;
sbit BIN2=P1^5;
sbit PWMB=P1^6;
void stop(void);
void Timer0Init(void);
void scan(void);
void Timer0(void);
void main()
{
Timer0Init();
EA=1;
while(1)
{
scan();
Timer0();
}
}
void stop(void)
{
AIN1=0;
AIN2=0;
BIN1=0;
BIN2=0;
}
void Timer0Init()
{
TMOD|=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
ET0=1;
TR0=1;
}
void Timer0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
if(t<PWM_L)
{ AIN1=0;
AIN2=1;}
else
{ AIN1=0;
AIN2=0; }
if(t<PWM_R)
{ BIN1=0;
BIN2=1; }
else
{ BIN1=0;
BIN2=0; }
t++;
if(t>=100)
t=0;
}
void scan()
{
if((inputL==0)&&(inputC==0)&&(inputR==0))//停止移动
{
PWM_R=0;
PWM_L=0;
stop();
}
else if((inputL==0)&&(inputC==0)&&(inputR==1)) //向左移动(慢)
{
PWM_R=70;
PWM_L=0;
}
else if((inputL==1)&&(inputC==0)&&(inputR==0)) //向右移动(慢)
{
PWM_R=0;
PWM_L=70;
}
else if((inputL==1)&&(inputC==1)&&(inputR==0)) //向右移动(快)
{
PWM_R=0;
PWM_L=85;
}
else if((inputL==1)&&(inputC==0)&&(inputR==1)) // 直行
{
PWM_R=75;
PWM_L=75;
}
else if((inputL==0)&&(inputC==1)&&(inputR==1)) //向左移动(快)
{
PWM_R=85;
PWM_L=0;
}
else if((inputL==1)&&(inputC==1)&&(inputR==1)) //向右移动(慢)
{
PWM_R=75;
PWM_L=35;
}
}
|