|
发表于 2018-9-20 08:23:31
|
显示全部楼层
看了你的程序,可以断定:肯定是没有效果了!
因为你用的if,你想想嘛——当你按住(注意,是按住独立按键)时,if条件成立,当你松开了呢,条件不成立,电机就不转动了啊,而且只执行一次if内的语句,电机就是转动,你也看不到。
我有个例子,看看吧,共同学习。
#include <reg51.h>
#define Rotation P1 //定义电机转动相数据的输入控制口,本例是P1口的低四位。
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^0; //以下四个为独立键盘
sbit k2=P3^1;
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)//延时7us
{
while (--i);
}
void Motor()
{
unsigned char i;
for(i=0;(i<8);i++)
{
if (jd==0)
{
Rotation=0xf0;
break;
}
if (k==0)
{
Rotation=FFW2[i];
}
else
{
Rotation=FFW1[i];
}
Delay(Time);
jd--;
}
}
void main()
{
unsigned char m;
m=0;
Time=255; //正常转速
jd=20480; //可以转5圈
while(1)
{
if(k1==0)
{
Delay10ms(1);
if(k1==0)
{
if (key1==0)
{
Time=105;
k=0;
jd=20480;
key1=1;
}
else
{
Time=105;
k=1;
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)
{
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;
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;
if (Time<105)
{
Time=105;
}
jd=20480;
while((m<50)&&(k4==0))
{
Delay10ms(1);
m++;
}
m=0;
}
}
Motor();
}
}
我的程序,不仅可以控制正反转动,还可以控制转动角度,你试试看。 |
|