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

📄 line_interpolation.c

📁 数控系统的模拟系统,用SSTC51仿真单片机,仿真数控机床切割,能执行数控机床代码.
💻 C
字号:
//直线插补
signed int Fm1,Xe,Ye;


void  y_zm(void);
void  x_zm(void);
unsigned char Line_determing(int x2, int y2) ;  
void xoy1();//第一象限
void xoy2();
void xoy3();
void xoy4();
void xoy5();
void xoy6();
void xoy7();
void xoy8();
void z_chabu( int x1, int y1,int x2, int y2);
	
	//Y轴给1个脉冲 					//直线插补
        void  y_zm(void)
          {  
          int i=0;
		   if(ir_data[2]==STOP) {while(ir_data[2]!=C_STOP)   ;}
                       Y_M=1;
                      i=kc;
                               while (i--);
                                Y_M=0;
                     	displayY();
	                      	
			    if( Y_F)  Pref_y+=1; 
					else 	Pref_y-=1;
						
					 
         }
         //X轴给1个脉冲 
        void x_zm(void)
          {
                       int i=0;
	 if(ir_data[2]==STOP) {while(ir_data[2]!=C_STOP)   ;}			   
                    X_M=1;
				  i=kc;
                        while (i--);
                              X_M=0;
         	            displayX();	   
			 if( X_F)  Pref_x+=1; 
					else  Pref_x-=1;
				
         }
        
        //直线位置判断
     unsigned char Line_determing(int x2, int y2)
         {
            unsigned char XOY;
         if(x2>0&&y2>0)
         XOY=1;	         //第一象限
         if(x2<0&&y2>0)
            XOY=2;		 //第二象限
         if(x2<0&&y2<0)
            XOY=3;		  //第三象限
         if(x2>0&&y2<0)
            XOY=4;		  //第四象限
         if(x2>0&&y2==0) XOY=5;//正X轴
         if(x2==0&&y2>0) XOY=6;//正Y轴
         if(x2<0&&y2==0) XOY=7;//负X轴
         if(x2==0&&y2<0) XOY=8;//负Y轴
         return (XOY) ;
         }
        //第一象限
        void xoy1()
        {
          X_F=1;
          Y_F=1;
         while(n)
           {  
            if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
		   if(Fm1>=0) { Fm1=Fm1-Ye;x_zm();}
             else { Fm1=Fm1+Xe;y_zm();}
        	  n--;
	   }
          displayXY();
         }
         //第二象限
        void xoy2()
        {
          X_F=0;
          Y_F=1;
         while(n)
           { 
                    if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
		   if(Fm1>=0) { n=n-1;Fm1=Fm1-Ye;x_zm();}
             else { n=n-1;Fm1=Fm1+Xe;y_zm();}
        	}
		 displayXY();
         }
         //第三象限
        void xoy3()
        { 
           X_F=0;
           Y_F=0;
         while(n)
           { 
              if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
		   if(Fm1>=0) { n=n-1;Fm1=Fm1-Ye;x_zm();}
             else { n=n-1;Fm1=Fm1+Xe;y_zm();}
        	}
		 displayXY();
         }
        //第四象限
        void xoy4()
        {  
           X_F=1;
           Y_F=0;
         while(n)
           { 
                 if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
		   if(Fm1>=0) { Fm1=Fm1-Ye;x_zm();}
             else { Fm1=Fm1+Xe;y_zm();}
               n--;
		 }
		 displayXY();
         }
           
        //正X轴
        void xoy5()
         {	 X_F=1;
         while(n)
           {
            if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
           n=n-1;x_zm();}
		 displayXY();
         }
         //正Y轴
        void xoy6()
         {	Y_F=1;
         while(n)
           { 
           if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
           n=n-1;y_zm();}
		 displayXY();
         }
         //负X轴
        void xoy7()
         { X_F=0;
         while(n)
           {
              if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
		   n=n-1;x_zm();}
		 displayXY();
         }
        //负Y轴
        void xoy8()
         { Y_F=0;
         while(n)
           { 
               if(Pref_x>23200||Pref_x<0||Pref_y>23500||Pref_y<0) break;
		   n=n-1;y_zm();}
		 displayXY();
         }
        //直线插补
        void z_chabu(  int x1, int y1,int x2, int y2)	
        
        {  	unsigned char XOY;
            Fm1=0;
	    x1=x1*100;
		 x2=x2*100;           /*放大100陪*/
		  y1=y1*100;
		   y2=y2*100;
           Xe=x2-x1; 
           Ye=y2-y1;
           Xe=fabs(Xe);
           Ye=fabs(Ye);
           n=Xe+Ye;
           XOY= Line_determing(x2,y2);
           switch(XOY)
            {case 1:xoy1();break;
             case 2:xoy2();break;
             case 3:xoy3();break;
             case 4:xoy4();break;
             case 5:xoy5();break;
             case 6:xoy6();break;
             case 7:xoy7();break;
             case 8:xoy8();break;
        	 }
        }
        
        
        		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -