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

📄 2005912.c

📁 运用数控机床上的逐点比较插补算法来实现悬挂物体控制系统的画图要求
💻 C
📖 第 1 页 / 共 2 页
字号:
    DataPort=0xFF;
    E=1;
    _nop_();
    while(0)                //DataPort & busy
    _nop_();
    E=0;
    return;
}
/*************************************************************lcd设置***********************************/
void LCDInt()
{
        E=0;                   
        LCDcom(0x38);          //function set
       
        LCDcom(0x06);              //enter mode set
        
        LCDcom(0x0f);             //display ON/Off
        return;
}
/********************************lcd清屏程序**************************************************************/
void LCDclr()
{       RS=0; 
        RW=0;
		E=0;
        

        LCDcom(0x01);
        //dly2ms(1);
        return;
}
/*******************************************lcd写命令************************************************************/

void LCDcom(unsigned char command)
{
        LCD_busy();
        RW=0;
        DataPort=command;
        E=1;           
        _nop_();
        E=0;
        return;
}
/************************************时间和扫描显示*********************************************/
void t0(void)interrupt 1  
{  

  
count++;
TH0=0x3c;                //定时器初值重载
TL0=0xb0;
  if(count==20)                     //1秒到否
  {
   count=0;
   sec++;
  

  }

 if(sec==999)  sec=0;

  //                                               if(k==0x01)   {x=x0+x;y=y0+y; }              //直线
   if(k1==0x02)   { x=x0+x;y=y0+y; }                        //圆


TabVR[8]=tab[sec/100];
TabVR[9]=tab[(sec%100)/10];                                        //显示时间
TabVR[10]=tab[sec%10];
TabXY[5]=tab[x/100];
TabXY[6]=tab[(x%100)/10];
TabXY[7]=tab[x%10];                                    //显示x 的数字
TabXY[12]=tab[y/100];
TabXY[13]=tab[(y%100)/10];                                        //显示y的值
TabXY[14]=tab[y%10];
}

void t1(void) interrupt 3{

	TH1=0x3c;
	TL1=0xb0;

  LCD_L1(TabXY);
  LCD_L2(TabVR);



}

/***********************************************键盘函数*********************************************/
unsigned char  kbscan(void)

{  unsigned char sccode,recode;
   P0=0xf0;
   if((P0&0xf0)!=0xf0)
    { delay(2000);
    if((P0&0xf0)!=0xf0)
	 {sccode=0xfe;
	 while((sccode&0x10)!=0)

	 { P0=sccode;
	 if((P0&0xf0)!=0xf0)
	 { recode=(P0&0xf0)|0x0f;

	 return((~sccode)+(~recode));
	}

  
       else    sccode=(sccode<<1)|0x01;
    }
  }
 }
  return(0);

}  

void xshuzi(){

TabXY[5]=xy[0];
TabXY[6]=xy[1];
TabXY[7]=xy[2];
TabXY[0]=0x20;
TabXY[1]=0x20;
TabXY[2]=0x20;
x0=100*(xy[0]-0x30)+10*(xy[1]-0x30)+(xy[2]-0x30);


 }
void yshuzi(){

 
   
TabXY[12]=xy[0];
  
TabXY[13]=xy[1];
 
TabXY[14]=xy[2];
TabXY[0]=0x20;
TabXY[1]=0x20;
TabXY[2]=0x20;
y0=100*(xy[0]-0x30)+10*(xy[1]-0x30)+(xy[2]-0x30);
 }

 void banjing()
 {

TabXY[3]=0x20;
TabXY[4]=0x20;
TabXY[5]=0x20;
TabXY[10]=0x20;                                   //清屏  
TabXY[11]=0x20;
TabXY[13]=0x20;
TabXY[14]=0x20;
TabXY[15]=0x20;
TabXY[12]=0x20;                               //rrrrrrrrrrrrrrrrrrrr
TabXY[8]=xy[0];
TabXY[7]=0x3a; 
TabXY[6]=0x52; 
TabXY[9]=xy[1];
TabXY[10]=xy[2];
TabXY[0]=0x20;
TabXY[1]=0x20;
TabXY[2]=0x20;
r0=100*(xy[0]-0x30)+10*(xy[1]-0x30)+(xy[2]-0x30);
 }   

 

