i2c.lst

来自「显示屏驱动源代码」· LST 代码 · 共 427 行 · 第 1/2 页

LST
427
字号
 199   1      
 200   1              for(i=0; i<cnt; i++){
 201   2                      I2CWriteData(*(val+i)); 
 202   2                      I2C_delay();
 203   2              }
 204   1              I2CStop();
 205   1      }
 206          
 207          void WriteI2Cn_(BYTE addr, BYTE *val, BYTE cnt)
 208          {
 209   1              BYTE i;
 210   1      
 211   1      #ifdef INTERNAL_MCU
                      BYTE    index;
                      index = *val;
                      val++;
                      if ( addr == TW88I2CAddress ) {
                              for ( i=1; i<cnt; i++)
                                      WriteTW88(index++, *val++);
                              return;
                      }
              #endif
 221   1              I2CStart();
 222   1              I2CWriteData(addr);
 223   1      
 224   1              for(i=0; i<cnt; i++){
 225   2                      I2CWriteData(*(val+i));         //LJY050101
 226   2              }
 227   1              I2CStop();
 228   1      }
 229          
 230          //BYTE I2CWriteData_Wait(BYTE value);
 231          
 232          #ifdef SUPPORT_MSP_AUDIO
              void I2CReadByteMSP(BYTE addr, BYTE index, BYTE *pd, BYTE cnt)
              {
                      BYTE i;
              
                      I2CStart();
                      I2CWriteData_Wait(addr);
                      I2CWriteData(index);
                      for(i=0; i<cnt; i++) {
C51 COMPILER V7.06   I2C                                                                   02/21/2008 14:00:26 PAGE 5   

                              I2CWriteData(*(pd+i));
                      }
                      I2CStart();
                      I2CWriteData_Wait(addr | 0x01);
                      *pd = I2CReadDataWithACK();
                      *(pd+1) = I2CReadData();
              
                      I2CStop();
              }
              #endif
 251          
 252          
 253          
 254          /*****************************************************************************/
 255          /*                                                                           */
 256          /*****************************************************************************/
 257          #ifdef SUPPORT_MSP_AUDIO
              BYTE I2CWriteData_Wait(BYTE value)
              {
                      WORD i;
                      BYTE ack;
              
                      for(i=0; i<8; i++, value<<=1) {
                              if(value & 0x80) I2C_SDA = 1;
                              else                     I2C_SDA = 0;
                              I2Cdelay();
                              I2C_SCL = 1;    I2Cdelay();
                              I2C_SCL = 0;
                      }
                      I2C_SDA = 1;    I2Cdelay();
                      I2C_SCL = 1;    I2Cdelay();
                      i=0;
                  while(1) {
                              if( I2C_SCL ) break;
                              i++;
                      }
              
                      ack = I2C_SDA;  //I2Cdelay();
                      I2C_SCL = 0;
                      return (1-ack);
              }
              #endif
 283          
 284          #ifndef QVGA
 285          void dd(void)
 286          {
 287   1      }
 288          #else
              #define dd()  I2Cdelay()
              #endif
 291          
 292          void I2CStart()
 293          {
 294   1              I2C_SDA = 1;    dd();
 295   1              I2C_SCL = 1;    dd();
 296   1              I2C_SDA = 0;    dd();
 297   1              I2C_SCL = 0;
 298   1      }
 299          
 300          void I2CStop()
 301          {
 302   1              I2C_SDA = 0;    dd();
C51 COMPILER V7.06   I2C                                                                   02/21/2008 14:00:26 PAGE 6   

 303   1              I2C_SCL = 1;    dd();
 304   1              I2C_SDA = 1;
 305   1      }
 306          
 307          void I2CWriteData(BYTE value)
 308          {
 309   1      /*
 310   1              int i;
 311   1      
 312   1              for(i=0; i<8; i++, value<<=1) {
 313   1                      I2C_SCL = 0;
 314   1                      I2Cdelay();     // HHY 2.04 in special case, it was unstable
 315   1                      if(value & 0x80) I2C_SDA = 1;
 316   1                      else                     I2C_SDA = 0;
 317   1                      I2Cdelay();
 318   1                      I2C_SCL = 1;
 319   1              }
 320   1      */
 321   1      
 322   1              I2C_SCL=0;      I2C_SDA=(value & 0x80)? 1:0;    I2C_SCL=1;      dd();
 323   1              I2C_SCL=0;      I2C_SDA=(value & 0x40)? 1:0;    I2C_SCL=1;      dd();
 324   1              I2C_SCL=0;      I2C_SDA=(value & 0x20)? 1:0;    I2C_SCL=1;      dd();
 325   1              I2C_SCL=0;      I2C_SDA=(value & 0x10)? 1:0;    I2C_SCL=1;      dd();
 326   1      
 327   1              I2C_SCL=0;      I2C_SDA=(value & 0x08)? 1:0;    I2C_SCL=1;      dd();
 328   1              I2C_SCL=0;      I2C_SDA=(value & 0x04)? 1:0;    I2C_SCL=1;      dd();
 329   1              I2C_SCL=0;      I2C_SDA=(value & 0x02)? 1:0;    I2C_SCL=1;      dd();
 330   1              I2C_SCL=0;      I2C_SDA=(value & 0x01)? 1:0;    I2C_SCL=1;      dd();
 331   1      
 332   1      
 333   1              I2C_SCL = 0;    // HHY 3.00
 334   1              I2C_SCL = 0;    // HHY 3.00
 335   1              I2C_SCL = 0;    //      I2Cdelay();
 336   1              I2C_SDA = 1;    //      I2Cdelay();
 337   1      
 338   1              I2C_SCL = 1;    // HHY 3.00
 339   1              I2C_SCL = 1;    // HHY 3.00
 340   1              I2C_SCL = 1;    //      I2Cdelay();
 341   1              I2C_SCL = 0;
 342   1      }
 343          
 344          BYTE I2CReadData()
 345          {
 346   1              int i;
 347   1              BYTE value=0;
 348   1      
 349   1              I2C_SDA = 1;    dd();
 350   1              I2C_SCL = 0;
 351   1              
 352   1              for(i=0; i<8; i++) {
 353   2                      I2C_SCL = 1;
 354   2                      value <<= 1;
 355   2                      if(I2C_SDA) value |= 1;
 356   2                      I2C_SCL = 0;
 357   2              }
 358   1              dd();
 359   1              
 360   1              I2C_SCL = 1;    // HHY 3.00
 361   1              I2C_SCL = 1;    // HHY 3.00
 362   1              I2C_SCL = 1;
 363   1              I2C_SCL = 0;
 364   1      
C51 COMPILER V7.06   I2C                                                                   02/21/2008 14:00:26 PAGE 7   

 365   1              return value;
 366   1      
 367   1      }
 368          
 369          #ifdef SUPPORT_MSP_AUDIO
              BYTE I2CReadDataWithACK()
              {
                      int i;
                      BYTE value=0;
              
                      I2C_SDA = 1;    I2Cdelay();
                      I2C_SCL = 0;
              
                      for(i=0; i<8; i++) {
                              I2C_SCL = 1;
                              value <<= 1;
                              if(I2C_SDA) value |= 1;
                              I2C_SCL = 0;
                      }
                      I2C_SDA = 0;    I2Cdelay();             //ack
                      I2C_SCL = 1;    I2Cdelay();
                      I2C_SCL = 0;
              
                      return value;
              }
              #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    653    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----      34
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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