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

📄 main.lst

📁 RFID实现代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 195          unsigned char IicSendHY502(unsigned char *cP)
 196          {
 197   1              unsigned char i;
 198   1              unsigned char cCheckSum = 0;
 199   1              I2CStart();
 200   1              I2CSendByte(WRITE_HY502);
 201   1              if (I2CWaitAck() == SUCCESS)
 202   1              {
 203   2                      for(i=0; i<cP[0]; i++)  // in the protocol, cP[0] is the length of this data package
 204   2                      {
 205   3                              cCheckSum ^= cP[i];
 206   3                              I2CSendByte(cP[i]);
 207   3                              if (I2CWaitAck() != SUCCESS)
 208   3                              {
 209   4                                      return FAILURE;
 210   4                              }
 211   3                      }
 212   2                      I2CSendByte(cCheckSum);
 213   2                      if (I2CWaitAck() != SUCCESS)
 214   2                      {
 215   3                              return FAILURE;
 216   3                      }                
 217   2                      I2CStop();
 218   2              return SUCCESS;
 219   2              }
 220   1              else
 221   1              {
 222   2                      return FAILURE;
 223   2              }
 224   1      }
 225          
 226          
 227          /*****************************************************************************
 228          *send command to Master over UART
 229          *****************************************************************************/
 230          void UartSend(unsigned char *cSendBuffer)
 231          {
 232   1              unsigned char i;
 233   1              unsigned char cCheckSum;
 234   1              ES = 0;
 235   1              TI = 0;
 236   1              g_bReceCommandOk = 0;
 237   1              SBUF = 0xAA;
 238   1              while (!TI);
 239   1              TI = 0;
 240   1              SBUF = 0xBB;
C51 COMPILER V8.02   MAIN                                                                  01/26/2007 15:08:37 PAGE 5   

 241   1              while (!TI);
 242   1              cCheckSum = 0;
 243   1              for (i=0; i<cSendBuffer[0]; i++)
 244   1              {
 245   2                      cCheckSum ^= cSendBuffer[i];
 246   2                      TI = 0;
 247   2                      SBUF = cSendBuffer[i];
 248   2                      while (!TI);
 249   2                      if (cSendBuffer[i] == 0xAA)
 250   2      //if there is a "0xAA" in the data serial but not the command header,
 251   2      //add a "0x00" follow the "0xAA", CL (command length) will unchanged
 252   2                      {
 253   3                              TI = 0;
 254   3                              SBUF = 0;
 255   3                              while (!TI);
 256   3                      }
 257   2              }
 258   1              TI = 0;
 259   1              SBUF = cCheckSum;
 260   1              while (!TI);
 261   1              TI = 0;
 262   1              ES = 1;
 263   1      }
 264          /*****************************************************************************
 265          *serial interrupt routine
 266          *****************************************************************************/
 267          seri_int () interrupt 4 using 2
 268          {
 269   1              static unsigned char i;
 270   1              static unsigned char cReceivedData;
 271   1              static unsigned char cCheckSum;
 272   1              if (RI)
 273   1              {
 274   2                      cReceivedData = SBUF;
 275   2                      RI = 0;
 276   2                      if (g_bReceAA)
 277   2                      {
 278   3                              g_bReceAA = 0;
 279   3                              if (0 != cReceivedData)
 280   3                              {
 281   4                                      g_cReceNum = 0;
 282   4                              }
 283   3                      }
 284   2                      else
 285   2                      {
 286   3                              if (0xAA == cReceivedData)
 287   3                              {
 288   4                                      g_bReceAA = 1;
 289   4                              }
 290   3                              g_cReceBuf[g_cReceNum++] = cReceivedData;
 291   3      
 292   3                              if (g_cReceNum > g_cReceBuf[0])
 293   3                              {
 294   4                                      cCheckSum = 0;
 295   4                                      for (i=0; i <= g_cReceBuf[0]; i++)
 296   4                                      {
 297   5                                              cCheckSum ^= g_cReceBuf[i];
 298   5                                      }
 299   4                                      if (0 == cCheckSum)
 300   4                                      {
 301   5                                              g_bReceCommandOk = 1;
 302   5                                              ES = 0;
C51 COMPILER V8.02   MAIN                                                                  01/26/2007 15:08:37 PAGE 6   

 303   5                                      }
 304   4                                      g_bReceAA = 0;
 305   4                                      g_cReceNum = 0;
 306   4                              }
 307   3                              if (g_cReceNum >= sizeof(g_cReceBuf))
 308   3                              {
 309   4                                      g_cReceNum = 0;
 310   4                                      g_bReceAA = 0;
 311   4                              }
 312   3                      }
 313   2              }
 314   1              if (TI)
 315   1              {
 316   2                      TI = 0;
 317   2              }
 318   1      }
 319          
 320          /*
 321          uchar autocard(uchar *cardno)    // 寻卡,防冲突,选择卡    返回状态,指针参数为返回的卡系列号(4 bytes)
 322          {
 323                  uchar cStatus;
 324                  uchar cnt,i;
 325                  uchar cp1[10];
 326          
 327                  for(cnt=0;cnt<3;cnt++)
 328                  {
 329                           cStatus =IicSendHY502(ComSearchCard);    // 发送寻卡命令
 330                  //      delay(1);// delay_10ms(2);                                                // 延时等待模块执行命令
 331                           cStatus =IicReadHY502(cp1);              // 读取卡号并存入到cp1
 332                           if(cStatus==SUCCESS)
 333                           {
 334                              if(cp1[1]==CARD_SN)       // 读卡号成功
 335                              {
 336                                  for(i=0;i<4;i++)        // 提取4字节卡号
 337                                 {
 338                                          cardno[i]=cp1[i+2];
 339                                 }  
 340                                                 
 341                               
 342                                          return 0;                                                       
 343                              }
 344                            }
 345                            else cStatus=1;
 346          
 347                  }       
 348                  
 349                  return 1;
 350          }
 351            */
 352          // buzz freq
 353          
 354          unsigned int g_cBeepDiv0;
 355          unsigned char sp_freq=0xdc;
 356          void timer0(void) interrupt 1 using 2    //0.01s
 357          {
 358   1              TH0=sp_freq;
 359   1              if(g_cBeepDiv0)   //beep
 360   1              {
 361   2                      g_cBeepDiv0--;
 362   2              //      BUZ=(g_cBeepDiv0&0x0010);
 363   2              }
 364   1               
C51 COMPILER V8.02   MAIN                                                                  01/26/2007 15:08:37 PAGE 7   

 365   1      }
 366          
 367          
 368          ///////////////////////////////////////////////////////////////////////
 369          // 串口命令处理函数
 370          ///////////////////////////////////////////////////////////////////////
 371          uchar uart_process(void)
 372          {
 373   1              uchar cmd;        
 374   1              uchar cStatus;   
 375   1         
 376   1              cmd = g_cReceBuf[1];
 377   1              switch(cmd)
 378   1              {  
 379   2      
 380   2                      case 0x11:        // 软件掉电模式 ,1字节数据,非0退出软件掉电模式,0x00进入软件掉电
 381   2                                      //任何一条对卡的操作命令或自动寻卡被设置后都将终止掉电模式
 382   2                              if(g_cReceBuf[2]==0x01)
 383   2                              {
 384   3                          
 385   3                                  cStatus =IicSendHY502(AntOn);         // 发送命令                            
 386   3                                  cStatus =IicReadHY502(cp);            // 读取并存入到cP
 387   3                                      if((cStatus==SUCCESS)&&(cp[1]==SOFTDOWN))
 388   3                                              {
 389   4                                              SendBuffer[0]=0x02;
 390   4                                                      SendBuffer[1]=cmd;
 391   4                                      
 392   4                                              }
 393   3                              
 394   3                              }
 395   2                              else if(g_cReceBuf[2]==0)                                                         
 396   2                              {
 397   3                                
 398   3                                          cStatus =IicSendHY502(AntOff);        // 发送命令                                   

⌨️ 快捷键说明

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