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

📄 cdle-j20_main.lst

📁 05年电赛小车悬挂程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.02a   CDLE_J20_MAIN                                                        04/28/2007 10:09:25 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE CDLE_J20_MAIN
OBJECT MODULE PLACED IN CDLE-J20_Main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE CDLE-J20_Main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include <AT89X51.h>
   3          #include <math.h>
   4          //#define DX 9                      
   5          
   6          //static unsigned char data CN[4];
   7          static unsigned char data DX=11;
   8          static unsigned char data DELAYTIME=4;
   9          
  10          static unsigned char data ii,k;         /////////////k
  11          static unsigned int data i;//,j;
  12          static unsigned char data j;
  13          
  14          //static unsigned char idata j,k;//,motor;
  15          //static unsigned char idata dl,temp,de;
  16          
  17          //static unsigned int Count;
  18          
  19          //static unsigned int ComCount[TimerNum];            ////////////计数终值
  20          //static unsigned int ComCount_[TimerNum];           ////////////与终值的个数
  21          //static unsigned char idata ComNumber[TimerNum];
  22          //static unsigned char idata Number;
  23          
  24          //static unsigned char data CloseCount[TimerNum];        ///////// 关断计数器
  25          
  26          ///////////////////遥控//////////////////////////////////////
  27          static unsigned char data IRCode[3],IRCON,IRCON2;
  28          //static unsigned char data DT;
  29          //static unsigned char data flag;      /////////// 0  对应串口  1 遥控
  30          
  31          //static unsigned char data GetCode;
  32          
  33          unsigned int a_;
  34          
  35          static unsigned char data Fasheng_Flag;
  36          
  37          static float idata X0,Y0;  ///////////   chushi  X  Y
  38          static float data K=0.0;
  39          static float idata X,Y,DL1_,DL2_,tempDL1,tempDL2;
  40          static unsigned int data Step;
  41          
  42          //static unsigned char data cof=6;
  43          static float data Coef=0.33;//=3.1415927/cof;
  44          
  45          static unsigned char idata KEY=0;
  46          
  47          bit keytimes=0;
  48          bit Button=0;
  49          
  50          static unsigned char idata X0temp=0,Y0temp=0;
  51          
  52          static unsigned char idata Disp[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};///0-9
  53          
  54          static unsigned char idata Shangshuo=0;
  55          
