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

📄 step.lst

📁 基于51的步进电机控制器,含有人机结口程序,软硬件测试都已通过.是不错的参考代码.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 202   4                              ZLG7290_SendBuf(Place,8);
 203   4                                      delay10ms(1);
 204   4                              while(1)
 205   4                              {
 206   5                                       KEY=0;                         //清键值
 207   5                                      FLAG=1;                        //数码管闪烁标志位1(第1位闪烁)
 208   5                                      if(KEY==6)
 209   5                                      {
 210   6                                               KEY=0;                      //清键值
 211   6                                      Place[0]+=1;
 212   6                                      while(Place[0]>9)
 213   6                  Place[0]=0;
 214   6               }
 215   5               else if(KEY==4)
 216   5               break;
 217   5            }
 218   4            while(1)
 219   4            {
 220   5               KEY=0;                         //清键值
 221   5               FLAG=2;                        //数码管闪烁标志位2(第2位闪烁)
 222   5               if(KEY==6)
 223   5               {
 224   6                  KEY=0;                      //清键值
 225   6                  Place[1]+=1;
 226   6                  while(Place[1]>9)
 227   6                  Place[1]=0;
 228   6               }
 229   5               else if(KEY==4)
 230   5               break;
 231   5            }
 232   4            while(1)
 233   4            {
 234   5               KEY=0;                         //清键值
 235   5               FLAG=5;                        //数码管闪烁标志位5(第5位闪烁)
 236   5               if(KEY==6)
 237   5               {
 238   6                  KEY=0;                      //清键值
 239   6                  Place[4]+=1;
 240   6                  while(Place[4]>9)
 241   6                  Place[4]=0;
C51 COMPILER V7.07   STEP                                                                  11/14/2007 10:28:44 PAGE 5   

 242   6               }
 243   5               else if(KEY==4)
 244   5               break;
 245   5            }
 246   4            while(1)
 247   4            {
 248   5               KEY=0;                         //清键值
 249   5               FLAG=6;                        //数码管闪烁标志位6(第6位闪烁)
 250   5               if(KEY==6)
 251   5               {
 252   6                  KEY=0;                      //清键值
 253   6                  Place[5]+=1;
 254   6                  while(Place[5]>9)
 255   6                  Place[5]=0;
 256   6               }
 257   5               else if(KEY==4)
 258   5               break;
 259   5            }
 260   4            KEY=0;                            //清键值
 261   4            FLAG=0;                           //数码管闪烁标志位0(无闪烁)
 262   4            Xe=Place[1]*10+Place[0];//Led2[3]*1000+Led2[2]*100+Led2[1]*10+Led2[0];//计算并存储所设坐标
 263   4            Ye=Place[5]*10+Place[4];//Led2[7]*1000+Led2[6]*100+Led2[5]*10+Led2[4];
 264   4         }
 265   3         while(KEY==7)                        //电机X单独运行
 266   3         {
 267   4            Speed[4]=0;Speed[5]=0;Speed[6]=0;Speed[7]=0;
 268   4            Speed[0]=SpeedX%10;Speed[1]=(SpeedX%100)/10;Speed[2]=SpeedX/100;Speed[3]=10;//显示X电机速度
 269   4                ZLG7290_SendBuf(Speed,8);
 270   4                delay10ms(1);
 271   4            for(i=0;i<8;i++)
 272   4            {
 273   5               P1=StepX1[i];
 274   5      //         time1_int(Tx);
 275   5               delay10ms(6000/SpeedX);
 276   5            }
 277   4         }
 278   3         while(KEY==8)                        //电机Y单独运行
 279   3         {      
 280   4            Speed[4]=0;Speed[5]=0;Speed[6]=0;Speed[7]=0;
 281   4            Speed[0]=SpeedY%10;Speed[1]=(SpeedY%100)/10;Speed[2]=SpeedY/100;Speed[3]=10;//显示X电机速度
 282   4                ZLG7290_SendBuf(Speed,8);
 283   4                delay10ms(1);
 284   4            for(i=0;i<8;i++)
 285   4            {
 286   5               P1=StepY1[i];
 287   5      //         time1_int(Tx);
 288   5               delay10ms(6000/SpeedY);
 289   5             }
 290   4           }
 291   3              }
 292   2         }
 293   1      }
 294          //------------------------------------------------------------------------------------
 295          // 函数名称:Go_line()
 296          // 函数功能:直线差补算法---前进
 297          //------------------------------------------------------------------------------------
 298          void Go_line(void)
 299          {
 300   1         unsigned int i,j;
 301   1        // time0_tmp=0x4000;                    //改变定时显示初值
 302   1         Nxy=Xe+Ye;                           //计算总步数
 303   1         if(FLAG2==1)                         //电机正反转切换标志位1(让电机仅正转1次)
C51 COMPILER V7.07   STEP                                                                  11/14/2007 10:28:44 PAGE 6   

 304   1            return;
 305   1      
 306   1         while(Nxy!=0)                                            //差补算法
 307   1         {
 308   2            if(Fm>=0)
 309   2            {
 310   3               for(j=0;j<circle;j++)
 311   3               {
 312   4                  for(i=0;i<8;i++)
 313   4                  {
 314   5                     P1=StepX1[i];
 315   5                     delay10ms(6000/SpeedX);
 316   5      //               time1_int(Tx);
 317   5                  }
 318   4               }
 319   3               Xi+=1;
 320   3               Fm-=Ye;
 321   3            }
 322   2            else
 323   2            {
 324   3               for(j=0;j<circle;j++)
 325   3               {
 326   4                  for(i=0;i<8;i++)
 327   4                  {
 328   5                     P1=StepY1[i];
 329   5                     delay10ms(6000/SpeedY);
 330   5      //               time1_int(Ty);
 331   5                  }
 332   4               }
 333   3               Yi+=1;
 334   3               Fm+=Xe;
 335   3            }
 336   2            Nxy--;
 337   2            FLAG2=1;                          //电机正反转切换标志位1(正转)
 338   2            Place[3]=Xi/1000;Place[2]=(Xi%1000)/100;Place[1]=(Xi%100)/10;Place[0]=Xi%10;//显示当前坐标
 339   2            Place[7]=Yi/1000;Place[6]=(Yi%1000)/100;Place[5]=(Yi%100)/10;Place[4]=Yi%10;
 340   2                ZLG7290_SendBuf(Place,8);
 341   2                delay10ms(1);
 342   2         }
 343   1      }
 344          //------------------------------------------------------------------------------------
 345          // 函数名称:Back_line()
 346          // 函数功能:直线差补算法---回零
 347          //------------------------------------------------------------------------------------
 348          void Back_line(void)
 349          {
 350   1         unsigned int i,j;
 351   1        // time0_tmp=0x4000;                    //改变定时显示初值
 352   1         Nxy=Xe+Ye;                           //计算总步数
 353   1         Fm=0;                                //加工点偏差置0
 354   1         if(FLAG2==0)                         //电机正反转切换标志位0(让电机仅反转1次)
 355   1            return;
 356   1      
 357   1         while(Nxy!=0)
 358   1         {
 359   2            if(Fm>=0)
 360   2            {
 361   3               for(j=0;j<circle;j++)
 362   3               {
 363   4                  for(i=0;i<8;i++)
 364   4                  {
 365   5                     P1=StepX2[i];
C51 COMPILER V7.07   STEP                                                                  11/14/2007 10:28:44 PAGE 7   

 366   5      //               time1_int(Tx);
 367   5                     delay10ms(6000/SpeedX);
 368   5                  }
 369   4               }
 370   3               Xi-=1;
 371   3               Fm-=Ye;
 372   3            }
 373   2            else
 374   2            {
 375   3               for(j=0;j<circle;j++)
 376   3               {
 377   4                  for(i=0;i<8;i++)
 378   4                  {
 379   5                     P1=StepY2[i];
 380   5      //               time1_int(Ty);
 381   5                     delay10ms(6000/SpeedY);
 382   5                  }
 383   4               }
 384   3               Yi-=1;
 385   3               Fm+=Xe;
 386   3            }
 387   2            Nxy--;
 388   2            FLAG2=0;                          //电机正反转切换标志位0(反转)
 389   2            Place[3]=Xi/1000;Place[2]=(Xi%1000)/100;Place[1]=(Xi%100)/10;Place[0]=Xi%10;//显示当前坐标
 390   2            Place[7]=Yi/1000;Place[6]=(Yi%1000)/100;Place[5]=(Yi%100)/10;Place[4]=Yi%10;
 391   2                ZLG7290_SendBuf(Place,8);
 392   2                delay10ms(1);
 393   2         }
 394   1      }
 395          //------------------------------------------------------------------------------------


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1977    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     74       9
   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 + -