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

📄 24c02.lst

📁 (1) 程序1-跑马灯:会看到led变化。 (2) 程序2-独立键盘 :分别按“INT0/+”键和”t0/-“会看到LED变化。 (3) 程序3-定时器:会看到5个LED闪烁。 (4) 程序4-
💻 LST
字号:
C51 COMPILER V3.20,  SN-50203648  24C02                                                    10/04/07  22:09:10  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24C02.OBJ
COMPILER INVOKED BY: C:\BIN\C51.EXE 24C02.C DB OE SMALL ROM(LARGE) 

stmt level    source

   1          #include<reg51.h>
   2          sbit v1=P2^2;
   3          sbit v2=P2^4;
   4          sbit v3=P2^3;
   5          sbit h1=P2^7;
   6          sbit h2=P2^6;
   7          sbit h3=P2^5;
   8          
   9          sbit led1=P1^0;
  10          sbit led2=P1^1;
  11          sbit led3=P1^2;
  12          sbit led4=P1^3;
  13          sbit led5=P1^4;
  14          sbit shu4=P2^0;
  15          sbit shu2=P2^1;
  16          sbit shu1=P3^5;
  17          sbit shu3=P3^3;
  18          sbit sda=P3^6;
  19          sbit scl=P3^7;
  20          void start();
  21          void delay1();
  22          void delayms(unsigned int i);
  23          unsigned int read(unsigned int word_address);
  24          void  write(unsigned int word_address,da);
  25          unsigned int keyboar();
  26          
  27          unsigned int b,b1;
  28          
  29          void t0()interrupt 1 using 1  /*中断程序负责显示b的值 */
  30          {
  31   1        unsigned char a1=0,a2=0,a3=0,a4=0;
  32   1        static unsigned char yima[]={0xef,0x8c,0xb7,0xbe,0xdc,0x7e,0x7f,0xac,0xff,0xfe};
  33   1        static int k=0;
  34   1        //b++;
  35   1        a1=b/1000;
  36   1        a2=(b-a1*1000)/100;
  37   1        a3=(b-a1*1000-a2*100)/10;
  38   1        a4=b-a1*1000-a2*100-a3*10;
  39   1            if(k==0){shu4=1;shu1=0;shu2=0;shu3=0;P0=yima[a1];}
  40   1       else if(k==1){shu4=0;shu1=1;shu2=0;shu3=0;P0=yima[a4];}
  41   1       else if(k==2){shu4=0;shu1=0;shu2=1;shu3=0;P0=yima[a3];}
  42   1       else if(k==3){shu4=0;shu1=0;shu2=0;shu3=1;P0=yima[a2];}
  43   1       k++;
  44   1       if(k>3)k=0;
  45   1      
  46   1       TH0=230;
  47   1      }
  48          
  49          main()
  50          {
  51   1        
  52   1        b=read(1);
  53   1        EA=1;
  54   1        TR0=1;
  55   1        ET0=1;
C51 COMPILER V3.20,  SN-50203648  24C02                                                    10/04/07  22:09:10  PAGE 2   

  56   1        TMOD=0X01;
  57   1        while(1)
  58   1          {
  59   2           b1=keyboar();/*把按键的代表的值给b */
  60   2           if(b1>0)
  61   2             {
  62   3               if(b!=b1)
  63   3                 {
  64   4                  b=b1;
  65   4                  write(1,b);/*把b的值写到24c02的地址为1的空间 */
  66   4                  
  67   4                 }
  68   3              }
  69   2           }
  70   1      
  71   1      } 
  72          
  73          
  74           unsigned int  keyboar()/*线反转法 */
  75          { 
  76   1         static unsigned int a=0;
  77   1        unsigned char a1=0,b1=0;
  78   1        /*行线为输入线,列线为输出线 */
  79   1        v1=v2=v3=0;
  80   1        h1=h2=h3=1;
  81   1        if(P2<224)/*检查行是否有按键按下 */ 
  82   1          {
  83   2           delayms(10);
  84   2           if(P2<224)
  85   2             {
  86   3               /*行线为输入线,列线为输出线 */ 
  87   3               v1=v2=v3=0;
  88   3               h1=h2=h3=1;
  89   3               a1=P2; 
  90   3               /*行线为输出线,列线为输入线 */ 
  91   3               h1=h2=h3=0;
  92   3               v1=v2=v3=1;
  93   3               b1=P2;
  94   3        
  95   3               a=a1|b1|0x03; /*与0x03相或是为了屏蔽p2.0和p2.1的影响*/
  96   3           
  97   3              }    
  98   2            }
  99   1          
 100   1         else {
 101   2                h1=h2=h3=0;
 102   2                v1=v2=v3=1;
 103   2                if(P2<28)/*检查列是否有按键按下 */ 
 104   2                  {
 105   3                    delayms(10);
 106   3                    if(P2<28)
 107   3                    {
 108   4                      /*行线为输入线,列线为输出线 */ 
 109   4                      v1=v2=v3=0;
 110   4                      h1=h2=h3=1;
 111   4                      a1=P2; 
 112   4                      /*行线为输出线,列线为输入线 */ 
 113   4                      h1=h2=h3=0;
 114   4                      v1=v2=v3=1;
 115   4                      b1=P2;
 116   4                        
 117   4                      a=a1|b1|0x03;/*与0x03相或是为了屏蔽p2.0和p2.1的影响*/
C51 COMPILER V3.20,  SN-50203648  24C02                                                    10/04/07  22:09:10  PAGE 3   

 118   4                      
 119   4                   
 120   4                     }  
 121   3                   }
 122   2         
 123   2               } 
 124   1               
 125   1                     if(a==219){return 2;}
 126   1                      else if(a==207){return 1;}
 127   1                      else if(a==215){return 3;}
 128   1                      else if(a==187){return 5;}
 129   1                      else if(a==175){return 4;}
 130   1                      else if(a==183){return 6;}
 131   1                      else if(a==123){return 8;}
 132   1                      else if(a==111){return 7;}
 133   1                      else if(a==119){return 9;}
 134   1                      else return 0;
 135   1                   
 136   1            
 137   1        }
 138            
 139            void delayms(unsigned int i)
 140          {
 141   1        unsigned int j;
 142   1        for(;i>0;i--)
 143   1          for(j=100;j>0;j--);
 144   1      }
 145          
 146           unsigned int read(unsigned int word_address)
 147          {unsigned int i=0,m=0,j=0,k=0,read_d=0xa1,write=0xa0,b=0,da2=0;
 148   1       bit a=1,c=0;            
 149   1           start();
 150   1           j=0;
 151   1          while(1)//device address
 152   1            {
 153   2             
 154   2              k=(write<<j)&0x80;j++;
 155   2              if(k>1)b=1;
 156   2               else b=0;
 157   2              sda=b;
 158   2              delay1();
 159   2              scl=1;
 160   2              delay1();
 161   2              scl=0;
 162   2              delay1();
 163   2              sda=1;
 164   2              if(sda==0)break;
 165   2              
 166   2              
 167   2             }
 168   1              //sda=1;//check ack
 169   1              //a=sda;
 170   1              
 171   1              scl=1;
 172   1              delay1();
 173   1              scl=0;
 174   1              j=0;
 175   1           while(1)//word address
 176   1            {
 177   2             
 178   2              k=(word_address<<j)&0x80;j++;
 179   2              if(k>1)b=1;
C51 COMPILER V3.20,  SN-50203648  24C02                                                    10/04/07  22:09:10  PAGE 4   

 180   2               else b=0;
 181   2              sda=b;
 182   2              delay1();
 183   2              scl=1;
 184   2              delay1();
 185   2              scl=0;
 186   2              delay1();
 187   2              sda=1;
 188   2              if(sda==0)break;       
 189   2             }
 190   1              //sda=1;//check ack
 191   1              //a=sda;
 192   1              
 193   1              scl=1;
 194   1              delay1();
 195   1              scl=0;
 196   1              
 197   1              start();
 198   1                j=0;
 199   1         for(i=0;i<8;i++)
 200   1            {
 201   2             
 202   2              k=(read_d<<j)&0x80;
 203   2              if(k>1)b=1;
 204   2               else b=0;
 205   2              sda=b;
 206   2              delay1();
 207   2              scl=1;
 208   2              delay1();
 209   2              scl=0;
 210   2              j++;
 211   2              
 212   2             }
 213   1            
 214   1             // sda=1;//check ack
 215   1                
 216   1      //read_d data 
 217   1         for(i=0;i<8;i++)
 218   1             {
 219   2               scl=1;
 220   2               delay1();
 221   2               scl=0;       
 222   2               b=sda;
 223   2               b=b<<7;
 224   2               da2=(da2>>1)|b;
 225   2             }
 226   1            sda=1;
 227   1            delay1();
 228   1            scl=1;
 229   1            delay1();
 230   1            sda=0;
 231   1           // scl=0;
 232   1       
 233   1               
 234   1               return da2;
 235   1             
 236   1      }
 237          
 238          void  write(unsigned int word_address,da)
 239          { unsigned int i=0,m=0,j=0,k=0,//word_addr=0x00,
 240   1                      read_d=0xa1,write=0xa0;
 241   1        bit b=0;
C51 COMPILER V3.20,  SN-50203648  24C02                                                    10/04/07  22:09:10  PAGE 5   

 242   1        bit a=1,c=0;
 243   1         start();
 244   1         while(1)//device address
 245   1            {
 246   2             
 247   2              k=(write<<j)&0x80;
 248   2              if(k>1)b=1;
 249   2              else b=0;
 250   2              sda=b;
 251   2              delay1();
 252   2              scl=1;
 253   2              delay1();
 254   2              scl=0;
 255   2              delay1();
 256   2              sda=1;
 257   2              if(sda==0)break;
 258   2              j++;
 259   2              
 260   2              
 261   2             }
 262   1             
 263   1              sda=1;//check ack
 264   1              while(sda==0)break;
 265   1              a=sda;
 266   1            //  j=0;
 267   1              scl=1;
 268   1              delay1();
 269   1              scl=0;
 270   1             while(sda==1)break;
 271   1             j=0;
 272   1         while(1)//word address
 273   1            {
 274   2             
 275   2              k=(word_address<<j)&0x80;
 276   2              if(k>1)b=1;
 277   2              else b=0;
 278   2              sda=b;
 279   2              delay1();
 280   2              scl=1;
 281   2              delay1();
 282   2              scl=0;
 283   2              delay1();
 284   2              sda=1;
 285   2              if(sda==0)break;
 286   2               delay1();
 287   2              j++;
 288   2              
 289   2             }
 290   1             
 291   1              sda=1;//check ack
 292   1              while(sda==0)break;
 293   1              a=sda;
 294   1            //  j=0;
 295   1              scl=1;
 296   1              delay1();
 297   1              scl=0;
 298   1             while(sda==1)break;
 299   1              for(i=0;i<8;i++)//write data
 300   1                {
 301   2                  c=(da>>i)&0x01;
 302   2                  sda=c;
 303   2                  delay1();
C51 COMPILER V3.20,  SN-50203648  24C02                                                    10/04/07  22:09:10  PAGE 6   

 304   2                  scl=1;
 305   2                  delay1();
 306   2                  scl=0;           
 307   2                  }
 308   1                 sda=1;//check ack
 309   1                a=sda;
 310   1                while(sda==0)break;//check ack;
 311   1                 scl=1;
 312   1                 delay1();
 313   1                 scl=0;
 314   1                 a=sda;
 315   1                 delay1();
 316   1                 sda=0;
 317   1                 delay1();
 318   1                 scl=1;
 319   1                 delay1();
 320   1                 sda=1;
 321   1                 a=sda;//stop write
 322   1                 delay1();
 323   1                 scl=0;
 324   1                 
 325   1                 delay1();
 326   1                 
 327   1      
 328   1      }
 329          
 330           void delay1()
 331           {unsigned int i=100;
 332   1        for(;i>0;i--);
 333   1        }
 334            
 335          
 336           void start()
 337           { 
 338   1         scl=1;
 339   1         scl=0;   
 340   1         sda=1;
 341   1         scl=1;
 342   1         sda=0;
 343   1         scl=0;
 344   1       
 345   1         }
 346          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1438    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18      38
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       5
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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