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

📄 ledcontrol.lst

📁 在51上控制LED屏的显示和输出
💻 LST
📖 第 1 页 / 共 3 页
字号:
 396          void command(uchar cmd)
 397          {
 398   1            switch (cmd)
 399   1                      {      
 400   2                             uchar i;
 401   2                             case  ORD_BCOM :                                           //begin the communcation
 402   2                                      ET0 = 0 ;                   //turn off  the interrupt of PCF8563
 403   2                                      COMBUF.flag_time = (uchar)0;
 404   2                                      COMBUF.flag_char = (uchar)0;
 405   2                                      com_packet_ud(RES_OK_W);
 406   2                              break;
 407   2      
 408   2                              case ORD_ECOM :                                             //finish the communcation
 409   2                                       if (COMBUF.flag_time == (uchar)1)
C51 COMPILER V7.02a   LEDCONTROL                                                           05/26/2005 13:15:53 PAGE 8   

 410   2                                              {
 411   3                                                      set_time(COMBUF.time);
 412   3                                              }
 413   2                                       if (COMBUF.flag_char == (uchar)1)
 414   2                                              {
 415   3                                                      store_c_code(COMBUF.charbuf,CHARLEN);
 416   3                                              }
 417   2                                       com_packet_ud(RES_OK_W);
 418   2                             break;
 419   2                                      
 420   2                           case ORD_SETT:                                            //setting  time   and data
 421   2                                       for(i=0; i<TIMELEN; i++)
 422   2                                              {
 423   3                                                      COMBUF.time[i] = RECBUF.databuf[i+2];
 424   3                                              }
 425   2      
 426   2                                    com_packet_ud(RES_OK_W);
 427   2                              break;
 428   2      
 429   2                              case  ORD_DISC :                                        //display  char
 430   2                                       for (i=0; i<CHARLEN; i++)
 431   2                                              {
 432   3                                                      COMBUF.charbuf[i] = RECBUF.databuf[i+2];
 433   3                                              }
 434   2                                       put_char_dispbuf(COMBUF.charbuf, CHARLEN);
 435   2                                       com_packet_ud(RES_OK_W);
 436   2                            break;
 437   2      
 438   2                              case ORD_GETC:
 439   2                                      get_time(COMBUF.time);
 440   2                                      com_packet_d(RES_OK_W, COMBUF.charbuf,8);
 441   2                             break;
 442   2                                        
 443   2      
 444   2                            default :
 445   2                                       com_packet_ud(RES_ERR_D);
 446   2      
 447   2                              break;
 448   2                      }
 449   1      
 450   1      }
 451          
 452          
 453          bit  com_judge_ud(void)                        //judge  the frame is the 4-length frame or 36-length frame
 454          {      
 455   1              if (RECBUF.len == LENGTH_ND) 
 456   1                      {
 457   2                               delay60();           //delay  120us
 458   2                               delay60();
 459   2                               if (RECBUF.len == LENGTH_ND)
 460   2                                      {
 461   3                                              return(True);               //is  no data  frame
 462   3                                      }
 463   2                              else
 464   2                                      {
 465   3                                               RECBUF.flag = (uchar)0;
 466   3                                               return(False);
 467   3                                      }
 468   2                      }
 469   1                return(True);                                       //is    data frame
 470   1                                                  
 471   1      }      
