📄 cir_interpolation.c
字号:
//圆插补
#define STEP 1
//unsigned char idata NR=1;
void Y_MZ(void);
void X_MZ(void);
void xoy1y(void) ;
void xoy2y(void) ;
void xoy3y(void) ;
void xoy4y(void) ;
void xoy5y(void) ;
void xoy6y(void) ;
void xoy7y(void) ;
void xoy8y(void) ;
unsigned char weizhi(int XS,int YS) ;
//Y轴给1个脉冲
void Y_MZ(void)
{
unsigned int i=0;
Y_M=1;
i=kc;
while (i--);
Y_M=0;
displayY();
if( Y_F) Pref_y++;
else Pref_y--;
}
//X轴给1 个脉冲
void X_MZ(void)
{
unsigned int i=0;
X_M=1;
i=kc;
while (i--);
X_M=0;
displayX ();
if( X_F) Pref_x++;
else Pref_x--;
}
unsigned char weizhi(int XS,int YS) /*始初化函数*/
{
unsigned char XOY;
if(NR==1)
{if(XS>0&&YS>=0)XOY=1;
if(XS<=0&&YS>0)XOY=2;
if(XS<0&&YS<=0)XOY=3;
if(XS>=0&&YS<0)XOY=4;
}
if(NR==0)
{if(XS>=0&&YS>0)XOY=5;
if(XS<0&&YS>=0)XOY=6;
if(XS<=0&&YS<0)XOY=7;
if(XS>0&&YS<=0)XOY=8;
}
return XOY;
} //
void xoy1y() /*插补函数*/
{ if(FM>=0){ XS=XS-STEP ;FM=FM-2*XS+1;X_F=0;X_MZ();}
else if(FM<0){ YS=YS+STEP ; FM=FM+2*YS+1;Y_F=1;Y_MZ();}
}
void xoy2y()
{if(FM>=0){YS=YS-STEP; FM=FM-2*YS+1;Y_F=0;Y_MZ();}
else { XS=XS-STEP; FM=FM+2*XS+1;X_F=0;X_MZ();}
}
void xoy3y()
{if(FM>=0){XS=XS+STEP; FM=FM+2*XS+1;X_F=1;X_MZ();}
else {YS=YS-STEP; FM=FM-2*YS+1;Y_F=0;Y_MZ();}
}
void xoy4y()
{if(FM>=0){ YS=YS+STEP; FM=FM+2*YS+1;Y_F=1;Y_MZ();}
else {XS=XS+STEP;FM=FM-2*XS+1;X_F=1;X_MZ();}
}
void xoy5y()
{if(FM>=0){YS=YS-STEP ; FM=FM-2*YS+1 ;Y_F=0;Y_MZ();}
else { XS=XS+STEP ; FM=FM+2*XS+1;X_F=1;X_MZ();}
}
void xoy6y()
{if(FM>=0){ XS=XS+STEP ; FM=FM+2*XS+1;X_F=1;X_MZ();}
else {YS=YS+STEP ; FM=FM-2*YS+1;Y_F=1;Y_MZ();}
}
void xoy7y()
{if(FM>=0){YS=YS+STEP ; FM=FM+2*YS+1;Y_F=1;Y_MZ();}
else { XS=XS-STEP ; FM=FM-2*XS+1;X_F=0;X_MZ();}
}
void xoy8y()
{if(FM>=0){XS=XS-STEP ; FM=FM-2*XS+1;X_F=0;X_MZ();}
else {YS=YS-STEP ; FM=FM-2*YS+1 ;Y_F=0;Y_MZ();}
}
void circle_interpolation(int xs,int ys,int xe,int ye)
{
unsigned char idata XOY,g=0;
XS=xs*100;
YS=ys*100;
xe=xe*100;
ye=ye*100;
FM=0;
XOY= weizhi(XS,YS);
n=fabs(xe-XS)+fabs(ye-YS);
if(fabs(XS)==fabs(ye)||fabs(YS)==fabs(xe)) { g=3;}
if((XS==-xe)||(YS==-ye)) { n=n*2;g=2;}
if((fabs(XS-xe)<=1)&&(fabs(YS-ye)<=1))
{g=0; n=(fabs(XS)+fabs(YS))*8;}
if((XS==xe)&&(YS==ye)) {n=n*6;}
while(1)
{
if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
if(ir_data[2]==STOP) {while(ir_data[2]!=C_STOP) ;}
switch(XOY)
{
case 1:xoy1y();break;
case 2:xoy2y();break;
case 3:xoy3y();break;
case 4:xoy4y();break;
case 5:xoy5y();break;
case 6:xoy6y();break;
case 7:xoy7y();break;
case 8:xoy8y();break;
}
n--;
//if(n==0) break;
if(((fabs(XS-xe)==0)&&(fabs(YS-ye)==0)))break;
//if(((fabs(XS-xe)==0)&&(fabs(YS-ye)==0))||(n==0))break;
if(g>3)break;
if(NR==1)
{
if(XOY==1)
if(XS==0) {XOY=2;g++;}
if(XOY==2)
if(YS==0){XOY=3;g++;}
if(XOY==3)
if(XS==0){XOY=4;g++;}
if(XOY==4)
if(YS==0){XOY=1;g++;}
}
if(NR==0)
{
if(XOY==5)
if(YS==0){XOY=8;g++;}
if(XOY==8)
if(XS==0){XOY=7;g++;}
if(XOY==7)
if(YS==0){XOY=6;g++;}
if(XOY==6)
if(XS==0){XOY=5;g++;}
}
}
displayXY();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -