单片机控制步进电机正、反转、步数等程序
- 格式:doc
- 大小:26.50 KB
- 文档页数:3
#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; } }