51单片机按键控制步进电机(正转,反转,加速,减速)

51单片机型号:STC89C52RC

 步进电机型号:步进电机28BYJ48(uln2003驱动)

51单片机按键控制步进电机(正转,反转,加速,减速)_第1张图片

 

#include			//51头文件

#define u8 unsigned char
#define u16 unsigned int

//定义步进电机控制引脚
sbit IN1_A=P1^0;
sbit IN2_B=P1^1;
sbit IN3_C=P1^2;
sbit IN4_D=P1^3;

//定义独立按键控制脚
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit KEY3=P3^2;
sbit KEY4=P3^3;

//八拍控制
#define beat_A {IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;}
#define beat_AB {IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;}
#define beat_B {IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;}
#define beat_BC {IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;}
#define beat_C {IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;}
#define beat_CD {IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;}
#define beat_D {IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;}
#define beat_DA {IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;}

//初始速度设为5
u8 speed=5;
u8 keyval;

//延时函数
void delay(u16 n)
{
	u8 i, j;
  while(n--) 
  {
	i = 2;
	j = 239;
	do { while (--j); }
	while (--i);
  }
}

//步进电机反转
void motor_control(void)
{
	beat_A
	delay(speed);
	beat_AB
	delay(speed);
	beat_B
	delay(speed);
	beat_BC
	delay(speed);
	beat_C
	delay(speed);
	beat_CD
	delay(speed);
	beat_D
	delay(speed);
	beat_DA
	delay(speed);
}

//步进电机正转
void motor_turn(void)
{
	beat_DA
	delay(speed);
	beat_D
	delay(speed);
	beat_CD
	delay(speed);
	beat_C
	delay(speed);
	beat_BC
	delay(speed);
	beat_B
	delay(speed);
	beat_AB
	delay(speed);
	beat_A
	delay(speed);
}

//加速控制
void motor_fast(void)
{
	delay(1);
	speed-=1;
	if(speed<1)
	{
		speed=5;
	}
}

//减速控制
void motor_slow(void)
{
	delay(1);
	speed+=1;
	if(speed>9)
	{
		speed=5;
	}
}

//按键响应
u8 key_control(void)
{
	if((P3&0x0f)!=0xf0)	//判断是否有按键按下
	{
		delay(5); //按键消抖
		{
			if(KEY1==0)
				keyval=1;
			else if(KEY2==0)
				keyval=2;
			else if(KEY3==0)
				keyval=3;
			else if(KEY4==0)
				keyval=4;
		}
	}
	return 0;
}

void main()
{
	keyval=0;
	while(1)
	{
		key_control();
		switch(keyval)
		{
			case 1:motor_control();
				break;
			case 2:motor_turn();
				break;
			case 3:motor_fast();
				break;
			case 4:motor_slow();
				break;
		}
	}
}

按键1:电机反转

按键2:电机正转

按键3:电机加速

按键4:电机减速

注意:先烧录程序再接线,P1^0~P1^3跳线接电机输入A B C D引脚

部分代码参考网络资料,仅供学习!

你可能感兴趣的:(51单片机,嵌入式硬件,单片机)