热度 1|
软件设计:
#include <reg51.h>
//四相步进电机工作与八拍方式
//正转励磁序列为A->AB->B->BC->C->CD->D->DA
unsigned char code Z1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
unsigned char code Z2[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
//反转励磁序列为AD->D->DC->C->CB->B->BA->A
unsigned char code F1[]={0x09,0x08,0x0C,0x04,0x06,0x02,0x03,0x01};
unsigned char code F2[]={0x90,0x80,0xC0,0x40,0x60,0x20,0x30,0x10};
sbit K1=P3^0 ; //电机1正转
sbit K2=P3^1 ; //电机1反转
sbit K3=P3^2 ; //停止
sbit K4=P3^3 ; //电机2正转
sbit K5=P3^4 ; //电机2反转
void delay_ms(unsigned char x)
{
unsigned char t; while(x--) for (t=0;t<120;t++); //延时函数
}
//电机1正转
void STEP_MOTOR_Z1 ()
{
unsigned char i;
for(i=0;i<8;i++) //八拍
{
if (K3==0) break;
P1=Z1[i];
delay_ms(50);
}
}
//电机2正转
void STEP_MOTOR_Z2 ()
{
unsigned char i;
for(i=0;i<8;i++) //八拍
{
if (K3==0) break;
P1=Z2[i];
delay_ms(50);
}
}
//电机1反转
void STEP_MOTOR_F1 ()
{
unsigned char i;
for(i=0;i<8;i++)
{
if (K3==0) break;
P1=F1[i];
delay_ms(50);
}
}
//电机2反转
void STEP_MOTOR_F2 ()
{
unsigned char i;
for(i=0;i<8;i++)
{
if (K3==0) break;
P1=F2[i];
delay_ms(50);
}
}
//主函数
void main()
{
while (1) //主循环
{
if (K1==0) //按下按键1电机1正转4圈且D1灯亮
{
P0=0xfe;
STEP_MOTOR_Z1 ();//电机1正转
if (K3==0) break;
}
else if (K2==0) //按下按键2电机1反转3圈且D2灯亮
{
P0=0xfd;
STEP_MOTOR_F1 ();//电机1反转
if (K3==0) break;
}
else if (K4==0) //按下按键4电机2正转3圈且D4灯亮
{
P0=0xfB;
STEP_MOTOR_Z2 ();//电机2正转
if (K3==0) break;
}
else if (K5==0) //按下按键5电机2反转3圈且D5灯亮
{
P0=0xf7;
STEP_MOTOR_F2 ();//电机2反转
if (K3==0) break;
}
else //按下按键3电机停止转动且D3灯亮
{
P0=0xEF;//红灯亮 表示电机不转
P1=0x33;//电机初始状态
}
}
}