一、LN298驱动电机接线图
二、按键接线图
三、源码
/*****************************************************
***通过一个按键实现小车前进、后退、左转、右转的切换***
*******************2024.6.28***************************/
#include <reg52.h>
sbit IN1=P1^2;
sbit IN2=P1^3;//IN1,INT2分别为10时左两轮前进,01左两轮后退
sbit IN3=P1^4;
sbit IN4=P1^5;//IN3,INT4分别为10时右两轮前进,01右两轮后退
sbit ENA=P1^6;//左两轮使能
sbit ENB=P1^7;//右两轮使能
sbit KEY=P3^2;
void delay_10us(unsigned int ten_us)//延时函数,ten_us=1时,大约延时10us
{
while(ten_us--);
}
void advance()//前进函数,且此函数写在main函数之前,无需声明
{
ENA=1;
ENB=1;
IN1=1;
IN2=0;//左两轮前进
IN3=1;
IN4=0;//右两轮前进
}
void main()
{
unsigned int num=0;
while(1)
{
if(KEY==0)//按键按下
{
delay_10us(1000);//延时约10ms,按键消抖
if(KEY==0)//再次判断按键是否按下
{
num=(num+1)%6;
delay_10us(1000);//延时约10ms,按键消抖
}
while (KEY == 0);//等待按键释放
if(num==1)//按键按下一次
{ //前进
advance();
}
if(num==2)//按键按下两次
{ //后退
ENA=1;
ENB=1;
IN1=0;
IN2=1;//左两轮后退
IN3=0;
IN4=1;//右两轮后退
}
if(num==3)//按键按下三次
{ //左转
// ENA=0;
// ENB=1;
// IN3=1;
// IN4=0;//左转
ENA=1;
ENB=1;
IN1=0;
IN2=1;
IN3=1;
IN4=0;//原地左转
}
if(num==4)//按键按下四次
{ //右转
ENA=1;
ENB=0;//右两轮不使能
IN1=1;
IN2=0;//左两轮前进
}
if(num==5)//按键按下五次
{ //停止
ENA=0;//左两轮不使能
ENB=0;//右两轮不使能
num++;//num变为6,继续按下按键时num=7%6=1,继续执行前进
}
}
}
}
四、源文件
链接:https://pan.baidu.com/s/1AQ7CvDcWFw5fVZRSsh2yrQ?pwd=1231
提取码:1231