51单片机型号:STC89C52RC
步进电机型号:步进电机28BYJ48(uln2003驱动)
#include<reg51.h> //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引脚
部分代码参考网络资料,仅供学习!