数控插补程序源代码
void _Line_LC_Count(void) {
if(_Line_LC==0)
{
_Line_FLAGL=1;
if(_Line_FLAGM==0)
{
_Line_MC_Count();
}
}
else
{
_Line_FLAG0=0;
_Line_LC=_Line_LC-1;
_Line_Push();
_Line_FR=_Line_FR+_Line_LR;
if(_Line_FR>=0)
{
_Line_LC_Count();
}
else
{
_Line_MC_Count();
}
}
}
void _Line_MC_Count(void) {
if(_Line_MC==0)
{
_Line_FLAGM=1;
if(_Line_FLAGL==0)
{
_Line_LC_Count();
}
}
else
{
_Line_FLAG0=1;
_Line_MC=_Line_MC-1;
_Line_Push();
_Line_FR=_Line_FR+_Line_MR;
if(_Line_FR>=0)
{
_Line_LC_Count();
}
else
{
_Line_MC_Count();
}
}
}
void _Line(U16 x0, U8 y0, U16 x1, U8 y1, U8 color)
{
U32 tempxy;
_Line_Color=color;
_Line_x0=x0;
_Line_y0=y0;
_Line_tempx=x1-x0; //
_Line_tempy=y1-y0;
if(_Line_tempx>=0) //
{
_Line_RL=1;
}
else
{
_Line_RL=0;
}
if(_Line_tempy>=0)
{
_Line_RM=1;
}
else
{
_Line_RM=0;
}
if((_Line_RM+_Line_RL)==1)
{
tempxy=fabs(_Line_tempx);
_Line_tempx=fabs(_Line_tempy);
_Line_tempy=tempxy;
_Line_FLAG1=1;
}
else
{
_Line_tempx=fabs(_Line_tempx);
_Line_tempy=fabs(_Line_tempy);
_Line_FLAG1=0;
}
_Line_LC=_Line_tempx;
_Line_MC=_Line_tempy;
_Line_LR=(-_Line_tempy);
_Line_MR=_Line_tempx;
_Line_FR=0;
_Line_FLAGL=0;
_Line_FLAGM=0;
_DrawPoint(_Line_x0, _Line_y0, _Line_Color);
_Line_LC_Count();
}
void _Line_Push(void)
{
if((_Line_FLAG0==0 && _Line_FLAG1==0)|| (_Line_FLAG0==1 && _Line_FLAG1==1))
{
if(_Line_RL==1)
{
_Line_x0=_Line_x0+1;
_DrawPoint(_Line_x0, _Line_y0, _Line_Color);
}
else
{
_Line_x0=_Line_x0-1;
_DrawPoint(_Line_x0, _Line_y0, _Line_Color);
}
}
else
{
if(_Line_RM==1)
{
_Line_y0=_Line_y0+1;
_DrawPoint(_Line_x0, _Line_y0, _Line_Color);
}
else
{
_Line_y0=_Line_y0-1;
_DrawPoint(_Line_x0, _Line_y0, _Line_Color);
}
}
}