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

📄 g_translation.c

📁 数控系统的模拟系统,用SSTC51仿真单片机,仿真数控机床切割,能执行数控机床代码.
💻 C
字号:


int  x=0,y=0,Ii=0,Kk=0;
#if 0
void DelayXS(unsigned char x)                                           /*延时x秒*/
{
unsigned char TempCycA =(unsigned char)x*12;
unsigned int TempCycB;
while(TempCycA--)
   { 
     TempCycB=7269;
    while(TempCycB--) x=x;
   }
}
#endif
void Get_xyf(void)

{ 
unsigned i=0;
if(!(*s==X1||*s==I||*s==K1||*s==Y1||*s==SPEED)) s++;
if(*s==X1) 
	      { 
	           if(*(++s)==FuHao)   /*有负号		   //取X值*/
			               {	  i=0;
						  while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						   while((*(--s)>=0x00)&&((*s)<=0x09))
						         { x+=pow(10,i)*(*s);i++;} 
								   while((*(++s)>=0x00)&&((*s)<=0x09))  ;
							 x=0-x;
	   				     }
	   								 
		             else            
				             {      s--;    
						       i=0;
							  while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						   while((*(--s)>=0x00)&&((*s)<=0x09))
						         { x+=pow(10,i)*(*s);i++;} 
								   while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						 }
						 		    
                 }           
   if(*s==Y1)				 /*取Y值*/
                {
                            if(*(++s)==FuHao) 
                                                    {   
                                                           i=0;
								     while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						   while((*(--s)>=0x00)&&((*s)<=0x09))
						         { y+=pow(10,i)*(*s);i++;} 
								   while((*(++s)>=0x00)&&((*s)<=0x09))  ;
									   y=0-y;
	   					          }
	   								  
					else	           
					     {      s--;    
						       i=0;
							  while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						   while((*(--s)>=0x00)&&((*s)<=0x09))
						         { y+=pow(10,i)*(*s);i++;} 
					
								   while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						 }
   	            }
   if(*s==I) 
	      { 
	           if(*(++s)==FuHao)   /*有负号		   //取X值*/
			               {	  i=0;
						  while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						   while((*(--s)>=0x00)&&((*s)<=0x09))
						         { Ii+=pow(10,i)*(*s);i++;} 
								   while((*(++s)>=0x00)&&((*s)<=0x09))  ;
							 Ii=0-Ii;
	   				     }
	   								 
		             else            
				             {      s--;    
						       i=0;
							  while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						   while((*(--s)>=0x00)&&((*s)<=0x09))
						         { Ii+=pow(10,i)*(*s);i++;} 
						
								   while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						 }
						 		    
                 }   
   if(*s==K) 
	      { 
	           if(*(++s)==FuHao)   /*有负号		   //取X值*/
			               {	  i=0;
						  while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						   while((*(--s)>=0x00)&&((*s)<=0x09))
						         { Kk+=pow(10,i)*(*s);i++;} 
								   while((*(++s)>=0x00)&&((*s)<=0x09))  ;
							 Kk=0-Kk;
	   				     }
	   								 
		             else            
				             {      s--;    
						       i=0;
							  while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						   while((*(--s)>=0x00)&&((*s)<=0x09))
						         { Kk+=pow(10,i)*(*s);i++;} 
									   while((*(++s)>=0x00)&&((*s)<=0x09))  ;
						 }
						 		    
                 }           
	if(*s==SPEED)					  //取F值
			{    F=*(++s);s++;}
	  
       }
 
void G_translation(void)
{	 
      WriteCommandLCM(0x0C,1);
	Lcd_print("G_operation") ; 
	Lcd_print1(1,0,"sure operation?"); 
	#if 0
NR=0;
circle_interpolation(-30,0,0,30);
while(1);
#endif	
    while(1) 
           	   {
         	   if(ir_data[2]==EXIT) goto b;
           	    if(ir_data[2]==ENTER)  {   Lcd_print("operating"); displayXY();Opreation();ir_data[2]=0;}
         	   }
           b: ir_flag=0;
	  SaveXYToNVRAM();
}


