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

📄 cheku.lst

📁 简易智能电动小车程序
💻 LST
字号:
C51 COMPILER V8.02   CHEKU                                                                 08/08/2007 16:37:50 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE CHEKU
OBJECT MODULE PLACED IN cheku.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE cheku.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //                         写命令子程序                 //
   2          //                                              写数据子程序                    //
   3          //                                              建立自定义字符库                //
   4          #include <reg51.h>
   5          #include<intrins.h>
   6          #include<lcd1602.h>
   7          
   8          #define uchar unsigned char
   9          #define uint unsigned int
  10          
  11          
  12          sbit  IRON=P2^1;
  13          sbit  beep=P1^7;
  14          sbit  lgt=P1^6;
  15          
  16          sbit  XJL=P2^4;
  17          sbit  XJM=P2^3;
  18          sbit  XJR=P2^2;
  19          
  20          sbit moto_en2 =P1^0;
  21          sbit moto_2   =P1^1;         //=1 move; =0 back
  22          sbit moto_pwm2=P1^2;
  23          sbit moto_en1 =P1^3;
  24          sbit moto_1   =P1^4;             //=1 move; =0 back
  25          sbit moto_pwm1=P1^5;
  26          
  27          sbit DI=P3^5;
  28          sbit DO=P3^4;
  29          sbit CS=P3^1;
  30          sbit CLK=P3^0;
  31          
  32          uint adout[2];
  33          uint g,h;
  34          uchar ironcounter=1;
  35          uchar  distance[3]={0,0,0};
  36          uint juli=0;
  37          uchar state=0,cstop=0;
  38          
  39          
  40          uchar code run[]={"RUN:"};
  41          uchar code limit[]={"LIMIT:"};
  42          uchar code irondisplay1[]={"IRON:"};
  43          uchar code irondisplay2[]={"JL:"};
  44          uchar code table[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39} ;
  45          
  46          
  47           uint lim=0,jj=0,min=0;
  48           uchar dis=0;
  49          
  50          timer0() interrupt 1
  51          {
  52   1          
  53   1        uchar ss, m=0,n=0,pp,qq;
  54   1        TH0=(65536-50000)/256;
  55   1        TL0=(65536-50000)%256;
C51 COMPILER V8.02   CHEKU                                                                 08/08/2007 16:37:50 PAGE 2   

  56   1      //      cc=min;
  57   1          lim++;
  58   1              ss=lim%20;
  59   1          if(ss==0)
  60   1               { dis++;
  61   2                 m=dis/10;
  62   2                 n=dis%10;
  63   2                 lcd_wrcmd(0x86);     
  64   2                 lcd_wrdata(table[m]); 
  65   2                 lcd_wrdata(table[n]); 
  66   2                      if(moto_en1==1 && moto_en2==1)
  67   2                      {
  68   3                                pp=m;
  69   3                                qq=n;
  70   3                        lcd_wrcmd(0x8e);      
  71   3                        lcd_wrdata(table[m]); 
  72   3                        lcd_wrdata(table[n]); 
  73   3                           }
  74   2                                else  if(moto_en1==0 && moto_en2==0 && cstop==1)
  75   2                               {
  76   3                                  
  77   3                                      lcd_wrcmd(0x8e);
  78   3                                  lcd_wrdata(table[pp]);
  79   3                                      lcd_wrdata(table[qq]);  
  80   3                               } 
  81   2                      
  82   2            }
  83   1         
  84   1      
  85   1          if(lim==1800)
  86   1          {
  87   2             moto_en1=0;
  88   2             moto_en2=0;                         //check      stop()
  89   2             lim=0;
  90   2                 TR0=0;
  91   2          }
  92   1      
  93   1      }
  94          
  95          void ext0(void) interrupt 0
  96          { 
  97   1       juli++;
  98   1      }
  99          
 100          measure()
 101          {
 102   1        
 103   1         uint mout;
 104   1         uchar i;
 105   1         mout=juli;
 106   1         mout=mout*19/72;
 107   1         distance[0]=mout/100;
 108   1         mout=mout%100;
 109   1         distance[1]=mout/10;
 110   1         distance[2]=mout%10;  
 111   1      
 112   1         lcd_wrcmd(0xcb);
 113   1         for(i=0;i<3;i++)  lcd_wrdata(0x30+distance[i]); 
 114   1      }
 115          
 116          
 117          ironcnt()
