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

📄 rtc_dsp.lst

📁 江苏单相复费率电能表方案
💻 LST
📖 第 1 页 / 共 5 页
字号:
 647   2                      case 0x01://当前时间+":"
 648   2                              DspBuf[0] |= 0x28;//"时间"+P7
 649   2                              DspBuf[1] |= 0x80;//P8
 650   2                              DspBuf[4] |= 0x10;//P4
 651   2                      DspBuf[6] |= 0x10;//P2
 652   2                              
 653   2                              if(Fee1==1)
 654   2                              {
 655   3                                      if(Fee0==1)     DspBuf[1] |= 0x40;      //显示谷
 656   3                                      else            DspBuf[0] |= 0x04;      //显示平
 657   3                              }
 658   2                              else                    DspBuf[1] |= 0x10;      //显示峰        
 659   2                              break;
 660   2                                      
 661   2                      case 0x05:
 662   2                              if(DspPage==0)
 663   2                  {   
 664   3                      DspBuf[1] |= 0x20;
 665   3                      DspBuf[2] |= 0x10;               
 666   3                  }         
 667   2                              break;
 668   2                              
 669   2                      case 0x06:
 670   2                              if(DspPage==0)DspBuf[7] |= 0x10;
 671   2                              else
 672   2                              {
 673   3                                      DspBuf[7] = 0x00;
 674   3                                      DspBuf[6] = 0x00;                               
 675   3                                      
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 12  

 676   3                                      i = Temp_Read();//读温度值
 677   3                              
 678   3                                   if(i&0x80)
 679   3                                      {
 680   4                                              DspBuf[6] = 0x02;//"-"
 681   4                                              i = ~i+1;
 682   4                                      }
 683   3                                      
 684   3                                      DspBuf[5] = LcdCoding[i/10];
 685   3                                      DspBuf[4] = LcdCoding[i%10];
 686   3                                      
 687   3                                      //摄氏度符号
 688   3                                      DspBuf[3] = 0xAA;//"0"
 689   3                                      DspBuf[2] = 0x8D;//"C"
 690   3                              }
 691   2                              break;
 692   2                                      
 693   2                      default:
 694   2                              DspBuf[1] |= 0x09;                                                              //"电量"+"kW/h"                 
 695   2                              
 696   2                              if(DspType==0)                          DspBuf[3] |= 0x10;      //小数点
 697   2                              if(DspType==1&&DspPage==1)      DspBuf[4] |= 0x10;      //小数点
 698   2                                                      
 699   2                              if(DspPtr>0x07) DspBuf[0] |= 0x02;                              //上月 
 700   2                              if(DspPtr>0x0B) DspBuf[0] |= 0x42;                              //上上月        
 701   2                              
 702   2                              if(             DspPtr==0x02||DspPtr==0x08||DspPtr==0x0C)       DspBuf[0] |= 0x01;      //总            
 703   2                      else if(DspPtr==0x03||DspPtr==0x09||DspPtr==0x0D)       DspBuf[1] |= 0x10;      //峰
 704   2                      else if(DspPtr==0x0A||DspPtr==0x0E)                                     DspBuf[0] |= 0x04;      //平
 705   2                      else                                                                                            DspBuf[1] |= 0x40;      //谷                    
 706   2                              break;
 707   2              }       
 708   1      
 709   1              //满屏测试显示
 710   1              if(DspPtr==16)
 711   1              {
 712   2                      for(i=0x00;i<0x08;i++) DspBuf[i]=0xFF;
 713   2              }
 714   1      
 715   1              if(DspPtr==17)
 716   1              {
 717   2                  ArrayInit(DspBuf,8);
 718   2                      DspBuf[7] = 0x8F;//"E"
 719   2                      DspBuf[6] = 0x6A;//"4"
 720   2              }
 721   1      
 722   1              Display(DspBuf);        //输送显示数据
 723   1      }
 724          
 725          
 726          
 727          
 728          //**********************************************************
 729          //读取显示控制数据
 730          //**********************************************************            
 731          void DspPara_Read(void)
 732          {
 733   1              uchar Temp;
 734   1              
 735   1              Addr[0] = 0xA0;
 736   1          Addr[1] = 0xDC;     
 737   1          Len[1]  = 0x04;     
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 13  

 738   1          do
 739   1          {
 740   2              ReadData(DspPara);               
 741   2              Temp = DspPara[0]+DspPara[1]+DspPara[2];//SumCHK(DspPara,3);            
 742   2          }while((DspPara[3]!=~Temp)&&(Addr[0]<=0xA4));
 743   1              
 744   1          if(DspPara[3]!=~Temp)               //显示数据默认值,必要时可以更改
 745   1          {   
 746   2              DspTime    = 0x10;              //10秒,BCD码
 747   2              DspCtrl2   = 0x00;
 748   2              DspCtrl1   = 0x7F;
 749   2              DspParaCHK = 0x70;              //校验和反码
 750   2          }
 751   1      
 752   1          ErrorModify(0xA4,DspPara);  //保存区数据恢复
 753   1      }
 754          
 755          
 756          
 757          
 758          
 759          //**********************************************************
 760          // 名称:DateTerm
 761          // 功能:校时期判断(25天判断)
 762          // 说明:
 763          //**********************************************************
 764          bit DateTerm(void)
 765          {
 766   1              uchar Temp;
 767   1              uchar DataTime[5];      
 768   1                      
 769   1              if(Prog_Flag==1)return(1);
 770   1              else 
 771   1              {       
 772   2                      Addr[0] = 0xA2;//读取上次较时时间
 773   2                      Addr[1] = 0xF8;                                       
 774   2              Len[1]  = 0x05;         
 775   2              do
 776   2              {
 777   3                      ReadData(DataTime);     
 778   3                      Temp      = SumCHK(DataTime,4);         
 779   3              } while((Temp!=DataTime[4])&&(Addr[0]<=0xA6));
 780   2              
 781   2                      if(Temp!=DataTime[4])
 782   2                      {
 783   3                              DataTime[0] = 0x00;                                             //分
 784   3                              DataTime[1] = 0x00;                                             //时
 785   3                              DataTime[2] = 0x01;                                             //日
 786   3                              DataTime[3] = 0x01;                                             //月
 787   3                      }       
 788   2      
 789   2                      //============================================
 790   2                      //月判断
 791   2                      //============================================  
 792   2                      Temp            = BCD2HEX(Month);                               //当前月份
 793   2                      DataTime[3] = BCD2HEX(DataTime[3]);                     //上次校时月份
 794   2      
 795   2                      if(Temp<DataTime[3]) Temp += 12;                        //跨年              
 796   2                      DataTime[4] = Temp-DataTime[3]; 
 797   2              
 798   2                      if(DataTime[4]>1) return(1);                            //相隔两个月,满足校表日期条件
 799   2                      else
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 14  

 800   2                      {       
 801   3                              //========================================
 802   3                              //日判断
 803   3                              //========================================
 804   3                              Temp        = BCD2HEX(Day);                             //当前日期
 805   3                              DataTime[2] = BCD2HEX(DataTime[2]);             //上次校时日期   
 806   3                       
 807   3                      if(DataTime[4]==1)
 808   3                      {
 809   4                                      if( DataTime[3]==2 )               //上次校时月份
 810   4                              {             
 811   5                                      if((BCD2HEX(Year)%0x04)==0x00)  Temp += 29;//闰月判断,百年问题不考虑
 812   5                                              else                                                    Temp += 28;                     
 813   5                                      }                               
 814   4                                      else if(DataTime[3]==4||DataTime[3]==6||DataTime[3]==9||DataTime[3]==11) Temp += 30;    
 815   4                                                                              
 816   4                                      else Temp += 31;
 817   4                              }                                                                       
 818   3                      
 819   3                              if(Temp>DataTime[2])
 820   3                              {
 821   4                                      Temp -= DataTime[2];
 822   4                              
 823   4                                      //校时限制天数(25天)判断                
 824   4                              if(Temp>DateErrorTerm)  return(1);      
 825   4                              else if(Temp==DateErrorTerm)//天数相等
 826   4                              {       
 827   5                                              //小时、分比较
 828   5                                      if((Hour>DataTime[1])||((Hour==DataTime[1])&&(Min>=DataTime[0])))return(1);                     
 829   5                                      else return(0);                 
 830   5                                      }
 831   4                              else return(0);     
 832   4                      }
 833   3                      else return(0); 
 834   3                      }
 835   2              }
 836   1      }
 837          
 838          
 839          
 840          
 841          //**********************************************************
 842          // 名称:Ery_Balance
 843          // 功能:电量结算
 844          // 说明:
 845          //**********************************************************
 846          void Ery_Balance(void)
 847          {
 848   1              uchar Temp;     
 849   1              uchar TMonth[2];
 850   1              uchar TBalance[3];
 851   1              
 852   1              ES  = 0;                
 853   1              TR0 = 0;        //关闭超时监控定时器
 854   1      
 855   1              CommTimer = 0x00;
 856   1              ComPtr    = 0x00;
 857   1              
 858   1              //读取上次结算月份
 859   1              Addr[0] = 0xA2; 
 860   1          Addr[1] = 0xCC;    
 861   1          Len[1]  = 0x02;
C51 COMPILER V7.50   RTC_DSP                                                               04/13/2007 13:24:54 PAGE 15  

 862   1          do
 863   1          {

⌨️ 快捷键说明

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