看我的:
- #include <reg52.h>
- #define Rotation P1//步进电机,只用低四位
- unsigned char code FFW1[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
- unsigned char code FFW2[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
- sbit k1=P3^1; //以下四个为独立键盘
- sbit k2=P3^0;
- sbit k3=P3^2;
- sbit k4=P3^3;
- unsigned int Time;
- unsigned int jd;
- bit k=0,key1=0,key2=0;
- void Delay10ms(unsigned int c)
- {
- unsigned char a,b;
- for(c;c>0;c--)
- for(b=38;b>0;b--)
- for(a=130;a>0;a--);
- }
- void Delay(unsigned int i)
- {
- while (--i);
- }
- void Motor()//电机旋转子函数
- {
- unsigned char i;
- for(i=0;(i<8);i++)
- {
- if (jd==0) //jd为0则停转
- {
- Rotation=0xf0;
- break;
- }
- if (k==0)
- {
- Rotation=FFW2[i];//输出正转的相
- }
- else
- {
- Rotation=FFW1[i];//输出反转的相
- }
- Delay(Time);//最小120,最快
- jd--;
-
- }
- }
- void main()
- {
- unsigned char m;
- m=0;
- Time=255;
- jd=20480;//可以转5圈
- while(1)
- {
-
- if(k1==0)
- {
- Delay10ms(1);
- if(k1==0)
- {
- if (key1==0)//按第奇数次,正转,偶数次反转
- {
- Time=105;
- k=0;//正转
- jd=20480;
- key1=1;
- }
- else
- {
- Time=105;
- k=1;//反转
- jd=20480;
- key1=0;
- }
- while((m<50)&&(k1==0))
- {
- Delay10ms(1);
- m++;
- }
- m=0;
- }
- }
- if(k2==0)
- {
- Delay10ms(1);
- if(k2==0)
- {
- if (key2==0)//按奇数次转180度,偶数次90度
- {
- Time=255;
- k=1;
- jd=2048;
- key2=1;
- }
- else
- {
- Time=205;
- k=0;
- jd=1024;
- key2=0;
- }
- while((m<50)&&(k2==0))
- {
- Delay10ms(1);
- m++;
- }
- m=0;
- }
- }
- if(k3==0)
- {
- Delay10ms(1);
- if(k3==0)
- {
-
- Time=Time+100;//最大500
- if (Time>505)
- {
- Time=505;
- }
- jd=20480;
- while((m<50)&&(k3==0))
- {
- Delay10ms(1);
- m++;
- }
- m=0;
- }
- }
- if(k4==0)
- {
- Delay10ms(1);
- if(k4==0)
- {
- Time=Time-100;//最小105
- if (Time<105)
- {
- Time=105;
- }
- jd=20480;
- while((m<50)&&(k4==0))
- {
- Delay10ms(1);
- m++;
- }
- m=0;
- }
- }
- Motor();
- }
- }
复制代码
这是我多年前做步进电机试验时的程序,现在看起来很“小儿科”。不过,正反转动、加速减速都有。
适用电路:
|