熱度 1|
軟件設(shè)計(jì):
#include <reg51.h>
//四相步進(jìn)電機(jī)工作與八拍方式
//正轉(zhuǎn)勵(lì)磁序列為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};
//反轉(zhuǎn)勵(lì)磁序列為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 ; //電機(jī)1正轉(zhuǎn)
sbit K2=P3^1 ; //電機(jī)1反轉(zhuǎn)
sbit K3=P3^2 ; //停止
sbit K4=P3^3 ; //電機(jī)2正轉(zhuǎn)
sbit K5=P3^4 ; //電機(jī)2反轉(zhuǎn)
void delay_ms(unsigned char x)
{
unsigned char t; while(x--) for (t=0;t<120;t++); //延時(shí)函數(shù)
}
//電機(jī)1正轉(zhuǎn)
void STEP_MOTOR_Z1 ()
{
unsigned char i;
for(i=0;i<8;i++) //八拍
{
if (K3==0) break;
P1=Z1[i];
delay_ms(50);
}
}
//電機(jī)2正轉(zhuǎn)
void STEP_MOTOR_Z2 ()
{
unsigned char i;
for(i=0;i<8;i++) //八拍
{
if (K3==0) break;
P1=Z2[i];
delay_ms(50);
}
}
//電機(jī)1反轉(zhuǎn)
void STEP_MOTOR_F1 ()
{
unsigned char i;
for(i=0;i<8;i++)
{
if (K3==0) break;
P1=F1[i];
delay_ms(50);
}
}
//電機(jī)2反轉(zhuǎn)
void STEP_MOTOR_F2 ()
{
unsigned char i;
for(i=0;i<8;i++)
{
if (K3==0) break;
P1=F2[i];
delay_ms(50);
}
}
//主函數(shù)
void main()
{
while (1) //主循環(huán)
{
if (K1==0) //按下按鍵1電機(jī)1正轉(zhuǎn)4圈且D1燈亮
{
P0=0xfe;
STEP_MOTOR_Z1 ();//電機(jī)1正轉(zhuǎn)
if (K3==0) break;
}
else if (K2==0) //按下按鍵2電機(jī)1反轉(zhuǎn)3圈且D2燈亮
{
P0=0xfd;
STEP_MOTOR_F1 ();//電機(jī)1反轉(zhuǎn)
if (K3==0) break;
}
else if (K4==0) //按下按鍵4電機(jī)2正轉(zhuǎn)3圈且D4燈亮
{
P0=0xfB;
STEP_MOTOR_Z2 ();//電機(jī)2正轉(zhuǎn)
if (K3==0) break;
}
else if (K5==0) //按下按鍵5電機(jī)2反轉(zhuǎn)3圈且D5燈亮
{
P0=0xf7;
STEP_MOTOR_F2 ();//電機(jī)2反轉(zhuǎn)
if (K3==0) break;
}
else //按下按鍵3電機(jī)停止轉(zhuǎn)動(dòng)且D3燈亮
{
P0=0xEF;//紅燈亮 表示電機(jī)不轉(zhuǎn)
P1=0x33;//電機(jī)初始狀態(tài)
}
}
}
Powered by 單片機(jī)教程網(wǎng)