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

📄 main.lst

📁 用电键控制步进电机朝各个方向做曲线
💻 LST
📖 第 1 页 / 共 2 页
字号:
 287   3                              if (sta2==4)PA2=1;
 288   3                              if (sta2==5)PC2=0;
 289   3                      }
 290   2                }
 291   1      }
 292          
 293          float Pointab_A(float x,float y)//变量转换xy-a
 294          {
 295   1              return(sqrt((1150-y)*(1150-y)+(x+150)*(x+150)));
 296   1      }
 297          
 298          float Pointab_B(float x,float y) //变量转换xy-b
 299          {
 300   1              return(sqrt((1150-y)*(1150-y)+(950-x)*(950-x)));
 301   1      }
 302          
 303          float Pointxy_X(float a,float b)//变量转换ab-x
C51 COMPILER V7.50   MAIN                                                                  09/12/2005 03:25:56 PAGE 6   

 304          {
 305   1              return((a*a+c*c-b*b)/2/c-150);
 306   1      }
 307          
 308          float Pointxy_Y(float a,float b) //变量转换ab-y
 309          {
 310   1              return(1000-sin(acos((a*a+c*c-b*b)/2/a/c))*a+150);
 311   1      }
 312          
 313          void Lineto(float x, float y)
 314          {
 315   1              long i,j;
 316   1              float xstep,ystep,deltla,deltlb,lastx,lasty;
 317   1              deltla=Pointab_A(x,y)-alast;
 318   1              deltlb=Pointab_B(x,y)-blast;
 319   1              if(abs(deltla)>abs(deltlb))j=(long)(abs(deltla)/minline+0.5);
 320   1              else j=(long)(abs(deltlb)/minline+0.5);
 321   1              xstep=(x-xlast)/j;
 322   1              ystep=(y-ylast)/j;
 323   1              lastx=xlast;
 324   1              lasty=ylast;
 325   1              for(i=0;i<j;i++)Stepto(lastx+i*xstep,lasty+i*ystep);
 326   1      }
 327          
 328          void Stepto(float x, float y)
 329          {
 330   1              float anew,bnew;
 331   1              anew=Pointab_A(x,y);
 332   1              bnew=Pointab_B(x,y);
 333   1              RunA(anew>alast?(long)(anew-alast+0.5):(long)(alast-anew+0.5),anew>alast?pull:push);
 334   1              RunB(bnew>blast?(long)(bnew-blast+0.5):(long)(blast-bnew+0.5),bnew>blast?pull:push);
 335   1              alast=alast+(float)((long)(anew-alast+((anew-alast)>0?0.5:-0.5)));
 336   1              blast=blast+(float)((long)(bnew-blast+((bnew-blast)>0?0.5:-0.5)));
 337   1              xlast=Pointxy_X(alast,blast);
 338   1              ylast=Pointxy_Y(alast,blast);
 339   1              send[0]=(long)ylast%10;
 340   1              send[1]=(long)ylast/10%10;
 341   1              send[2]=(long)ylast/100%10;
 342   1              send[3]=(long)ylast/1000%10;
 343   1              send[4]=(long)xlast%10;
 344   1              send[5]=(long)xlast/10%10;
 345   1              send[6]=(long)xlast/100%10;
 346   1              //Display(send);
 347   1      }
 348          
 349          
 350          void Circle (float x,float y,float r)//画圆程序  
 351          {
 352   1              long i,j;
 353   1              float C;
 354   1              C=Pi*2.*r;
 355   1              j=(long)(C/minline);
 356   1              for(i=0;i<j;i++) Stepto(x+r*cos(2*Pi*(i+1)/j),y+r*sin(2*Pi*(i+1)/j));
 357   1      }
 358          
 359          //*
 360          void Mypath (void) //将物体直线运动 5mm*200
 361          {
 362   1              Lineto(0,0);
 363   1              if(!KEY_INT)
 364   1              {
 365   2                      key=ZLG7290_GetKey();
C51 COMPILER V7.50   MAIN                                                                  09/12/2005 03:25:56 PAGE 7   

 366   2                      return;
 367   2              }
 368   1              Lineto(800,800);
 369   1              if(!KEY_INT)
 370   1              {
 371   2                      key=ZLG7290_GetKey();
 372   2                      return;
 373   2              }
 374   1              Lineto(600,1000);
 375   1              if(!KEY_INT)
 376   1              {
 377   2                      key=ZLG7290_GetKey();
 378   2                      return;
 379   2              }
 380   1              Lineto(400,0);
 381   1              if(!KEY_INT)
 382   1              {
 383   2                      key=ZLG7290_GetKey();
 384   2                      return;
 385   2              }
 386   1              Lineto(0,400);
 387   1              if(!KEY_INT)
 388   1              {
 389   2                      key=ZLG7290_GetKey();
 390   2                      return;
 391   2              }
 392   1              Lineto(800,400);
 393   1              if(!KEY_INT)
 394   1              {
 395   2                      key=ZLG7290_GetKey();
 396   2                      return;
 397   2              }
 398   1              Lineto(200,1000);
 399   1              if(!KEY_INT)
 400   1              {
 401   2                      key=ZLG7290_GetKey();
 402   2                      return;
 403   2              }
 404   1              Lineto(0,800);
 405   1              if(!KEY_INT)
 406   1              {
 407   2                      key=ZLG7290_GetKey();
 408   2                      return;
 409   2              }
 410   1      }
 411          //*/
 412          //*
 413          unsigned int Trace (void) //将物体直线运动 5mm*200
 414          {
 415   1              //flag_trace=trace_ru;
 416   1              Go_ru();
 417   1              //if(flag_trace=trace_ru)Go_ru();
 418   1              //if(flag_trace=trace_lu)Go_lu();
 419   1              //if(flag_trace=trace_rd)Go_rd();
 420   1              //if(flag_trace=trace_ld)Go_ld();
 421   1              return 0;
 422   1      }
 423          
 424          void Go_ru(void) //右上
 425          {
 426   1              int i,i1;
 427   1              if(flag_trace<97)return ;
C51 COMPILER V7.50   MAIN                                                                  09/12/2005 03:25:56 PAGE 8   

 428   1              while(ad549()<gate)RunB(10,pull); //右
 429   1              for(i=0;i<searth;i++)while(ad549()>gate)RunA(1,pull);//上
 430   1              if(i>=searth) //没找到
 431   1              {
 432   2                      for(i=0;i<searth*2;i++)while(ad549()>gate)RunA(1,push); //下
 433   2                      if(i>=searth*2) //没找到
 434   2                      {
 435   3                              i1=i;
 436   3                              for(i=0;i<searth*2;i++)RunA(1,pull);    //退回去,上
 437   3                              flag_trace--;
 438   3                              Go_lu(); //走左上
 439   3                      }
 440   2                      else Go_rd(); //找到,走右下
 441   2              }
 442   1              else 
 443   1              {
 444   2                      Go_ru();//找到,走右上
 445   2                      flag_trace=99;
 446   2              }
 447   1      }
 448          
 449          
 450          
 451          void Go_rd(void) //右下
 452          {
 453   1              int i,i1;
 454   1              //flag_trace=trace_rd;
 455   1              if(flag_trace<97)return ;
 456   1              while(ad549()<gate)RunB(10,pull); //右
 457   1              for(i=0;i<searth;i++)while(ad549()>gate)RunA(1,push);//下
 458   1              if(i>=searth) //没找到
 459   1              {
 460   2                      for(i=0;i<searth*2;i++)while(ad549()>gate)RunA(1,pull); //上
 461   2                      if(i>=searth*2) //没找到
 462   2                      {
 463   3                              i1=i;
 464   3                              for(i=0;i<searth*2;i++)RunA(1,push);    //退回去,下
 465   3                      flag_trace--;           
 466   3                              Go_ld(); //走左下
 467   3                      }
 468   2                      else Go_ru(); //找到,走右上
 469   2              }
 470   1              else 
 471   1              {
 472   2                      Go_rd();//找到,走继续右下
 473   2                      flag_trace=99;
 474   2              }
 475   1      }
 476          
 477          void Go_ld(void) //左下
 478          {
 479   1              int i,i1;
 480   1              //flag_trace=trace_ld;
 481   1              if(flag_trace<97)return ;
 482   1              while(ad549()<gate)RunB(10,push); //右左
 483   1              for(i=0;i<searth;i++)while(ad549()>gate)RunA(1,push);//下
 484   1              if(i>=searth) //没找到
 485   1              {
 486   2                      for(i=0;i<searth*2;i++)while(ad549()>gate)RunA(1,push); //上
 487   2                      if(i>=searth*2) //没找到
 488   2                      {
 489   3                              i1=i;
C51 COMPILER V7.50   MAIN                                                                  09/12/2005 03:25:56 PAGE 9   

 490   3                              for(i=0;i<searth*2;i++)RunA(1,pull);    //退回去,下
 491   3                              flag_trace--;
 492   3                              Go_rd(); //走右下
 493   3                      }
 494   2                      else Go_ru(); //找到,走右上
 495   2              }
 496   1              else 
 497   1              {
 498   2                      Go_ld();//找到,走左下
 499   2                      flag_trace=99;
 500   2              }
 501   1      }
 502          
 503          void Go_lu(void) //左上
 504          {
 505   1              int i,i1;
 506   1              //flag_trace=trace_lu;
 507   1              if(flag_trace<97)return ;
 508   1              while(ad549()<gate)RunB(10,push); //左
 509   1              for(i=0;i<searth;i++)while(ad549()>gate)RunA(1,pull);//上
 510   1              if(i>=searth) //没找到
 511   1              {
 512   2                      for(i=0;i<searth*2;i++)while(ad549()>gate)RunA(1,push); //下
 513   2                      if(i>=searth*2) //没找到
 514   2                      {
 515   3                              i1=i;
 516   3                              for(i=0;i<searth*2;i++)RunA(1,pull);    //退回去,上
 517   3                              flag_trace--;
 518   3                              Go_ru(); //走右上
 519   3                      }
 520   2                      else Go_rd(); //找到,走
 521   2              }
 522   1              else 
 523   1              {
 524   2                      Go_lu();//找到,走左上
 525   2                      flag_trace=99;
 526   2              }
 527   1      }
 528          //*/
 529          
 530          unsigned int ad549(void)
 531          {
 532   1              unsigned int AD1=0;
 533   1              unsigned char i;
 534   1              unsigned int AD2=0;
 535   1              CS = 1;
 536   1              CLK = 0;
 537   1              DOUT= 1; // Initialize for Read 
 538   1              CS = 0;  // Enable and Drive out Bit9
 539   1              for(i=0;i<12;i++)
 540   1              {
 541   2                      AD1 = AD1<<1;
 542   2                      if( DOUT ) AD1 = AD1|0x0001; 
 543   2                      DIN=(bit)(AD2&0x8000);
 544   2                      CLK=1;
 545   2                      AD2<<=1;
 546   2                      _nop_();
 547   2                      _nop_();
 548   2                      CLK=0; // 
 549   2                      _nop_();
 550   2                      _nop_();
 551   2              } 
C51 COMPILER V7.50   MAIN                                                                  09/12/2005 03:25:56 PAGE 10  

 552   1              AD1 = AD1>>1;
 553   1              CS = 1;
 554   1              for(i=0;i<20;i++); // delay >21us
 555   1              return AD1;
 556   1      }
 557          
 558          
 559          
 560          //*/
 561          
 562          
 563          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   4216    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     45     144
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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