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

📄 单相复费率.c

📁 单相复费率电能表源代码 支持红外、 RS85通讯。支持尖、峰、平、谷四个费率
💻 C
📖 第 1 页 / 共 5 页
字号:
                              BataMoveFg=0;//不执行移位操作 
                              LcdDisplayData(0x00,IIcBuf[2],IIcBuf[1],0x00,0x11,0x82,0x21); 
                         }   
              break;          
              case 0x13 ://第19种显示方式数据提取到显示缓冲区---上上月总电量(整数加小数|整数)/
                         //电表先显示整数---6位整数  
                         if(LcdShowBit[1]&0x10) 
                         {
                                if(m)
                             {
                                IicMuchByteRead(0xa0,0x40,3);
                                 BataMoveFg=0;//不执行移位操作 
                                 LcdDisplayData(IIcBuf[2],IIcBuf[1],IIcBuf[0],0x00,0x38,0x82,0x00);
                             }
                             //电表显示整数加小数---5位整数加一位小数
                             else
                             {
                                 IicMuchByteRead(0xa0,0x40,4);
                                 BataMoveFg=1;//执行移位操作 
                                 LcdDisplayData(IIcBuf[3],IIcBuf[2],IIcBuf[1],IIcBuf[0],0x38,0x82,0x51);
                             }
                         }
                         else
                         {
                               LcdRunData=0x15;
                         }
              break;                     
              case 0x14 ://第20种显示方式数据提取到显示缓冲区---上上月总电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                               IicMuchByteRead(0xa0,0x43,2);
                               BataMoveFg=0;//不执行移位操作 
                               LcdDisplayData(0x00,IIcBuf[2],IIcBuf[1],0x00,0x38,0x82,0x21); 
                         }                    
              break;           
              case 0x15 ://第21种显示方式数据提取到显示缓冲区---上上月峰电量(整数加小数|整数)/
                         //电表先显示整数---6位整数  
                         if(LcdShowBit[1]&0x20) 
                         {
                                if(m)
                             {
                                 IicMuchByteRead(0xa0,0x45,3);
                                 BataMoveFg=0;//不执行移位
                                 LcdDisplayData(IIcBuf[2],IIcBuf[1],IIcBuf[0],0x00,0x34,0x82,0x00);
                             }
                             //电表显示整数加小数---5位整数加一位小数
                             else
                             {
                                 IicMuchByteRead(0xa0,0x45,4);
                                 BataMoveFg=1;//执行移位操作 
                                 LcdDisplayData(IIcBuf[3],IIcBuf[2],IIcBuf[1],IIcBuf[0],0x34,0x82,0x51);
                             }
                         }
                         else
                         {
                               LcdRunData=0x17;
                         }
              break;     
              case 0x16 ://第22种显示方式数据提取到显示缓冲区---上上月峰电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                              IicMuchByteRead(0xa0,0x48,2);
                              BataMoveFg=0;//不执行移位操作 
                              LcdDisplayData(0x00,IIcBuf[2],IIcBuf[1],0x00,0x34,0x82,0x21);
                         }   
              break;           
              case 0x17 ://第23种显示方式数据提取到显示缓冲区---上上月平电量(整数加小数|整数)/
                         //电表先显示整数---6位整数  
                         if(LcdShowBit[1]&0x40) 
                         {
                                if(m)
                             {
                                IicMuchByteRead(0xa0,0x50,3);
                                 BataMoveFg=0;//不执行移位操作 
                                 LcdDisplayData(IIcBuf[2],IIcBuf[1],IIcBuf[0],0x00,0x32,0x82,0x00);
                             }
                             //电表显示整数加小数---5位整数加一位小数
                             else
                             {
                                 IicMuchByteRead(0xa0,0x50,4);
                                 BataMoveFg=1;//执行移位操作 
                                 LcdDisplayData(IIcBuf[3],IIcBuf[2],IIcBuf[1],IIcBuf[0],0x32,0x82,0x51);
                             }
                         }
                         else
                         {
                              LcdRunData=0x19;
                         }
              break;                 
              case 0x18 ://第24种显示方式数据提取到显示缓冲区---上上月平电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                              IicMuchByteRead(0xa0,0x53,2);
                              BataMoveFg=0;//不执行移位操作 
                              LcdDisplayData(0x00,IIcBuf[2],IIcBuf[1],0x00,0x32,0x82,0x21);
                         }    
              break;            
              case 0x19 ://第25种显示方式数据提取到显示缓冲区---上上月谷电量(整数加小数|整数)/
                         //电表先显示整数---6位整数  
                         if(LcdShowBit[1]&0x80) 
                         {
                                if(m)
                             {
                                IicMuchByteRead(0xa0,0x55,3);
                                 BataMoveFg=0;//不执行移位操作 
                                 LcdDisplayData(IIcBuf[2],IIcBuf[1],IIcBuf[0],0x00,0x31,0x82,0x00);
                             }
                             //电表显示整数加小数---5位整数加一位小数
                             else
                             {
                                IicMuchByteRead(0xa0,0x55,4);
                                 BataMoveFg=1;//执行移位操作 
                                 LcdDisplayData(IIcBuf[3],IIcBuf[2],IIcBuf[1],IIcBuf[0],0x31,0x82,0x51);
                             }
                         }
                         else
                         {
                               LcdRunData=0x01;
                         }
              break;     
              case 0x1A ://第26种显示方式数据提取到显示缓冲区---上上月谷电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                              IicMuchByteRead(0xa0,0x58,2);
                              BataMoveFg=0;//不执行移位操作 
                              LcdDisplayData(0x00,IIcBuf[2],IIcBuf[1],0x00,0x31,0x82,0x21); 
                                 LcdRunData=0x01;
                                 CkData=0x00;
                         } 
                 break;
        }
    }
    else
    {
        LcdTimeFg=0;
    }
}




