|
看我的:
- #include <reg52.h>
- #define Rotation P1//步進(jìn)電機(jī),只用低四位
- 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; //以下四個(gè)為獨(dú)立鍵盤(pán)
- 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()//電機(jī)旋轉(zhuǎn)子函數(shù)
- {
- unsigned char i;
- for(i=0;(i<8);i++)
- {
- if (jd==0) //jd為0則停轉(zhuǎn)
- {
- Rotation=0xf0;
- break;
- }
- if (k==0)
- {
- Rotation=FFW2[i];//輸出正轉(zhuǎn)的相
- }
- else
- {
- Rotation=FFW1[i];//輸出反轉(zhuǎn)的相
- }
- Delay(Time);//最小120,最快
- jd--;
-
- }
- }
- void main()
- {
- unsigned char m;
- m=0;
- Time=255;
- jd=20480;//可以轉(zhuǎn)5圈
- while(1)
- {
-
- if(k1==0)
- {
- Delay10ms(1);
- if(k1==0)
- {
- if (key1==0)//按第奇數(shù)次,正轉(zhuǎn),偶數(shù)次反轉(zhuǎn)
- {
- Time=105;
- k=0;//正轉(zhuǎn)
- jd=20480;
- key1=1;
- }
- else
- {
- Time=105;
- k=1;//反轉(zhuǎn)
- 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)//按奇數(shù)次轉(zhuǎn)180度,偶數(shù)次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();
- }
- }
復(fù)制代碼
這是我多年前做步進(jìn)電機(jī)試驗(yàn)時(shí)的程序,現(xiàn)在看起來(lái)很“小兒科”。不過(guò),正反轉(zhuǎn)動(dòng)、加速減速都有。
適用電路:
|
|