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

📄 step.lst

📁 基于51的步进电机控制器,含有人机结口程序,软硬件测试都已通过.是不错的参考代码.
💻 LST
📖 第 1 页 / 共 3 页
字号:
 392   3               KEY=0;                         //清键值
 393   3               FLAG=1;                        //数码管闪烁标志位1(第1位闪烁)
 394   3               if(KEY==6)
 395   3               {
 396   4                  KEY=0;                      //清键值
 397   4                  Led2[0]+=1;
 398   4                  while(Led2[0]>9)
 399   4                  Led2[0]=0;
 400   4               }
 401   3               else if(KEY==4)
 402   3               break;
 403   3            }
 404   2            while(1)
 405   2            {
 406   3               KEY=0;                         //清键值
 407   3               FLAG=2;                        //数码管闪烁标志位2(第2位闪烁)
 408   3               if(KEY==6)
 409   3               {
 410   4                  KEY=0;                      //清键值
 411   4                  Led2[1]+=1;
 412   4                  while(Led2[1]>9)
 413   4                  Led2[1]=0;
 414   4               }
 415   3               else if(KEY==4)
 416   3               break;
 417   3            }
 418   2            while(1)
 419   2            {
 420   3               KEY=0;                         //清键值
 421   3               FLAG=5;                        //数码管闪烁标志位5(第5位闪烁)
 422   3               if(KEY==6)
 423   3               {
 424   4                  KEY=0;                      //清键值
 425   4                  Led2[4]+=1;
 426   4                  while(Led2[4]>9)
 427   4                  Led2[4]=0;
C51 COMPILER V7.07   STEP                                                                  11/10/2007 15:35:10 PAGE 8   

 428   4               }
 429   3               else if(KEY==4)
 430   3               break;
 431   3            }
 432   2            while(1)
 433   2            {
 434   3               KEY=0;                         //清键值
 435   3               FLAG=6;                        //数码管闪烁标志位6(第6位闪烁)
 436   3               if(KEY==6)
 437   3               {
 438   4                  KEY=0;                      //清键值
 439   4                  Led2[5]+=1;
 440   4                  while(Led2[5]>9)
 441   4                  Led2[5]=0;
 442   4               }
 443   3               else if(KEY==4)
 444   3               break;
 445   3            }
 446   2            KEY=0;                            //清键值
 447   2            FLAG=0;                           //数码管闪烁标志位0(无闪烁)
 448   2            Xe=Led2[1]*10+Led2[0];//Led2[3]*1000+Led2[2]*100+Led2[1]*10+Led2[0];//计算并存储所设坐标
 449   2            Ye=Led2[5]*10+Led2[4];//Led2[7]*1000+Led2[6]*100+Led2[5]*10+Led2[4];
 450   2         }
 451   1         while(KEY==7)                        //电机X单独运行
 452   1         {
 453   2            FLAG1=1;                          //显示切换标志位1(显示速度)
 454   2            time0_tmp=0x4000;                 //改变定时显示初值
 455   2            Led1[4]=0;Led1[5]=0;Led1[6]=0;Led1[7]=0;
 456   2            Led1[0]=SpeedX%10;Led1[1]=(SpeedX%100)/10;Led1[2]=SpeedX/100;Led1[3]=10;//显示X电机速度
 457   2            for(i=0;i<8;i++)
 458   2            {
 459   3               P1=StepX1[i];
 460   3      //         time1_int(Tx);
 461   3               delay10ms(6000/SpeedX);
 462   3            }
 463   2         }
 464   1         while(KEY==8)                        //电机Y单独运行
 465   1         {
 466   2            FLAG1=1;                          //显示切换标志位1(显示速度)
 467   2            time0_tmp=0x4000;                 //改变定时显示初值
 468   2            Led1[0]=0;Led1[1]=0;Led1[2]=0;Led1[3]=0;
 469   2            Led1[4]=SpeedY%10;Led1[5]=(SpeedY%100)/10;Led1[6]=SpeedY/100;Led1[7]=10;//显示Y电机速度
 470   2            for(i=0;i<8;i++)
 471   2            {
 472   3               P1=StepY1[i];
 473   3      //         time1_int(Tx);
 474   3               delay10ms(6000/SpeedY);
 475   3            }
 476   2         }
 477   1      }
 478          //------------------------------------------------------------------------------------
 479          // 函数名称:Go_line()
 480          // 函数功能:直线差补算法---前进
 481          //------------------------------------------------------------------------------------
 482          void Go_line(void)
 483          {
 484   1         unsigned int i,j;
 485   1         time0_tmp=0x4000;                    //改变定时显示初值
 486   1         Nxy=Xe+Ye;                           //计算总步数
 487   1         if(FLAG2==1)                         //电机正反转切换标志位1(让电机仅正转1次)
 488   1            return;
 489   1      
C51 COMPILER V7.07   STEP                                                                  11/10/2007 15:35:10 PAGE 9   

 490   1         while(Nxy!=0)                                            //差补算法
 491   1         {
 492   2            if(Fm>=0)
 493   2            {
 494   3               for(j=0;j<circle;j++)
 495   3               {
 496   4                  for(i=0;i<8;i++)
 497   4                  {
 498   5                     P1=StepX1[i];
 499   5                     delay10ms(6000/SpeedX);
 500   5      //               time1_int(Tx);
 501   5                  }
 502   4               }
 503   3               Xi+=1;
 504   3               Fm-=Ye;
 505   3            }
 506   2            else
 507   2            {
 508   3               for(j=0;j<circle;j++)
 509   3               {
 510   4                  for(i=0;i<8;i++)
 511   4                  {
 512   5                     P1=StepY1[i];
 513   5                     delay10ms(6000/SpeedY);
 514   5      //               time1_int(Ty);
 515   5                  }
 516   4               }
 517   3               Yi+=1;
 518   3               Fm+=Xe;
 519   3            }
 520   2            Nxy--;
 521   2            FLAG2=1;                          //电机正反转切换标志位1(正转)
 522   2            Led2[3]=Xi/1000;Led2[2]=(Xi%1000)/100;Led2[1]=(Xi%100)/10;Led2[0]=Xi%10;//显示当前坐标
 523   2            Led2[7]=Yi/1000;Led2[6]=(Yi%1000)/100;Led2[5]=(Yi%100)/10;Led2[4]=Yi%10;
 524   2         }
 525   1      }
 526          //------------------------------------------------------------------------------------
 527          // 函数名称:Back_line()
 528          // 函数功能:直线差补算法---回零
 529          //------------------------------------------------------------------------------------
 530          void Back_line(void)
 531          {
 532   1         unsigned int i,j;
 533   1         time0_tmp=0x4000;                    //改变定时显示初值
 534   1         Nxy=Xe+Ye;                           //计算总步数
 535   1         Fm=0;                                //加工点偏差置0
 536   1         if(FLAG2==0)                         //电机正反转切换标志位0(让电机仅反转1次)
 537   1            return;
 538   1      
 539   1         while(Nxy!=0)
 540   1         {
 541   2            if(Fm>=0)
 542   2            {
 543   3               for(j=0;j<circle;j++)
 544   3               {
 545   4                  for(i=0;i<8;i++)
 546   4                  {
 547   5                     P1=StepX2[i];
 548   5      //               time1_int(Tx);
 549   5                     delay10ms(6000/SpeedX);
 550   5                  }
 551   4               }
C51 COMPILER V7.07   STEP                                                                  11/10/2007 15:35:10 PAGE 10  

 552   3               Xi-=1;
 553   3               Fm-=Ye;
 554   3            }
 555   2            else
 556   2            {
 557   3               for(j=0;j<circle;j++)
 558   3               {
 559   4                  for(i=0;i<8;i++)
 560   4                  {
 561   5                     P1=StepY2[i];
 562   5      //               time1_int(Ty);
 563   5                     delay10ms(6000/SpeedY);
 564   5                  }
 565   4               }
 566   3               Yi-=1;
 567   3               Fm+=Xe;
 568   3            }
 569   2            Nxy--;
 570   2            FLAG2=0;                          //电机正反转切换标志位0(反转)
 571   2            Led2[3]=Xi/1000;Led2[2]=(Xi%1000)/100;Led2[1]=(Xi%100)/10;Led2[0]=Xi%10;//显示当前坐标
 572   2            Led2[7]=Yi/1000;Led2[6]=(Yi%1000)/100;Led2[5]=(Yi%100)/10;Led2[4]=Yi%10;
 573   2         }
 574   1      }
 575          //------------------------------------------------------------------------------------


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3156    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =    106       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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