|
发表于 2011-8-27 11:50:16
|
显示全部楼层
不错顶顶!我刚按你的这个思路也写了个,请你给看看?
void line (u8 F,s32 X0,s32 Y0,s32 X1,s32 Y1)//F:进给速度 X0,Y0:X,Y轴起点坐标 X1,Y1:X,Y轴终点坐标
{
u8 x,y;
u32 i,j;
x=1;
y=1;
while(!(x|y)) //如果x,y都为0就说明位置到了
{
if(X1>X0) //终点坐标大于起点坐标
{
XS=1; //方向信号为高,电机正转
x=1;
}
else if (X1<X0)//起点坐标大于终点坐标
{
XS=0; //方向信号为0,电机反转
x=1;
}
else x=0; //起点坐标等于终点坐标,X轴不动
if(Y1>Y0)
{
YS=1; //方向信号为高,电机正转
y=1;
}
else if(Y1<Y0)
{
YS=0; //方向信号为0,电机反转
y=1;
}
else y=0;//起点坐标等于终点坐标,Y轴不动
i=X1*Y0-X0*Y1;
if(i>=0)
{
XP=1; //脉冲输出引脚
X0++;
}
else
{
YP=1; //脉冲输出引脚
Y0++;
}
delay(F); //吧速度值先在主程序转为倒数,然后直接当做延时值传递给延时函数
X0=0; //脉冲引脚拉低,一个脉冲输出完成。
Y0=0;
}
} |
|