void yuanhs(){
 double m,f0,z0,a;
   x0=x0;
   y0=y0-r0;
   zhixianhs();  
   delay(1000);                            //0x02为画圆标志
  
 
  x=0;
   y=-250;                                         //    y0=y-r0;
                                                  // zhixianhs();
                                               // delay(4000);
     
  
  
  while(x>=0&&y<0)
         {    m=(x*x)+(y*y)-(r0*r0); 
                   
                 if(m<0)                                                 //第四象限//
                   	   {x++; m=m+2*x+1; }
                  else if(m>0) 
	                     { y++;m=m+2*y+1;}

	 
			       
            
	  else  
           {   if(fabs(m+2*x+1)<fabs(m+2*y+1))  
                 a=fabs(m+2*x+1); 
                                                    
               else   
			   a=fabs(m+2*y+1);
			 


		 
               if(a>=fabs(m+2*x+2*y+2))
		        	{y++;x++;} 
			     else 
					{ if(fabs(m+2*x+1)<fabs(m+2*y+1))  x++;  
					      else y++;}
					    
			  	       
              
			  }          
              
			       
 f=long_yuanf(x,y);
       if(f0<f)   
                { cf1=0;  n1=(f-f0)*5;}
        else 
	 { cf1=1; n1=(f0-f)*5;}
    f0=f; 
       
	   
        contrl_1(cf1,n1); 
                                              
         z=long_yuanz(x,y);

    if(z0<z)     {  cf2=1;      n2=(z-z0)*5;}

              else      
			  {  cf2=0;  n2=(z0-z)*5;}
       
      z0=z;
        contrl_2(cf2,n2);   
	  }
       
 while(x>0&&y>=0)
 {      
          
  	 
	 
         if(m>0)
	     {x--; m=m-2*x+1; }
   else if(m<0) 
	   { y++;m=m+2*y+1;}

	                                                      //第一象限//
			       
            
	  else  
           {   if(fabs(m-2*x+1)<fabs(m+2*y+1))  
                 a=fabs(m-2*x+1); 
                                                    
               else   
			   a=fabs(m+2*y+1);
			 


		 
               if(a>=fabs(m-2*x+2*y+2))
		        	{y++;x--;} 
			else 
					{ if(fabs(m-2*x+1)<fabs(m+2*y+1))  x--;  
					      else y++;}
					    
			  	       
              
			  }          
              
			       
              f=long_yuanf(x,y); 
 if(f0<f)   
                { cf1=0;  n1=(f-f0)*5;}
                   else 
				    { cf1=1; n1=(f0-f)*5;}
    f0=f;
	     
        contrl_1(cf1,n1);                                               
         z=long_yuanz(x,y);
  { if(z0<z)     {  cf2=1;      n2=(z-z0)*5;}

              else      
			  {  cf2=0;  n2=(z0-z)*5;}
              
      z0=z;}
       contrl_2(cf2,n2); 
	   }
             
   while(x<=0&&y>0)
	  {  
  
   
	 
	 
       if(m>0)
	   {y--; m=m-2*y+1; }
 else if(m<0) 
	   { x--;m=m-2*x+1;}

	 
			       
            
	  else  
           {   if(fabs(m-2*x+1)<fabs(m-2*y+1))       //第二象限//
                 a=fabs(m-2*x+1); 
                                                    
               else   
			   a=fabs(m-2*y+1);
			 


		 
               if(a>=fabs(m-2*x-2*y+2))
		        	{y--;x--;} 
			else 
					{ if(fabs(m-2*x+1)<fabs(m-2*y+1))  x--;  
					      else y--;}
					    
			  	       
              
			  }          
              
			       
              f=long_yuanf(x,y); 
 if(f0<f)   
                { cf1=0;  n1=(f-f0)*5;}
                   else 
				    { cf1=1; n1=(f0-f)*5;}
    f0=f;
	     
        contrl_1(cf1,n1);                                               
         z=long_yuanz(x,y);
    if(z0<z)     {  cf2=1;      n2=(z-z0)*5;}

              else      
			  {  cf2=0;  n2=(z0-z)*5;}
        
      z0=z;
     contrl_2(cf2,n2);
     }
 
  
  while(x<=0&&y<=0)
	  {   
  
        if(m<0)
	      {y--; m=m-2*y+1; }
 else if(m>0) 
	       { x++;m=m+2*x+1;}

	 
	  else  
           {   if(fabs(m+2*x+1)<fabs(m-2*y+1))       //第三象限//
                 a=fabs(m+2*x+1); 
                                                    
               else   
			   a=fabs(m-2*y+1);
			 


		 
               if(a>=fabs(m+2*x-2*y+2))
		        	{y--;x++;} 
			else 
					{ if(fabs(m+2*x+1)<fabs(m-2*y+1))  x++;  
					      else y--;}
					    
			  	       
              
			  }          
              
			       
              f=long_yuanf(x,y); 
         if(f0<f)   
                { cf1=0;  n1=(f-f0)*5;}
                   else 
				    { cf1=1; n1=(f0-f)*5;}
    f0=f; 
        contrl_1(cf1,n1);                                               
         z=long_yuanz(x,y);
      if(z0<z)     {  cf2=1;      n2=(z-z0)*5;}

              else      
			  {  cf2=0;  n2=(z0-z)*5;}
        
      z0=z;
     contrl_2(cf2,n2);
     }    
   
  }
 /*****************************************************求z的长度**************************************/
long long_yuanz(x,y)
{ 
 double a5;
  unsigned long  a2, a3,a4;
   
  
   a2=(unsigned long)((l/2-x )*(l/2-x));
   a3=(unsigned long)((h/2+160-y)*(h/2+160-y));
  a4= a2+a3;
  a5=sqrt(a4);                               //求出z的长度,  开方,
  
  return(a5);
}
/*************************************求f的长度***************************************************************/
long long_yuanf(x,y)
{
  unsigned long u2,a5,a6,v ;
  
  a5=(unsigned long)(650-y)*(650-y);
  a6=(unsigned long)(525+x)*(x+525);
  u2=(a5+a6);

  v=sqrt(u2);


  return(v);
}


                                                            //圆函数

⌨️ 快捷键说明

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