一、LN298驱动电机接线图
二、源码
/*************************************************************
***一个按键切换高、中、低速及停止且数码管分别显示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