C51 COMPILER V8.02   CHEKU                                                                 08/08/2007 16:37:50 PAGE 3   

 118          {       uchar a,b,c,j;
 119   1          uint i;              
 120   1       //    uint cc;
 121   1      
 122   1              if(IRON==0)
 123   1              {         
 124   2                      measure();      
 125   2                  beep=1; 
 126   2                              lgt=1;
 127   2                              delay(65000);  
 128   2                              beep=0;
 129   2                              lgt=0;  
 130   2                
 131   2                              b=ironcounter/10;
 132   2                      c=ironcounter%10;
 133   2              
 134   2                              lcd_wrcmd(0xc5);
 135   2                      lcd_wrdata(table[b]);  
 136   2                      lcd_wrdata(table[c]); 
 137   2                      
 138   2                              while(1)
 139   2                              {
 140   3                              a=IRON;
 141   3                                      if((a & 0xff)==0x01) break;
 142   3                                      }        
 143   2                              
 144   2                              ironcounter++;  
 145   2                                      
 146   2                       if( XJL==0 && XJR==0 && XJM==0)        //检测到c点铁片
 147   2                           {
 148   3                                 
 149   3                      moto_en1=0;
 150   3                                  moto_en2=0;         
 151   3                                  for(i=0;i<10;i++)
 152   3                                      { beep=1;lgt=1; 
 153   4                                      for(j=0;j<10;j++)
 154   4                                        delay(5000);
 155   4                                        beep=0;lgt=0;
 156   4                                      for(j=0;j<10;j++)
 157   4                                        delay(5000);
 158   4                                       }
 159   3              
 160   3                              moto_en1=1;
 161   3                                              moto_en2=1;
 162   3                                      state=1;        
 163   3                   }  
 164   2              }
 165   1      }
 166          
 167          moveforward()
 168          { moto_1=1;
 169   1        moto_2=1;
 170   1      
 171   1       
 172   1        moto_en1=1;
 173   1        moto_pwm1=0;
 174   1      
 175   1        moto_en2=1;
 176   1        moto_pwm2=0;
 177   1                     
 178   1      }
 179          
C51 COMPILER V8.02   CHEKU                                                                 08/08/2007 16:37:50 PAGE 4   

 180          
 181          
 182          turn(uchar x,uchar y)
 183          { moto_1=1;
 184   1        moto_2=1;
 185   1      
 186   1        if(x==0) {moto_en1=0;  delay(y);moto_en1=1;}
 187   1        if(y==0) {moto_en2=0;  delay(x);moto_en2=1;}
 188   1      
 189   1      } 
 190          
 191          unsigned char adc_0838convert(uchar channel)
 192          {  
 193   1          uchar i;
 194   1          uchar T1,T2=1;
 195   1           CS=1;
 196   1         _nop_();_nop_();_nop_();_nop_();
 197   1      
 198   1          CLK=0;
 199   1          CS=0;            //使AD通道打开
 200   1          DI = 1;          //Start bit=1
 201   1          CLK = 1;
 202   1      
 203   1          CLK=0;
 204   1          CS=0;          
 205   1          DI = 1;          
 206   1          CLK = 1;
 207   1      
 208   1          for(i=0;i<3;i++)
 209   1              {
 210   2            CLK = 0;
 211   2            if(channel&1)DI=1;
 212   2                else DI=0;
 213   2                channel=channel>>1;       
 214   2            CLK = 1;
 215   2          }
 216   1          CLK=0;
 217   1          CLK=1;
 218   1           for(i=0;i<=6;i++)
 219   1               {
 220   2               CLK = 0;                  //时钟为低电平
 221   2                       DO=1;
 222   2               if(DO)
 223   2                       {                         //如果采集到的位为1
 224   3                 T1=T1+1;          //给临时存储Temp1加1
 225   3                 T1=T1<<1;
 226   3                       }                    //临时存储器左移一位
 227   2               else
 228   2                 T1=T1<<1;          //如果采集到的数位为0,临时存储器左移一位
 229   2                       _nop_();
 230   2               _nop_();
 231   2               _nop_();
 232   2               _nop_();
 233   2               CLK = 1;    
 234   2            }                             //时钟为高电平,完成一个时钟周期数据采集
 235   1             CLK = 0;
 236   1             if(DO)  T1=T1+1;
 237   1             if(DO)  T2=0x80;
 238   1      
 239   1             CLK = 1; 
 240   1                                            //采集数据校验          
 241   1             
C51 COMPILER V8.02   CHEKU                                                                 08/08/2007 16:37:50 PAGE 5   

 242   1             for(i=0;i<=6;i++)
 243   1               {
 244   2                 CLK=0;
 245   2                 if(DO){
 246   3                   T2=T2>>1;
 247   3                   T2=T2+0x80;  }
 248   2                 else
 249   2                   T2=T2>>1;
 250   2                 CLK = 1; 
 251   2               }
 252   1         CS = 1;
 253   1         return T2;
 254   1      }
 255          
 256          
 257          garage(void)
 258          {
 259   1                signed char  ii,jj;
 260   1                adout[0]=adc_0838convert(0); 
 261   1            g=adout[0];
 262   1            delay(5);  
 263   1                adout[1]=adc_0838convert(1); 
 264   1                h=adout[1];
 265   1                ii=g-h;
 266   1                jj=h-g;
 267   1                if(ii>5 ) 
 268   1                 {  moto_en1=0;
 269   2                    moto_en2=1;
 270   2       
 271   2                  }  
 272   1                 if(jj>5) 
 273   1                 {  moto_en2=0;
 274   2                    moto_en1=1;
 275   2       
 276   2                      }   
 277   1                 if(ii<5 && jj<5) 
 278   1                   moveforward(); 
 279   1      
 280   1                   XJL=1;
 281   1               XJM=1;
 282   1               XJR=1;
 283   1                       if(XJL==1 && XJM==1 && XJR==1)  {moto_en1=0;moto_en2=0;cstop=1;} 
 284   1                      
 285   1                 
 286   1       }        
 287          
 288          move()
 289          {
 290   1           
 291   1                       XJL=1;
 292   1               XJM=1;
 293   1               XJR=1;
 294   1      
 295   1                   if(XJL==0 && XJM==1 && XJR==0 ) moveforward();             
 296   1                   if(XJL==0 && XJM==1 && XJR==1 ) turn(0,500);                  //right      
 297   1                       if(XJL==1 && XJM==0 && XJR==0 ) turn(65000,0);
 298   1                   if(XJL==0 && XJM==0 && XJR==1 ) turn(0,65000);
 299   1               if(XJL==1 && XJM==1 && XJR==0 ) turn(500,0);              //left       
 300   1               if(XJL==0 && XJM==0 && XJR==0 ) {moto_1=0;moto_2=0;delay(20000);}
 301   1      
 302   1                   ironcnt();
 303   1      }        
