⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cir_interpolation.c

📁 数控系统的模拟系统,用SSTC51仿真单片机,仿真数控机床切割,能执行数控机床代码.
💻 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 + -