51小车一个按键切换高、中、低速及停止且数码管分别显示3、2、1、0

一、LN298驱动电机接线图

d937ce2d8ab64a139f02180cb868ab04.png

 二、源码

/*************************************************************
***一个按键切换高、中、低速及停止且数码管分别显示3、2、1、0***
*************************************************************/
#include <reg52.h>

sbit IN1 = P1^2;
sbit IN2 = P1^3;
sbit IN3 = P1^4;
sbit IN4 = P1^5;
sbit ENA = P1^6;
sbit ENB = P1^7;

sbit KEY = P3^2;

unsigned int speed = 0;//0代表停止,1代表高速,2代表中速,3代表低速
unsigned int high_delay = 1000;//高速对应的延时值
unsigned int mid_delay = 500;//中速对应的延时值
unsigned int low_delay = 200;//低速对应的延时值

void delay_10us(unsigned int ten_us)//延时函数
{
	while (ten_us--);
}

void advance()//前进函数
{
	IN1 = 1;
	IN2 = 0;
	IN3 = 1;
	IN4 = 0;
}

void check_speed_change()//检查速度档位是否改变的函数
{
	if (KEY == 0)//按键按下
	{
		delay_10us(1000);//延时约10ms,消抖
		if (KEY == 0)
		{
			speed++;
			if (speed > 3)
			{
				speed = 0;
			}
			while (KEY == 0);//等待按键释放
		}
	}
}

void main()
{
	while (1)
	{
		check_speed_change();//不断检查按键
		switch (speed)
		{
		case 0:  // 停止
			P0=0X03;//共阳数码管显示0
			ENA = 0;
			ENB = 0;
			break;
		case 1:  // 高速
			{
				P0=0x0D;//共阳数码管显示3
				ENA = 1;
				ENB = 1;
				advance();
				delay_10us(high_delay);
				ENA = 0;
				ENB = 0;
				delay_10us(1000 - high_delay);
			}
			break;
		case 2:  // 中速
			{
				P0=0x25;//共阳数码管显示2
				ENA = 1;
				ENB = 1;
				advance();
				delay_10us(mid_delay);
				ENA = 0;
				ENB = 0;
				delay_10us(1000 - mid_delay);
			}
			break;
        case 3:  // 低速
            {
				P0=0x9F;//共阳数码管显示1
				ENA = 1;
				ENB = 1;
				advance();
				delay_10us(low_delay);
				ENA = 0;
				ENB = 0;
				delay_10us(1000 - low_delay);
            }
			break;
		}
	}
}



 

 三、源文件

 链接:https://pan.baidu.com/s/1R2aP3-MZ5kyVsJQzW3NeoQ?pwd=1231 
提取码:1231

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值