单片机步进电机控制系统实训体会
发布网友
发布时间:2022-05-12 02:29
我来回答
共2个回答
热心网友
时间:2023-11-04 00:45
看看我的,通过按键控制正转,停止,反转。
#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()//正转
{
uchar a=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()//反转
{
uchar a=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);
else if(kz==1)
zz();
else
fz();
}
}
热心网友
时间:2023-11-04 00:45
1.脉冲的使用
2.步进电机的原理
3.定时器和计数器的应用