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

📄 rtc_dsp.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
 428   4                                      {
 429   5                                              if(DspCtrl1&0x40) i = 0x01;                                     
 430   5                                      } 
 431   4                                      else if(DspPtr==17)             //电池偏低报警
 432   4                                      {
 433   5                                          if(Battery==1)    i = 0x01;
 434   5                                      }                       
 435   4                                      else                 DspPtr = 0xFF;  
 436   4                              }
 437   3      
 438   3              } while(i==0x00);
 439   2           
 440   2              if(DspPtr<8)
 441   2              {               
 442   3                              if((DspPtr>0x01)&&(DspPtr<0x05))                        //当前总、峰、谷电量
 443   3                              {       
 444   4                              Addr[0] = 0xA0;
 445   4                              
 446   4                              if(DspPtr==0x02)                                                //当前总电量                            
 447   4                              {
 448   5                                      Addr[1]    = 0xC1;
 449   5                                      DspExch[0] = EryTmp[0];
 450   5                              }
 451   4                              else if(DspPtr==0x03)                                   //当前峰电量                                                            
 452   4                              {
 453   5                                      Addr[1]    = 0xC5;
 454   5                                      DspExch[0] = EryTmp[1];
 455   5                              }
 456   4                              else                                                                    //当前谷电量
 457   4                              {
 458   5                                      Addr[1]    = 0xCD;
 459   5                                      DspExch[0] = EryTmp[3];
 460   5                              }               
 461   4      
 462   4                              Len[1] = 0x03;                          
 463   4                                      ReadData(&DspExch[1]);                                  //读取电量整数数据                              
 464   4                              }
 465   3                              
 466   3                              if(DspPtr==0x05)                                                        //局编号处理
 467   3                              {
 468   4                                      //ID检查
 469   4                                      Addr[0] = 0xA0;
 470   4                                      Addr[1] = 0xF0;
 471   4                                      Len[1]  = 0x07; 
 472   4                              do
 473   4                              {
 474   5                                      ReadData(DspBuf);
 475   5                                              i = SumCHK(DspBuf,6);                                   
 476   5                              }while((i!=DspBuf[6])&&(Addr[0]<=0xA4));
 477   4              
 478   4                              if( i!=DspBuf[6] ) ArrayInit(DspBuf,8); //局号默认为“000000000000”
 479   4                              
 480   4                                      ErrorModify(0xA4,DspBuf);                               //保存区数据重置
 481   4       
 482   4                                      for(i=0;i<6;i++)DspExch[i] = DspBuf[i];//数据入显示交换区
 483   4                                      
 484   4                                      ArrayInit(DspBuf,8);
 485   4                              }                               
 486   3                      }                               
 487   2      
 488   2              else//显示指针>8
 489   2              {   
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 9   

 490   3                      if(DspPtr<16)
 491   3                              {
 492   4                                      i = 0x00;                                                                       //上月
 493   4                                      if(DspPtr>11) i=0x01;                                           //上上月                        
 494   4                                      Addr[1] = LastMonthSN(i)*16+(DspPtr%4)*4;       //子地址
 495   4                                      Addr[0] = 0xA2;
 496   4                                      Len[1]  = 0x04;
 497   4                                      ReadData(DspExch);                                                      //读取历史电量数据
 498   4                              }
 499   3              }
 500   2          }   
 501   1      
 502   1              //******************************
 503   1              if(DspSec>=(DspTime>>1))DspPage = 1;                    //按无锡恒通要求改进    
 504   1              //******************************
 505   1              
 506   1              if((DspPtr<0x02)||(DspPtr==0x05)||(DspPtr==0x06))
 507   1              {
 508   2                      if(DspPtr==0x00)                                                                    //当前日期显示  
 509   2                      {       
 510   3                              DspBuf[7] = Year;
 511   3                              DspBuf[5] = Month;
 512   3                              DspBuf[3] = Day;
 513   3                      }
 514   2                              
 515   2                      else if(DspPtr==0x01)                                                       //当前时间显示
 516   2                      {
 517   3                              DspBuf[7] = Hour;
 518   3                              DspBuf[5] = Min;
 519   3                              DspBuf[3] = Sec;        
 520   3                      }
 521   2                                                      
 522   2                      else if(DspPtr==0x05)                                                       //电表局号显示
 523   2                      {                               
 524   3                              //电表局号高6位                 
 525   3                              DspBuf[7] = DspExch[5];
 526   3                              DspBuf[5] = DspExch[4];
 527   3                              DspBuf[3] = DspExch[3];
 528   3                              
 529   3                              //电表局号低6位                         
 530   3                              if(     DspPage==1 )            
 531   3                              {       
 532   4                                      DspBuf[7] = DspExch[2];
 533   4                                      DspBuf[5] = DspExch[1];
 534   4                                      DspBuf[3] = DspExch[0];
 535   4                              }
 536   3                      }                       
 537   2                      else
 538   2                      {                       
 539   3                              if(DspPage==0)
 540   3                              {
 541   4                                      if( Battery ==1 ) DspBuf[3] |= 0x01;       //电池情况
 542   4                                      if( Hardware==1 ) DspBuf[3] |= 0x10;       //硬件情况 
 543   4                                      if( RsComm  ==1 ) DspBuf[5] |= 0x01;       //通讯情况
 544   4                                      if( AdjTime ==1 ) DspBuf[5] |= 0x10;       //时钟情况                   
 545   4                                      if( AdjDate ==1 ) DspBuf[7] |= 0x01;       //校时情况                           
 546   4                                      DspBuf[7] |= 0xF0;                                 //显示"F"=a+e+f+g
 547   4                              }       
 548   3                      }
 549   2                  
 550   2              DspBuf[2] = DspBuf[3]&0x0F;                                                 //显示数据拆分
 551   2                      DspBuf[3] = DspBuf[3]>>4;
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 10  

 552   2                              
 553   2                      DspBuf[4] = DspBuf[5]&0x0F;
 554   2                      DspBuf[5] = DspBuf[5]>>4;
 555   2                      
 556   2                      DspBuf[6] = DspBuf[7]&0x0F;
 557   2                      DspBuf[7] = DspBuf[7]>>4;
 558   2              }                               
 559   1              
 560   1              else
 561   1              {
 562   2              if(DspType==0)                                                  //5位整数+1位小数                                   
 563   2                      {
 564   3                                                                                                      //十万位不处理  
 565   3                              DspBuf[7] = DspExch[3]&0x0F;            //万位 
 566   3                                      
 567   3                              DspBuf[6] = DspExch[2]>>4;                      //千位          
 568   3                              DspBuf[5] = DspExch[2]&0x0F;            //百位  
 569   3                              
 570   3                              DspBuf[4] = DspExch[1]>>4;                      //十位          
 571   3                              DspBuf[3] = DspExch[1]&0x0F;            //个位 
 572   3                                      
 573   3                              DspBuf[2] = DspExch[0]>>4;              //小数位
 574   3                      }
 575   2                                      
 576   2                      else                                                                    //先显示整数,再显示小数
 577   2                      {
 578   3                              if((DspPtr>0x01)&&(DspPtr<0x05))
 579   3                              {
 580   4                              i = DspExch[0];                 
 581   4                              
 582   4                              if(DspPtr==0x02)                DspExch[0] = EryTmp[0]; //当前总电量小数
 583   4                              
 584   4                              else if(DspPtr==0x03)   DspExch[0] = EryTmp[1]; //当前峰电量小数        
 585   4                              
 586   4                              else                                    DspExch[0] = EryTmp[3]; //当前谷电量小数
 587   4                              
 588   4                              if((i!=DspExch[0])&&(DspExch[0]==0x00))                 //小数进位
 589   4                                      BCDINC(&DspExch[1],3,1);
 590   4                      }
 591   3                              
 592   3                              DspBuf[3] = DspExch[0];                         //显示小数(默认显示小数屏)
 593   3                              if(DspPage==0)                                          //显示整数              
 594   3                              {
 595   4                                      DspBuf[7] = DspExch[3];
 596   4                                      DspBuf[5] = DspExch[2];
 597   4                                      DspBuf[3] = DspExch[1];
 598   4                              }          
 599   3      
 600   3                              DspBuf[2] = DspBuf[3]&0x0F;                     //显示数据拆分
 601   3                              DspBuf[3] = DspBuf[3]>>4;       
 602   3                              
 603   3                              DspBuf[4] = DspBuf[5]&0x0F;
 604   3                              DspBuf[5] = DspBuf[5]>>4;
 605   3                              
 606   3                              DspBuf[6] = DspBuf[7]&0x0F;
 607   3                              DspBuf[7] = DspBuf[7]>>4;
 608   3                      }                       
 609   2      /*              
 610   2                      if(DspBuf[7]==0x00)                                             //前导"0"处理   
 611   2                      {       
 612   2                              DspBuf[7]=0x10;
 613   2                              if(DspBuf[6]==0x00)
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 11  

 614   2                              {
 615   2                                      DspBuf[6]=0x10;
 616   2                                      if(DspBuf[5]==0x00)
 617   2                                      {
 618   2                                              DspBuf[5]=0x10;
 619   2                                              if(DspBuf[4]==0x00)     DspBuf[4]=0x10;
 620   2                                      }
 621   2                              }
 622   2                      }       
 623   2      */
 624   2                      //if((DspType==1)&&(DspPage==0)&&(DspBuf[4]==0x10)&&(DspBuf[3]==0x00))DspBuf[3]=0x10;   
 625   2                      if((DspType==1)&&(DspPage==0))                  //整数页处理
 626   2                      {
 627   3                              if((DspBuf[4]==0x10)&&(DspBuf[3]==0x00))DspBuf[3]=0x10;
 628   3                      }
 629   2                              
 630   2              }
 631   1              
 632   1              for(i=2;i<8;i++)  DspBuf[i] = LcdCoding[DspBuf[i]]; //显示编码转换
 633   1              
 634   1          if( EryRev==1)    DspBuf[1] |= 0x02;                                //反向状态显示
 635   1      
 636   1          //LCD"通讯"标志显示
 637   1              if(CommSec>CommLCDTime)   DspBuf[1] |= 0x04;            //通讯状态显示
 638   1          
 639   1          switch(DspPtr)
 640   1              {
 641   2                      case 0x00://当前日期
 642   2                              DspBuf[0] |= 0x80;      //"日期"
 643   2                              DspBuf[4] |= 0x10;
 644   2                      DspBuf[6] |= 0x10;                              
 645   2                              break;
 646   2                              

⌨️ 快捷键说明

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