C51 COMPILER V7.02a   LEDCONTROL                                                           05/26/2005 13:15:53 PAGE 9   

 472          
 473          
 474          bit com_crc_verify (void)
 475          {
 476   1           uint crc;
 477   1           crc = com_cal_crc(RECBUF.databuf, RECBUF.len-2);
 478   1           if (crc == Makeword(RECBUF.databuf[3], RECBUF.databuf[4]))
 479   1                      {
 480   2                            return(True);
 481   2                      }
 482   1            else
 483   1                    {
 484   2                              return(False);
 485   2                    }
 486   1      }
 487          
 488          
 489          bit   com_packet_ud(uchar cmd)
 490          {     
 491   1             uint crc;
 492   1               if (SEDBUF.flag )
 493   1                      {
 494   2                              
 495   2                              SEDBUF.databuf[0] = FRM_BE;
 496   2                              SEDBUF.databuf[1] = cmd;
 497   2                              crc = com_cal_crc(SEDBUF.databuf, 2);
 498   2                              SEDBUF.databuf[2] = Hbyte(crc);
 499   2                              SEDBUF.databuf[3] = Lbyte(crc);
 500   2                              SEDBUF.len = 4;
 501   2                              SBUF = FRM_BE;
 502   2                              return(True);
 503   2                      }
 504   1               return(False);
 505   1      }
 506                             // len is  length of data wanted to send
 507          bit  com_packet_d(uchar cmd, uchar *ptr, uchar len)
 508          {                              
 509   1              uchar i;
 510   1              uint crc;  
 511   1              if (SEDBUF.flag)
 512   1                      {
 513   2                              SEDBUF.databuf[0] = FRM_BE;
 514   2                              SEDBUF.databuf[1] = cmd;
 515   2                              for (i=0; i<len; i++)
 516   2                                      {
 517   3                                              SEDBUF.databuf[i+2] = *(ptr+i);
 518   3                                      }
 519   2                              crc = com_cal_crc(SEDBUF.databuf, len+2);
 520   2                              SEDBUF.databuf[len+2] = Hbyte(crc);
 521   2                              SEDBUF.databuf[len+3] = Lbyte(crc);
 522   2                              SEDBUF.len = 36;
 523   2                              SEDBUF.loc = 0;
 524   2                              SEDBUF.flag = False;
 525   2                              SBUF= FRM_BE;
 526   2                              return(True);
 527   2                      }
 528   1              return(False);
 529   1      }
 530                                          
 531          uint com_cal_crc(uchar *ptr, uchar len) 
 532          {
 533   1              uint crc;
C51 COMPILER V7.02a   LEDCONTROL                                                           05/26/2005 13:15:53 PAGE 10  

 534   1              uchar da;
 535   1           
 536   1              static uint crc_ta[16]={ 
 537   1                      0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
 538   1                      0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
 539   1                              };
 540   1              crc=0;
 541   1              while(len--!=0)
 542   1                      {
 543   2                              da=((uchar)(crc/256))/16; 
 544   2                              crc<<=4; 
 545   2                              crc^=crc_ta[da^(*ptr/16)];                                                      
 546   2                              da=((uchar)(crc/256))/16; 
 547   2                              crc<<=4; 
 548   2                              crc^=crc_ta[da^(*ptr&0x0f)];
 549   2                              ptr++;
 550   2                      }
 551   1      return(crc);
 552   1      }
 553          
 554           
 555          
 556          
 557          
 558          void timer0_process(void ) interrupt 1 using 1   // time for  500ms
 559          {   
 560   1        
 561   1          ET0=0;
 562   1          TL0=0x00;
 563   1          TH0=0x4c;
 564   1          fd_dog++;  
 565   1          if(flag_begin)
 566   1              {
 567   2                  if(++count_sec == 10)                     //Is one second?
 568   2                      {
 569   3                          count_sec = 0;
 570   3                         if(++count_min == 30)             //Is  30second?
 571   3                               {
 572   4                                   count_min = 0;
 573   4                                    flag_30sec = True;
 574   4                               }
 575   3      
 576   3                      }
 577   2              }                          
 578   1           ET0=1;
 579   1          
 580   1      }
 581          
 582          
 583               
 584          
 585          
 586          
 587          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2534    ----
   CONSTANT SIZE    =    560    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     46      48
C51 COMPILER V7.02a   LEDCONTROL                                                           05/26/2005 13:15:53 PAGE 11  

   IDATA SIZE       =     86    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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