C51 COMPILER V7.02a   CDLE_J20_MAIN                                                        04/28/2007 10:09:25 PAGE 2   

  56          static unsigned char data g,s,b,q;
  57          
  58          static unsigned char idata StepMoter[8]={0xF5,0xF1,0xF9,0xF8,0xFA,0xF2,0xF6,0xF4}; ///8 Steps;  ---->
  59          
  60          
  61          static unsigned char idata n1,n2;
  62          static unsigned char idata mm=0;
  63          //bit rightorleft=0;    ///////1 right  0 left
  64          //bit WhoDa=0;        /////   1  DL1_  0  DL2_
  65          
  66          static unsigned char idata ThePos1=0,ThePos2=0;
  67          
  68          //P0_0---------P0_3    右边 
  69          //P2_0---------P2_3     左
  70          
  71          /////////////////////////////////////////////////////////////////////////////
  72          //unsigned char TS[8] = {254,252,248,240,224,192,128,0};
  73          
  74          void Delay()
  75          {
  76   1         for(k=0;k<DELAYTIME;k++)
  77   1           for(a_=0;a_<400;a_++)
  78   1               ;
  79   1      }
  80          
  81          void GetDL12()
  82          {
  83   1         DL1_=((X-950)+(Y-1150)*K)/sqrt((950-X)*(950-X)+(1150-Y)*(1150-Y))*DX;///右电机
  84   1         DL2_=((X+150)+(Y-1150)*K)/sqrt((X+150)*(X+150)+(1150-Y)*(1150-Y))*DX;////左电机
  85   1      }
  86          
  87          void DriveMoter(/*float DL1_,float DL2_*/) ////DL1  是右边  
  88          {
  89   1      
  90   1         //Coef=3.1415927/cof;
  91   1      ok:
  92   1          n1=abs(DL1_)/Coef;     ///右电机转动的相数;
  93   1          n2=abs(DL2_)/Coef;     ////左电机转动的相数
  94   1      
  95   1              if(DL1_>0)
  96   1              tempDL1+=(DL1_-n1*Coef);
  97   1              else
  98   1          tempDL1+=DL1_+n1*Coef;
  99   1          
 100   1              if(DL2_>0)
 101   1              tempDL2+=(DL2_-n2*Coef);
 102   1              else
 103   1          tempDL2+=DL2_+n2*Coef;
 104   1      
 105   1      /*
 106   1          if(n1<10)     ////////////// 3mm   buneng tongguo!
 107   1          {
 108   1                 //n1=0;
 109   1                 tempDL1+=DL1_;
 110   1                 n1=abs(tempDL1)/Coef;
 111   1             if(n1>10)
 112   1                 {
 113   1                    DL1_=tempDL1;
 114   1                    tempDL1=0;         
 115   1                 }
 116   1                 else
 117   1                 n1=0;
C51 COMPILER V7.02a   CDLE_J20_MAIN                                                        04/28/2007 10:09:25 PAGE 3   

 118   1              }
 119   1               if(n2<10)
 120   1          {
 121   1                 //n1=0;
 122   1                 tempDL2+=DL2_;
 123   1                 n2=abs(tempDL2)/Coef;
 124   1             if(n2>10)
 125   1                 {
 126   1                    DL2_=tempDL2;
 127   1                        tempDL2=0;
 128   1                       
 129   1                 }
 130   1                 else
 131   1                 n2=0;
 132   1              }
 133   1      */
 134   1      
 135   1          while(mm<n1||mm<n2)
 136   1              {
 137   2                 mm++;
 138   2                 if(mm<=n1)
 139   2                 {
 140   3                   if(DL1_>0) P1=StepMoter[(mm+ThePos1)%8];
 141   3                       else P1=StepMoter[(8-mm%8+ThePos1)%8];     // mm%4
 142   3                 }
 143   2      
 144   2                 if(mm<=n2)
 145   2                 {
 146   3                   if(DL2_>0) P2=StepMoter[(mm+ThePos2)%8];
 147   3                       else P2=StepMoter[(8-mm%8+ThePos2)%8];
 148   3                 }
 149   2                 
 150   2                 Delay();
 151   2              }
 152   1      
 153   1           
 154   1           if(n1)
 155   1           {if(DL1_>0) ThePos1=(n1+ThePos1)%8;else ThePos1=(8-n1%8+ThePos1)%8;}
 156   1               if(n2)
 157   1               {if(DL2_>0) ThePos2=(n2+ThePos2)%8;else ThePos2=(8-n2%8+ThePos2)%8;}
 158   1          
 159   1               mm=0;
 160   1      
 161   1           if(abs(tempDL1)>3||abs(tempDL2)>3)
 162   1               {
 163   2                   DL1_=tempDL1;
 164   2                   DL2_=tempDL2;
 165   2               
 166   2                       tempDL1=0;
 167   2                       tempDL2=0;
 168   2                       goto ok;
 169   2               }
 170   1      
 171   1      
 172   1      }
 173          void main(void)
 174          {
 175   1      
 176   1              
 177   1          X0=400;
 178   1          Y0=400; //////////////初始  cm
 179   1      
C51 COMPILER V7.02a   CDLE_J20_MAIN                                                        04/28/2007 10:09:25 PAGE 4   

 180   1          X=0;
 181   1          Y=0;
 182   1       //   DL1_=0.0;
 183   1      //    DL2_=0.0;
 184   1      
 185   1          Fasheng_Flag=0;
 186   1          
 187   1              
 188   1              TMOD=0x11;  //////都是方式1
 189   1      
 190   1              
 191   1          EA = 1;     
 192   1              //ES = 1;       //开串口中断
 193   1      
 194   1          ET0 = 1;     /////// T0中断
 195   1      
 196   1          TR0 = 0;  //启动0定时器
 197   1      
 198   1      
 199   1              ET1=1;
 200   1      
 201   1              TL1 = 0x77;         /////// 定时5ms
 202   1          TH1 = 0xEC;
 203   1         
 204   1                 // EX1=1;
 205   1      
 206   1          EX0 = 1;       ////////////////////////外部0中断  
 207   1         
 208   1          q=X0/100;
 209   1              b=X0/10-q*10;
 210   1      
 211   1              s=Y0/100;
 212   1              g=Y0/10-s*10;
 213   1      
 214   1      
 215   1              X0temp=X0/10;
 216   1              Y0temp=Y0/10;
 217   1      
 218   1          P0=Disp[0];
 219   1          P3=0xFF;
 220   1      
 221   1      //    ThePos1=0;ThePos2=0;         
 222   1      //      P1=StepMoter[0];////////////初相
 223   1      //      P2=StepMoter[0];
 224   1       
 225   1          PT0=1;         ////// T0  gao you xian ji! 
 226   1      
 227   1          TR1=1;
 228   1      
 229   1              do
 230   1                      {       
 231   2                                                      
 232   2                  // Fasheng();
 233   2                   if(Fasheng_Flag==10)
 234   2                   {
 235   3                      KEY++;                //// KEY=1 要求输入第一组数据   X0
 236   3                      if(KEY==2)                //KEY=2 确认第一组,要求输入第二组数据   Y0
 237   3                      {
 238   4                                         X0=X0temp*10.0;
 239   4      
 240   4                                         q=X0/100;
 241   4                                         b=X0/10-q*10;
C51 COMPILER V7.02a   CDLE_J20_MAIN                                                        04/28/2007 10:09:25 PAGE 5   

 242   4                      }
 243   3                      else
 244   3                                      if(KEY==3)
 245   3                                      {
 246   4                                         Y0=Y0temp*10.0;
 247   4                                         s=Y0/100;
 248   4                                         g=Y0/10-s*10;
 249   4                                         KEY=0;
 250   4                                      }
 251   3                                                ///KEY=3 确认第二组Y0
 252   3                      Fasheng_Flag=0;
 253   3                      //KEY=3;
 254   3                   }
 255   2                   
 256   2                   if(Fasheng_Flag==1&&!KEY) ///////////走直线
 257   2                   {
 258   3                          ThePos1=0;ThePos2=0;         
 259   3                              P1=StepMoter[0];////////////初相
 260   3                              P2=StepMoter[0];
 261   3       
 262   3      
 263   3                                              tempDL1=0.0;
 264   3                                              tempDL2=0.0;
 265   3                       if(X0)          ///////////////X0!=0)
 266   3                      {
 267   4                         K=Y0/X0;
 268   4                         Step=X0/DX;
 269   4      
 270   4                       for(i=0;i<=Step;i++)
 271   4                       {
 272   5                          X=i*DX;
 273   5                          Y=K*X;
 274   5                          if(X>800.0||Y>1000.0)
 275   5                          {
 276   6                              break;
 277   6                          }
 278   5      
 279   5                            GetDL12();
 280   5                                                 //左右驱动电机 分别到达 DL1 DL2的距离
 281   5                            DriveMoter();  
 282   5                                                
 283   5                            q=X/100; 
 284   5                                                b=X/10-q*10;           /////////X0
 285   5      
 286   5      
 287   5                                                s=Y/100;     //cm
 288   5                                                g=Y/10-s*10; 
 289   5                                               // Delay();
 290   5                            }
 291   4                        }
 292   3                                        else if(Y0)

⌨️ 快捷键说明

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