#include <REG932.H>
#include <define.h>
#include <Stdio.h>
#include <Intrins.h>
//数据累加
void SumData(void)
{
    //总电量累加
    PulseData=PulseData+1;
    if(PulseData==16)                          
    {
        SumPulseData[0]=SumPulseData[0]+1;
        if(SumPulseData[0]==0x64)
        {
            SumPulseData[0]=0x00;            
            SumPulseData[1]=SumPulseData[1]+1;
            if(SumPulseData[1]==0x64)
            {
                SumPulseData[1]=0x00;
                SumPulseData[2]=SumPulseData[2]+1;
                if(SumPulseData[2]==0x64)
                {
                    SumPulseData[2]=0x00;
                    SumPulseData[3]=SumPulseData[3]+1;
                    if(SumPulseData[3]==0x64)
                    {
                        SumPulseData[0]=0x00;
                        SumPulseData[1]=0x00;
                        SumPulseData[2]=0x00;
                        SumPulseData[3]=0x00;
                    }
                }
            }
        }
    }
    //反向电量累加
    if(ReverseFgToData)
    {
        if(PulseData==16)
        {
            ReversePulseData[0]=ReversePulseData[0]+1;
            if(ReversePulseData[0]==0x64)
            {
                ReversePulseData[0]=0x00;
                ReversePulseData[1]=ReversePulseData[1]+1;
                if(ReversePulseData[1]==0x64)
                {
                    ReversePulseData[1]=0x00;
                    ReversePulseData[2]=ReversePulseData[2]+1;
                    if(ReversePulseData[2]==0x64)
                    {
                        ReversePulseData[2]=0x00;
                        ReversePulseData[3]=ReversePulseData[3]+1;
                        if(ReversePulseData[3]==0x64)
                        {                        
                            ReversePulseData[0]=0x00;
                            ReversePulseData[1]=0x00;
                            ReversePulseData[2]=0x00;
                            ReversePulseData[3]=0x00;
                        }
                    }
                }
            }
        }
    }
    //峰电量累加
    if(FengFg)
    {
        if(PulseData==16)
        { 
            FengPulseData[0]=FengPulseData[0]+1;
            if(FengPulseData[0]==0x64)
            {
                FengPulseData[0]=0x00;
                FengPulseData[1]=FengPulseData[1]+1;
                if(ReversePulseData[1]==0x64)
                {
                    FengPulseData[1]=0x00;
                    FengPulseData[2]=FengPulseData[2]+1;
                    if(ReversePulseData[2]==0x64)
                    {
                        FengPulseData[2]=0x00;
                        FengPulseData[3]=FengPulseData[3]+1;
                        if(FengPulseData[3]==0x64)
                        {
                            FengPulseData[0]=0x00;
                            FengPulseData[1]=0x00;
                            FengPulseData[2]=0x00;
                            FengPulseData[3]=0x00;
                        }
                    }
                }
            }
        }
    }    
    //平电量累加
    if(PingFg)
    {
        if(PulseData==16)
        {
            PingPulseData[0]=PingPulseData[0]+1;
            if(PingPulseData[0]==0x64)
            {
                PingPulseData[0]=0x00;
                PingPulseData[1]=PingPulseData[1]+1;
                if(PingPulseData[1]==0x64)
                {
                    PingPulseData[1]=0x00;
                    PingPulseData[2]=PingPulseData[2]+1;
                    if(PingPulseData[2]==0x64)
                    {
                        PingPulseData[2]=0x00;
                        PingPulseData[3]=PingPulseData[3]+1;
                        if(PingPulseData[3]==0x64)
                        {
                            PingPulseData[0]=0x00;
                            PingPulseData[1]=0x00;
                            PingPulseData[2]=0x00;
                            PingPulseData[3]=0x00;
                        }
                    }
                }
            }
        }
    }    
    //谷电量累加
    if(GuFg)
    {
        if(PulseData==16)
        {
            GuPulseData[0]=GuPulseData[0]+1;
            if(GuPulseData[0]==0x64)
            {
                GuPulseData[0]=0x00;
                GuPulseData[1]=GuPulseData[1]+1;
                if(GuPulseData[1]==0x64)
                {
                    GuPulseData[1]=0x00;
                    GuPulseData[2]=GuPulseData[2]+1;
                    if(GuPulseData[2]==0x64)
                    {
                        GuPulseData[2]=0x00;
                        GuPulseData[3]=GuPulseData[3]+1;
                        if(GuPulseData[3]==0x64)
                        {
                            GuPulseData[0]=0x00;
                            GuPulseData[1]=0x00;
                            GuPulseData[2]=0x00;
                            GuPulseData[3]=0x00;
                        }
                    }
                }
            }
         }
    }
    if(PulseData==16)
    {
        PulseData=0;
    }
}
void PulseParse(void)
{
    if(PulseParseFg)
    {   
        
        KeyTemp=~P0&0x30;
        KeyTemp=KeyTemp>>4;    
        switch(KeyTemp)    
        {
            case 0x00 : //正向电量脉冲采集---累积正向电量   
                        if(SumBit)
                        {
                            SumData();
                            SumBit=0;
                        }                                                      
                        ReverseFgToData=0;
                        ReverseFgToLcd=0;
                        KBMASK=KBMASK|0x30;
                        EKBI=1;
            break;
            case 0x01 :    //正向电量脉冲有效标志
                        
                        SumBit=1;
                        ReverseFgToData=0;
                           ReverseFgToLcd=0;
                           KBMASK=KBMASK|0x10;
                        EKBI=1;
            break;
            case 0x02 : //反向电量脉冲标志+脉冲有效---累积标志---反向电量
                        
                        
                        ReverseFgToData=1;
                        ReverseFgToLcd=1;
                        if(AddRev)
                    

⌨️ 快捷键说明

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