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

📄 i2c.lst

📁 上学时做的一个51单片机按键显示程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 145   4                                                      }//while
 146   3                                              }//if_1
 147   2                               break;
 148   2                      default :break;
 149   2              }
 150   1              I2CON = 0x44;
 151   1              EI2C=1;
 152   1              CPL932_ET0=1;
 153   1      }
 154          /*
 155          */
 156          void I2cSendFrame(UINT8 err )
 157          {
 158   1              UINT8 idata count = 0;
 159   1              LWORD data i;
 160   1              i2cSendOk = 0;
 161   1              while(count <4 && i2cSendOk == 0 )
 162   1              {
 163   2                      count++;
 164   2                      INT1 = 1;
 165   2                      INT1 = 0;  /*pull down the INT1 to make main CPU recognise and start IIC */
 166   2                      for(i=0;i<20;i++); /*hold 0 for a moment */
 167   2                      INT1=1;
 168   2                      for(i=0;i<25000;i++)
 169   2                      {
 170   3                              /*kick dog*/
 171   3                              if(0x1 == i2cSendOk){
 172   4                                      break;
 173   4                              }
 174   3                      }
 175   2                      if(0x0 == i2cSendOk){
 176   3                              i2cSendOk = 0;
 177   3                              SparkLights( LIGHT_PROBLEM );
 178   3                              error( err );                   
 179   3                      }
C51 COMPILER V7.07   I2C                                                                   11/25/2005 20:22:01 PAGE 4   

 180   2              }       
 181   1      }
 182          void RegisterMachine(void)
 183          {
 184   1              memset(i2cbuf,0,13);
 185   1              i2cbuf[0] = 0x2;
 186   1              i2cbuf[1] = 0xaa;
 187   1              i2cbuf[2] = 0x53;
 188   1              I2cSendFrame(0x0c);
 189   1      }
 190          
 191          void ProcessI2cRecvFrame(void)
 192          {
 193   1              UINT8 cmd = 0;
 194   1              bit      isdot;
 195   1              bit  updown;
 196   1              if(0x1 == i2cRecvOk){   
 197   2                      Enter_Critical_OS();
 198   2                      i2cRecvOk=0x0; /* clear the singal for next packet */
 199   2                      Exit_Critical_OS();     
 200   2                      cmd = i2recvbuf[1];             
 201   2                      switch( cmd )
 202   2                      {
 203   3                              case 0x01:      ClearUpLeds();RESETLEDSHOWSTR();
 204   3                                      break;
 205   3                              case 0x02:      ClearDownLeds();RESETLEDSHOWSTR();
 206   3                                      break;
 207   3                              case 0x22:  FillStruLed( i2recvbuf+2 ,2,0 );
 208   3                                                      memcpy(&scrsavebuf[8],&LedsShowStr.ledbuf[4],4);
 209   3                                                      UpateLeds( POSITION_DOWN );
 210   3                                                      RESETLEDSHOWSTR();
 211   3                                       break;
 212   3                              case 0x66:  FillStruLed( i2recvbuf+2 ,1,0 );
 213   3                                                      LedsShowStr.ledbuf[5]=14; /*show H0 X*/
 214   3                                                      UpateLeds( POSITION_UP );
 215   3                                                      RESETLEDSHOWSTR();                                      
 216   3                                   break;
 217   3                              case 0xbb:
 218   3                                                      if( TestBit(i2recvbuf[2],7 )) isdot= 1;                                                 
 219   3                                                      else isdot= 0;
 220   3                                                      if(TestBit(i2recvbuf[2],6 ))  updown=0;
 221   3                                                      else updown = 1;
 222   3                                                      SparkLights(i2recvbuf[2]);
 223   3                                                      FillStruLed(i2recvbuf+3,i2recvbuf[0]-3,isdot );                                                         
 224   3                                                      UpateLeds(updown);      
 225   3                                                      RESETLEDSHOWSTR();
 226   3                                                      
 227   3                                       break; 
 228   3                      default : break;        
 229   3      
 230   3                      }       
 231   2                      
 232   2              }
 233   1      }
 234          /*
 235          
 236          */
 237          void FillStruLed(UINT8 *buf,UINT8 len, bit isdot )
 238          {
 239   1              INT8 idata i;
 240   1              UINT8 idata j = LED_MAX_NUM -1;
 241   1              if(len ==0){
C51 COMPILER V7.07   I2C                                                                   11/25/2005 20:22:01 PAGE 5   

 242   2                      LedsShowStr.isdot = 0;
 243   2                      LedsShowStr.dotposition = LED_MAX_NUM-1;
 244   2                      memset(&LedsShowStr.ledbuf[0],17, LED_MAX_NUM );
 245   2                      return;
 246   2              }
 247   1              if( isdot ){
 248   2                      LedsShowStr.isdot = 1;
 249   2                      LedsShowStr.dotposition = 0x5;
 250   2              }
 251   1              else{
 252   2                              LedsShowStr.isdot = 0;
 253   2                              LedsShowStr.dotposition = LED_MAX_NUM-1;
 254   2              }
 255   1              LedsShowStr.length = len*2 ;
 256   1              memset(&LedsShowStr.ledbuf[0],0, LED_MAX_NUM );
 257   1              for(i= len-1;i>=0;i--)
 258   1              {
 259   2                      LedsShowStr.ledbuf[j--] = buf[i] & 0x0f; 
 260   2                      LedsShowStr.ledbuf[j--] = buf[i] >> 4;
 261   2              }
 262   1              /* add E ->EEE */
 263   1              /*when error code */
 264   1              if(0x1 == len){
 265   2                 LedsShowStr.ledbuf[5] = 12;  
 266   2              }
 267   1      
 268   1              
 269   1      
 270   1      }
 271          bit TestBit(UINT8 dat,UINT8 n)
 272          {
 273   1              UINT8 temp;
 274   1              temp = dat;
 275   1              temp = temp >> n;
 276   1              temp = temp & 0x01;
 277   1              if(temp)
 278   1                      return 1;
 279   1              else
 280   1                      return 0;
 281   1              
 282   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    833    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      10
   IDATA SIZE       =     27       3
   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 + -