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

📄 maintest_20050712_6.lst

📁 这是一个读取ID卡的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 318                          pReDa++;
 319                  }
 320                  T_CLK = 1;
 321                  T_RST =0;
 322          }
 323          */
 324          
 325          /******************************************************************** 
 326          *
 327          * 名称: v_Set1302
 328          * 说明: 
 329          * 功能: 设置初始时间
 330          * 调用: v_W1302() 
 331          * 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 
 332          * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
 333          * 返回值: 无
 334          ***********************************************************************/
 335          void v_Set1302(uchar *pSecDa) 
 336          {
 337   1              uchar i;
 338   1              uchar ucAddr = 0x80; 
 339   1              v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
 340   1              for(i =7;i>0;i--)
 341   1              { 
 342   2                      v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
 343   2      
 344   2                      pSecDa++;
 345   2                      ucAddr +=2;
 346   2              }
 347   1              v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
 348   1      }
 349          
 350          
 351          /******************************************************************** 
 352          *
 353          * 名称: v_Get1302
 354          * 说明: 
 355          * 功能: 读取DS1302当前时间
 356          * 调用: uc_R1302() 
 357          * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
 358          * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
 359          * 返回值: 无
 360          ***********************************************************************/
 361          void v_Get1302(uchar ucCurtime[]) 
 362          {
 363   1              uchar i;
 364   1              uchar ucAddr = 0x81;
 365   1              for (i=0;i<7;i++)
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 7   

 366   1              {
 367   2                      ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 368   2                      ucAddr += 2;
 369   2              }
 370   1      }
 371          
 372          void Uart_Send(unsigned char data1)     
 373          {       
 374   1              SBUF = data1;
 375   1              while(!TI);     
 376   1              TI = 0;
 377   1      }       
 378          
 379          void timer0_int(void) interrupt 1
 380          {
 381   1              TR0 = 0;
 382   1              TH0 = 0xFF;
 383   1              TL0 = 0x20;
 384   1              TR0 = 1;
 385   1              
 386   1          if(finding == 0)            //寻找信号头
 387   1              {
 388   2                      HeadL = HeadL << 1; 
 389   2                      HeadL |= P3_5;
 390   2                      if((HeadL&0xFFFFF) == 0x6AAAA)
 391   2                      {
 392   3                          finding = 1;
 393   3                          HeadL = 0;
 394   3                      }
 395   2              }       
 396   1              else                        //处理信号数据
 397   1              {
 398   2                      data1 = data1 << 1;
 399   2                      data1 |= P3_5;
 400   2                      counter ++;
 401   2                      if( counter == 10 )
 402   2                      {
 403   3                              cardid[pointer++] = data1;
 404   3                              counter = 0;
 405   3                              data1 = 0;
 406   3                      }
 407   2                      if( pointer >= 11 )
 408   2                      {
 409   3                              EX0 = 0;
 410   3                              TR0 = 0;
 411   3                              finded = 1 ;
 412   3                      }                       
 413   2      
 414   2              }
 415   1      }
 416          
 417          void int0_int(void) interrupt 0
 418          {
 419   1              //P1_0 = ~P1_0;
 420   1              EX0 = 0;
 421   1              //if( !finded )
 422   1              {
 423   2                      TR0 = 0;
 424   2              TH0 = 0xFF;
 425   2              TL0 = 0xF0; //0xFA is also good.
 426   2              TR0 = 1;
 427   2          }
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 8   

 428   1          writetime2( );
 429   1          EX0 = 1;
 430   1          
 431   1          
 432   1          
 433   1      }       
 434          
 435          void UART_int(void) interrupt 4
 436          {
 437   1              if( RI )
 438   1              {
 439   2                      RI = 0;
 440   2                      CmdBuff[CmdPointer] = SBUF;
 441   2                      if( CmdPointer == 0 && CmdBuff[0] == 0x5A )
 442   2                              CmdPointer ++;
 443   2                      else if( CmdPointer == 1 && CmdBuff[1] == 0xA5 )
 444   2                      {
 445   3                              CmdPointer ++;
 446   3                      }
 447   2                      else if( CmdPointer >= 2 )
 448   2                      {
 449   3                              
 450   3                              switch( CmdBuff[2] )
 451   3                              {
 452   4                              case 0x01:
 453   4                                      if( CmdPointer == 3 )
 454   4                                      {
 455   5                                              RcvCmd = 0x01;
 456   5                                              CmdPointer = 0;
 457   5                                      }       
 458   4                                      break;
 459   4                              case 0x03:
 460   4                                      if( CmdPointer == 9 )
 461   4                                      {
 462   5                                              RcvCmd = 0x01;
 463   5                                              CmdPointer = 0;
 464   5                                      }
 465   4                                      break;
 466   4                              }
 467   3                              CmdPointer ++;
 468   3                      }       
 469   2                      
 470   2              }
 471   1      }
 472                  
 473          
 474          //UART初始化
 475          void Uart_Init(void)
 476          {
 477   1              TMOD=0x20;
 478   1              TH1=0XFD;
 479   1              TL1=0xFD;
 480   1              PCON=0x00;
 481   1              SCON=0x50;
 482   1              TR1=1;
 483   1      }
 484                  
 485          void main()
 486          {
 487   1              unsigned char i=0,j = 0 ;
 488   1              int temp = 0 , a = 0;   
 489   1              unsigned char row = 0;
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 9   

 490   1              unsigned char col = 0;
 491   1              
 492   1      
 493   1              Uart_Init();
 494   1              //TI = 0;
 495   1                                      
 496   1              TMOD = 0x21;
 497   1              EA = 1;
 498   1              ES = 1;
 499   1              ET0 = 1;
 500   1      
 501   1          //开定时器0
 502   1              TR0 = 0;
 503   1              TH0 = 0xFF;
 504   1              TL0 = 0xFF;
 505   1              TR0 = 1;        
 506   1              ET0 = 1;
 507   1              
 508   1              //开中断0
 509   1              IT0 = 1;
 510   1              EX0 = 1;
 511   1              
 512   1              //设置时钟初始时间
 513   1              v_Set1302(b);   
 514   1      
 515   1              while(1)
 516   1              {
 517   2              if(finded == 1)
 518   2              {
 519   3                      //EX0 = 0;
 520   3                      TR0 = 0;
 521   3                      finding = 0;
 522   3                      //Uart_Send(0xDD);
 523   3                      pointer = 0;
 524   3                      counter = 0;
 525   3                      col = 0;
 526   3                      for(i = 0; i < 11; i++)
 527   3                      {       
 528   4                              a = 0;
 529   4                              row = 0;
 530   4                              
 531   4                              for( j = 0 ; j < 5 ; j ++ )
 532   4                              {
 533   5                                      temp = cardid[i] & 0x300;
 534   5                                      cardid[i] = cardid[i] << 2;
 535   5                                      if( temp == 0x100 )
 536   5                                      {
 537   6                                              a = a << 1;
 538   6                                              a |= 0;
 539   6                                              
 540   6                                      }
 541   5                                      else if( temp == 0x200 )
 542   5                                      {
 543   6                                              a = a << 1;
 544   6                                              a |= 0x1;
 545   6                                              if( i != 10 )
 546   6                                                      row ++; 
 547   6                                              //a = a << 1;
 548   6                                      }
 549   5                                      else
 550   5                                      {
 551   6                                              break;
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 10  

 552   6                                      }
 553   5                                      //col |= 1<<j
 554   5                                      writetime2( );
 555   5                              }
 556   4                              if( (j < 5) || (row & 0x01) )
 557   4                              {
 558   5                                      //Uart_Send(row );
 559   5                                      //Uart_Send( cardid[i]);
 560   5                                      break;
 561   5                              }
 562   4                              
 563   4                              cardid[i] = (a>>1);
 564   4                              //Uart_Send(0xFF);
 565   4                              //Uart_Send(col);
 566   4                              //Uart_Send( cardid[i]);
 567   4                              col ^= cardid[i];       
 568   4                              //Uart_Send(col);
 569   4                      //Uart_Send(cardid[i] & 0xFF );
 570   4                      
 571   4                      }
 572   3                      if(( i < 11 )||(col & 0x0F))
 573   3                      {
 574   4                              //Uart_Send(col);
 575   4                              finded = 0;
 576   4                              TR0 = 1;
 577   4                              EX0 = 1;                
 578   4                              continue;
 579   4                      }
 580   3                      for( i = 0 ; i < 10 ; i ++ )
 581   3                      {
 582   4                              Uart_Send(cardid[i]  );
 583   4                              cardid[i] = 0;
 584   4                              writetime2( );
 585   4                      }
 586   3                      finded = 0;
 587   3                      TR0 = 1;
 588   3                      EX0 = 1;
 589   3                      
 590   3                      
 591   3                      
 592   3              }//if( finded == 1 )
 593   2              //else if((showflag > 3)&&(findhead == 0)&&(finding == 0))
 594   2                      {
 595   3                      //EX0 = 0;
 596   3                      //TR0 = 0;
 597   3                      //show++;
 598   3              v_Get1302(b);
 599   3                      writetime1(&b[0],1);    
 600   3                      //writetime2( );
 601   3                      showflag = 0;
 602   3                      //TR0 = 1;
 603   3                      //EX0 = 1;
 604   3                      }
 605   2                      //else
 606   2                      // showflag ++;
 607   2                      
 608   2                      
 609   2                      //串口操作
 610   2               //*    
 611   2                      if( RcvCmd )
 612   2                      {
 613   3                              RcvCmd = 0;
C51 COMPILER V7.06   MAINTEST_20050712_6                                                   07/15/2005 21:33:30 PAGE 11  

 614   3                              switch( CmdBuff[2] )
 615   3                              {
 616   4                              case 0x01:
 617   4                                      
 618   4                                      break;                  
 619   4                              case 0x03:
 620   4                                      //秒 分 时 日 月 星期 年
 621   4                                      v_Set1302(&CmdBuff[3]);
 622   4                                      break;
 623   4                              }
 624   3                      }
 625   2              //*/
 626   2          }//while(1)
 627   1      }               


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1115    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     66      12
   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 + -