单片机控制步进电机正、反转、步数等程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#define uint unsigned int

#define uchar unsigned char

sbit k1=P3^0;

sbit k2=P3^1;

sbit k3=P3^2;

sbit k4=P3^3;

uchar FFW[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

uchar REV[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};

uchar k4_flag=0,k1_flag=0,k2_flag=0,k3_flag=0;

uchar step_num=3,a;

//=============================

void shezhi();

void DelayMS(uint ms);//延时函数

void zhengzhuan(uchar n);//正转

void fanzhuan(uchar n);//反转

void anjian(void);

//==================================================== void DelayMS(uint ms)//延时函数

{uchar i;

while(ms--)

{for(i=0;i<120;i++);

}

}

//==================================================== void zhengzhuan(uchar n)//正转

{uchar i,j;

for(i=0;i

{for(j=0;j<8;j++)

{if(k3 == 0) break;

P1 = FFW[j];

DelayMS(25);

}

}

}

//=============================

void fanzhuan(uchar n)//反转

{uchar i,j;

for(i=0;i

{for(j=0;j<8;j++)

{if(k3 == 0) break;

P1 = REV[j];

DelayMS(25);

}

}

}

//============================= void anjian(void)

{

if(k1==0) k1_flag=1;

if(k2==0) k2_flag=1;

if(k3==0) k3_flag=1;

if(k4==0){k4_flag++;shezhi();} DelayMS(25);

}

//============================= void shezhi()

{if(a==0) k1_flag=1;

if(a==1) k2_flag=1;

switch(k4_flag)

{case 1:step_num=3;break;

case 2:step_num=6;break;

case 3:step_num=9;break;

case 4:step_num=12;break;

case 5:step_num=15;break;

case 6:step_num=18;break;

case 7:step_num=21;break;

case 8:step_num=24;break;

case 9:step_num=27;break;

}

}

//============================= void main()

{

while(1)

{anjian();

while(k1_flag==1)

{a=0;

zhengzhuan(step_num);

P0=0xfe;

if(P3!=0xff)

{k1_flag=0;break;}

}

while(k2_flag==1)

{a=1;

fanzhuan(step_num);

P0=0xfd;

if(P3!=0xff)

{k2_flag=0;break;} }

if(k3_flag==1)

{P0=0xfb;

if(P3!=0xff) k3_flag=0;

}

}

相关文档
最新文档