利用51单片机实现对步进电机控制参考程序

要求正转,反转,停止3个按键控制

第1个回答  2016-05-31
有正转反转,加速减速,给你参考。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^7;
sbit key2=P3^6;
sbit key3=P3^5;
uchar kz,i=200;
uchar zhengzhuan[]={0xf3,0xf9,0xfc,0xf6};
uchar fanzhuan[]={0xf3,0xf6,0xfc,0xf9};
void delay1ms(uint ms)
{
uchar i;
while(ms--)
{
for(i = 0; i<10; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}

void key()
{
if(key2==0)
{
delay1ms(10);
if(key2==0)
kz=1;
while(!key2)
{}
}
if(key3==0)
{
delay1ms(10);
if(key3==0)
kz=2;
while(!key3)
{}
}
}
void zz()//正转
{
uchara=0,b=20;
while(kz==1)
{
P1=zhengzhuan[a];
a++;
if(a>3)
a=0;
i--;if(i==0)kz=0;
if(key1==0)
{
delay1ms(10);
if(key1==0)
{
kz=0;
P1=0xff;
while(!key1);
}
}
if(key2==0)
{
b=b+5;
if(b>=240)
b=240;
while(!key2)
{

}
}
if(key3==0)
{
b=b-5;
if(b<=20)
b=20;
while(!key3)
{

}
}
delay1ms(b);
}i=200;
}
void fz()//反转
{
uchara=0,b=20;
while(kz==2)
{
P1=fanzhuan[a];
a++;
if(a>3)
a=0;
if(key1==0)
{
delay1ms(10);
if(key1==0)
{
kz=0;
P1=0xff;
}
}
if(key2==0)
{
b+=5;
if(b>=240)
b=240;
while(!key2)
{

}
}
if(key3==0)
{
b-=5;
if(b<=20)
b=20;
while(!key3)
{

}
}
delay1ms(b);
}
}
void main()
{
while(1)
{
key();
if(kz==0);
elseif(kz==1)
zz();
else
fz();
}

}本回答被提问者和网友采纳
相似回答