正轉(zhuǎn),轉(zhuǎn)四相步進電機,每相間隔70ms。C51程序 51單片機通用
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint time
- void timer1(void) interrupt 1 using 1{ //定時器0中斷,定時1ms//
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- time++;
- }
- void delay(uint n){ //一般延時
- while(--n);
- }
- void delay(uint dtime){ //延時
- TR0=1;
- while(time<=dtime);
- time=0;
- TR0=0;
- }
- void moto(bit cf,uchar n,uint dtime){ //電機驅(qū)動子程序,
- uchar idata zhpai[4]={0x78,0xb8,0xd8,0xe8};
- uchar idata fpai[4]={0xe8,0xd8,0xb8,0x78};
- uchar i,l=0;
- if(cf==0) //正轉(zhuǎn),A-B-C-A
- for(i=0;i<n;i++){
- P1=zhpai[l];//P1.7~1.4為輸出口,分別為A、B、C、D
- l++;
- delay(dtime);
- if(l==4)l=0;
- }
- else{ //反轉(zhuǎn),C-B-A-C
- for(i=0;i<n;i++){
- P1=fpai[l];
- l++;
- delay(dtime);
- if(l==4)l=0;
- }
- }
- }
- void main(){
- TMOD=0x01;
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- EA=1;
- ET0=1;
- while(1){
- moto(0,4,70);//正轉(zhuǎn),轉(zhuǎn)四相,每相間隔70ms
- delay(10000);
- moto(1,4,70);//反轉(zhuǎn),轉(zhuǎn)四相,每相間隔70ms
- delay(10000);
- }
- }
復制代碼
|