步进电机正反转但没能实现调速功能

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
uchar code fz[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
void delay(uint ms)
{
uint t;
while(ms--)
for(t=0;t<120;t++);
}
void delay(void)
{
uchar a,b,c;
for(a=0;a<3;a++)
for(b=0;b<1;b++)
for(c=0;c<63;c++);
}

void motor_zz(uint n)
{
uint i,j;
for(i=0;i<6*n;i++)
{
for(j=0;j<10;j++)
{
if(P2==0xfb) break;
P1=zz[j];
delay(30);
}
}
}
void motor_fz(uint n)
{
uint i,j;
for(i=0;i<8*n;i++)
{
for(j=0;j<10;j++)
{
if(P2==0xfb)
break;
P1=fz[j];
delay(30);
}
}
}
void main()
{
uint N=12;
while(1)
{
P3=0xff;
if(P2==0xfe)
{
while(P2==0xfe);
P0=0xfe;
motor_zz(N);
if(P2==0xfb)
break;
}
else if(P2==0xfd)
{
while(P2==0xfd);
P0=0xfd;
motor_fz(N);
if(P2==0xfb) break;
}
if(P2==0xf7)
{
while(P2==0xf7);
P0=0xf7;
if (Speed<20)
Speed++;
if(Speed>=20);
if(P2==0xfb) break;
}
else if(P2==0xef)
{
while(P2==0xef);
P0=0xef;
if (Speed>1)
Speed--;
} if(P2==0xfb) break;
}

}

第1个回答  2013-06-06
表示看到你的程序后,觉得你的设计思路有问题。调速应该用控制电压的变化来,亦即控制电阻来。AD感受到电压变化后,通过单片机的计时器0产生占空比。然后控制调速。
第2个回答  2013-06-06
我表示看到程序就头大。
相似回答