看我的:
- #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();
- }
- }
復制代碼
這是我多年前做步進電機試驗時的程序,現在看起來很“小兒科”。不過,正反轉動、加速減速都有。
適用電路:
|