C51 COMPILER V8.02   CHEKU                                                                 08/08/2007 16:37:50 PAGE 6   

 304          
 305          main()
 306          { 
 307   1        uchar k;
 308   1        moto_en1=1;
 309   1        moto_en2=1;
 310   1        moto_1=1;
 311   1        moto_2=1;                           // check   
 312   1        moto_pwm1=0;
 313   1        moto_pwm2=0;
 314   1        lgt=0;
 315   1        beep=0;
 316   1        IRON=1;
 317   1      
 318   1        TMOD=0x01;                                     
 319   1        TH0=(65536-50000)/256;
 320   1        TL0=(65536-50000)%256;
 321   1      
 322   1       EA=1; 
 323   1       ET0=1;
 324   1       TR0=1;
 325   1       EX0=1;
 326   1       IT0=1;
 327   1       
 328   1        //display menu
 329   1               lcd_ini();
 330   1           lcd_wrcmd(1);
 331   1               lcd_wrcmd(0x80);
 332   1               for(k=0;k<6;k++) lcd_wrdata(limit[k]);
 333   1               lcd_wrcmd(0x8a);
 334   1               for(k=0;k<4;k++) lcd_wrdata(run[k]);
 335   1      
 336   1           lcd_wrcmd(0xc0);   
 337   1               for(k=0;k<5;k++) lcd_wrdata(irondisplay1[k]);
 338   1               lcd_wrcmd(0xc8);
 339   1               for(k=0;k<3;k++) lcd_wrdata(irondisplay2[k]);
 340   1               //cm
 341   1               lcd_wrcmd(0xce);          
 342   1               lcd_wrdata('c');
 343   1               lcd_wrdata('m');       
 344   1               
 345   1               lcd_wrcmd(0xc5);
 346   1               lcd_wrdata(0x30);
 347   1               lcd_wrdata(0x30);
 348   1         
 349   1               lcd_wrcmd(0xcb);
 350   1               for(k=0;k<3;k++) lcd_wrdata(0x30);   
 351   1      
 352   1      
 353   1        while(1)
 354   1        {        
 355   2          // look for cute and iron
 356   2             if(state==0)   move(); 
 357   2                   
 358   2                                 
 359   2               // 找光源
 360   2                 if(state==1)   garage();
 361   2               
 362   2        }     
 363   1      
 364   1      
 365   1      
C51 COMPILER V8.02   CHEKU                                                                 08/08/2007 16:37:50 PAGE 7   

 366   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1113    ----
   CONSTANT SIZE    =     64    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       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 + -