void Opreation(void)
{
    unsigned char time=0,fouction=0,jx_flag=0;
  	int x0=0,y0=0;
	TAI_BI=1;    
           s=&buf;
	ir_flag=0;
	TR2=1; 
	//circle_interpolation(-30,0,0,30);
while(1)
      {	  
             b: x=0;
	         y=0;
                 switch(*s)
                  	   {                                                 
               	                case  G91: 	jx_flag=0;                                  /*相对编程*/
               				                
               					        s++;
               					        break;	
					 case  G90: 	  jx_flag=1 ;                                     /*绝对编程*/
               				               
               					        s++;
               					        break;							
               					        
               	                case  G00:	  	 	
               			 	                 s++;
               			 	                  Get_xyf();								 /*直线插补*/	
                                                            F=3;
							if(jx_flag)	
								{x-=(int)(Pref_x/100);
							            y-=(int)(Pref_y/100);}
							     z_chabu(x0,y0,x,y); 				              	/*取速度值存在*/
                                                         F=1;
							   fouction=G00;
									  break;	
               			 case  G01:		
						 	        s++;
               			 	                  Get_xyf();								 /*直线插补*/	   
                                                        if(jx_flag)	
          								{ 
          								x-=(int)(Pref_x/100);
          									y-=(int)(Pref_y/100);
          								}
								z_chabu(x0,y0,x,y); 				              	//取速度值存在
                                                       fouction=G01;
						                 break;
               	  		  case M47:                                                                             
               			  	                 TAI_BI=1;                                                          /*提笔*/
               			                          s++;
               						  
               			  				break;	                                                     
                     		  case M46: 
							  	TAI_BI=0;                                                         	/*下笔*/  
                     			                 s++;
                     					break;
                     			  		                                               
                     		  case G02:  
                                                             s++;
									NR=0; 						 
									get_xyf();
                                                           #if 0
                                  x=-30;y=30;Ii=-36;Kk=1;
									
									SBUF=x;
                                                       while(!TI){;}
                                                    	   TI=0;   
								SBUF=y;
                                                       while(!TI){;}
                                                    	   TI=0;   
								SBUF=Ii;
                                                       while(!TI){;}
                                                    	   TI=0;   
								SBUF=Kk;
                                                       while(!TI){;}
                                                    	   TI=0;  
								SBUF=F;
                                                       while(!TI){;}
                                                    	   TI=0;  						   
								#endif						   
                     				 if(jx_flag)	
								{
								x-=(int)(Pref_x/100);
									 y-=(int)(Pref_y/100);
									    Ii-=(int)(Pref_x/100);
                                                                      Kk-=(int)(Pref_y/100);
								 }	
								//	 circle_interpolation(-30,0,0,30);
                                         circle_interpolation(-Ii,-Kk,x-Ii,y-Kk);
								Ii=0;Kk=0;				  
								fouction=G02;		
                     					  break;	                                                                      /*顺圆*/
                     			   
                     		  case G03: 													/*逆圆*/
                     			               s++;
                     					Get_xyf();
                     					NR=1; 
					                  if(jx_flag)	
								{
							       	x-=(int)(Pref_x/100);
									 y-=(int)(Pref_y/100);
									    Ii-=(int)(Pref_x/100);
                                                                      Kk-=(int)(Pref_y/100);
									 }			
                     				 circle_interpolation(-Ii,-Kk,x-Ii,y-Kk);
									Ii=0;Kk=0;	 
                     				     	  fouction=G03;
                     			                  break;
                     		  case G04: 
							  	time=*(++s);
                     			                   DelayXS(time);
                     					      s++;
                     					break;				/*暂停time秒*/
                     
                     		  case M02:  
                     				       P1=0;
                     					 TAI_BI=1; 
                     					 goto a;
                     					break;	
					 case ENTER: 
							  	if(*(++s)==X1||*(s)==Y1) goto t;
								
                     					break;						
					 
					  default : 
							s++;
							break;
			 
                     									
                     	    }
                      goto b;	
			t:	
				Get_xyf();
				switch(fouction)
					{
					         case  G00:
               			 	                  							 /*直线插补*/	
                                                            F=3;
							if(jx_flag)	
								{
								x-=(int)(Pref_x/100);
							            y-=(int)(Pref_y/100);
								}
								 z_chabu(x0,y0,x,y); 	 //直线插补
								 F=1;
							   break;
						 case  G01:	
									   						  	  
                         			  if(jx_flag)	
								{
								   x-=(int)(Pref_x/100);
									  y-=(int)(Pref_y/100);
							        }
							 z_chabu(x0,y0,x,y); 		              	
                                           	   break;	   
						case  G02:	
									NR=0; 
                         				 if(jx_flag)	
								{
								x-=(int)(Pref_x/100);
									 y-=(int)(Pref_y/100);
									    Ii-=(int)(Pref_x/100);
                                                                      Kk-=(int)(Pref_y/100);
									 }		
                                               circle_interpolation(-Ii,-Kk,x-Ii,y-Kk);
								Ii=0;Kk=0;				  		   
                                           	   break;	   
						case  G03:	 
								NR=1; 
                         			 if(jx_flag)	
								{
								x-=(int)(Pref_x/100);
									 y-=(int)(Pref_y/100);
									    Ii-=(int)(Pref_x/100);
                                                                      Kk-=(int)(Pref_y/100);
								 }		
                                               circle_interpolation(-Ii,-Kk,x-Ii,y-Kk);
								Ii=0;Kk=0;				   
                                           	   break;	   					   
					}
                }
          a:         Lcd_print("G_operation") ; 
		  	Lcd_print1(1,0," End") ; 
			displayXY();
			DelayXS(1);
			 TR2=0; 
			 SaveXYToNVRAM();
			
}		  

⌨️ 快捷键说明

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