51小车,通过一个按键实现小车前进、后退、左转、右转的切换

一、LN298驱动电机接线图

 f83f3851758f4cbe89538d0df6754713.png

 二、按键接线图

 e42c37ed18e245dca888415d0e0a15af.png

三、源码 

/*****************************************************
***通过一个按键实现小车前进、后退、左转、右转的切换***
*******************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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值