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

📄 单相复费率.c

📁 单相复费率电能表源代码 支持红外、 RS85通讯。支持尖、峰、平、谷四个费率
💻 C
📖 第 1 页 / 共 5 页
字号:
       break;
       case 0x21 : //第2位带小数点的显示/                  
                   LcdFull(DataOne,DataTwo,DataThree,DataFour);  
                   LcdShowBuf[1]=LcdShowBuf[1]|0x01;
       break;
       case 0x41 : //第4位带小数点的显示/                  
                   LcdFull(DataOne,DataTwo,DataThree,DataFour);  
                   LcdShowBuf[1]=LcdShowBuf[1]|0x01;
                   LcdShowBuf[3]=LcdShowBuf[3]|0x01;
       break;
       case 0x51 : //第5位带小数点的显示/                  
                   LcdFull(DataOne,DataTwo,DataThree,DataFour);  
                   LcdShowBuf[4]=LcdShowBuf[4]|0x01;
       break;
   }
   if(ComFg)
   {
        LcdShowBuf[7]=LcdShowBuf[7]|0x10;
   }
   else
   {
        LcdShowBuf[7]=LcdShowBuf[7]&0xef;
   }
   if(ReverseFgToLcd)
   {
        LcdShowBuf[7]=LcdShowBuf[7]|0x40;
   }
   else
   {
        LcdShowBuf[7]=LcdShowBuf[7]&0xbf;
   }     
   LcdStart();
   LcdSendId(0xa0);               //写数据操作
   LcdSendAddress(0x00);
   for(i=0;i<8;i++)
   {
        LcdSendByte(LcdShowBuf[i]);
        Delay(LcdDelay);
   }
   LcdStop();
}
void LcdParse(void)
{
    unsigned char data i,j,k,l,m;
    unsigned char data databuf[4];
    if(LcdTimeFg)
    {
        m=LcdShowBit[0]&0x80;
        switch(LcdRunData)
        {
            case 0x01 ://第01种显示方式数据提取到显示缓冲区---当前日期/                   
                       if(LcdShowBit[0]&0x01)
                       {
                          i=IicByteRead(0x64,0x40) & 0x3f;
                          j=IicByteRead(0x64,0x50) & 0x1f;
                          k=IicByteRead(0x64,0x60);
                          l=0;
                          BataMoveFg=0;//不执行移位操作 
                          LcdDisplayData(i,j,k,l,0x80,0x00,0x41);
                       }
                       else
                       {
                          LcdRunData=0x02;
                       }
              break;       
              case 0x02 ://第02种显示方式数据提取到显示缓冲区---当前时间/
                         if(LcdShowBit[0]&0x02)
                         {
                             k=IicByteRead(0x64,0x00) & 0x7f;
                             j=IicByteRead(0x64,0x10) & 0x7f;
                             i=IicByteRead(0x64,0x20) & 0x3f;
                             l=0; 
                             BataMoveFg=0;//不执行移位操作
                             LcdDisplayData(i,j,k,l,0x40,0x0c,0x00);
                         }
                         else
                         {
                             LcdRunData=0x03;
                         }
              break;                                
              case 0x03 ://第03种显示方式数据提取到显示缓冲区---当前总电量(整数加小数|整数)
            
                            //电表先显示整数---6位整数
                            if(m)
                         {        
                             BataMoveFg=0;//不执行移位操作 
                                for(i=0;i<4;i++)    
                                {
                                   databuf[i]=HexToBcd(SumPulseData[i]);
                                }
                             LcdDisplayData(databuf[2],databuf[1],databuf[0],0x00,0x08,0x82,0x00);
                         }
                         //电表显示整数加小数---5位整数加一位小数
                         else
                         {
                             BataMoveFg=1;//执行移位操?
                                for(i=0;i<4;i++)    
                                {
                                   databuf[i]=HexToBcd(SumPulseData[i]);
                                }
                             LcdDisplayData(databuf[3],databuf[2],databuf[1],databuf[0],0x08,0x82,0x51);
                         }
              break;                               
              case 0x04 ://第04种显示方式数据提取到显示缓冲区---当前总电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                             BataMoveFg=0;//不执行移位操作 
                             LcdDisplayData(0x00,SumPulseData[4],SumPulseData[3],0x00,0x08,0x82,0x21);
                         }
                         else
                         {
                               LcdRunData=0x05;
                            }
              break;                               
              case 0x05 ://第05种显示方式数据提取到显示缓冲区---当前峰电量(整数加小数|整数)/
                         //电表先显示整数---6位整数  
                            if(m)
                          {        
                              BataMoveFg=0;//不执行移位操作 
                                 for(i=0;i<4;i++)    
                                 {
                                    databuf[i]=HexToBcd(FengPulseData[i]);
                                 }
                              LcdDisplayData(databuf[2],databuf[1],databuf[0],0x00,0x04,0x82,0x00);
                          }
                          //电表显示整数加小数---5位整数加一位小数
                          else
                          {
                              BataMoveFg=1;//执行移位操?
                                 for(i=0;i<4;i++)    
                                 {
                                    databuf[i]=HexToBcd(FengPulseData[i]);
                                 }
                              LcdDisplayData(databuf[3],databuf[2],databuf[1],databuf[0],0x04,0x82,0x51);
                          }
              break;                          
              case 0x06 ://第06种显示方式数据提取到显示缓冲区---当前峰电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                             BataMoveFg=0;//不执行移位操作 
                             for(i=0;i<4;i++)    
                                {
                                    databuf[i]=HexToBcd(FengPulseData[i]);
                                }
                             LcdDisplayData(0x00,databuf[4],databuf[3],0x00,0x04,0x82,0x21);
                         }
                            else
                            {
                                LcdRunData=0x07;
                            }   
              break;        
              case 0x07 ://第07种显示方式数据提取到显示缓冲区---当前谷电量(整数加小数|整数)/
                            //电表先显示整数---6位整数 
                            if(m)
                         {
                             BataMoveFg=0;//不执行移位操作 
                                for(i=0;i<4;i++)    
                                {
                                    databuf[i]=HexToBcd(GuPulseData[i]);
                                }
                             LcdDisplayData(databuf[2],databuf[1],databuf[0],0x00,0x01,0x82,0x00);
                         }
                         //电表显示整数加小数---5位整数加一位小数
                         else
                         {
                             BataMoveFg=1;//执行移位操?
                                for(i=0;i<4;i++)    
                                {
                                    databuf[i]=HexToBcd(GuPulseData[i]);
                                }
                             LcdDisplayData(databuf[3],databuf[2],databuf[1],databuf[0],0x01,0x82,0x51);
                         }
              break;         
              case 0x08 ://第08种显示方式数据提取到显示缓冲区---当前谷电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                             BataMoveFg=0;//不执行移位操作 
                             for(i=0;i<4;i++)    
                                {
                                   databuf[i]=HexToBcd(GuPulseData[i]);
                                }
                             LcdDisplayData(0x00,databuf[4],databuf[3],0x00,0x01,0x82,0x21);
                         }
                            else
                            {
                                LcdRunData=0x09;
                            }
              break;                              
              case 0x09 ://第09种显示方式数据提取到显示缓冲区---电表地址(后6位)/
                         //电表显示后六位表地址---6位整数 
                            if(LcdShowBit[0]&0x20)
                         {
                             IicMuchByteRead(0xa0,0x83,3);
                             BataMoveFg=0;//不执行移位操作 
                             LcdDisplayData(IIcBuf[0],IIcBuf[1],IIcBuf[2],0x00,0x01,0x82,0x00);
                         }
                         else
                         {
                             LcdRunData=0x0a;
                         }
              break;                                  
              case 0x0a ://第10种显示方式数据提取到显示缓冲区---电表自检/
                         //电表显示错误特征码(E-0000) 
                            if(LcdShowBit[0]&0x40)
                         {
                             IIcBuf[2]=IicByteRead(0xa0,0xC9);
                             BataMoveFg=0;//不执行移位操作 
                             LcdDisplayData(0xab,0x00,IIcBuf[2],0x00,0x00,0x00,0x00);
                         }
                         else
                         {
                             LcdRunData=0x0b;
                         }
              break;                                 
              case 0x0b ://第11种显示方式数据提取到显示缓冲区---上月总电量(整数加小数|整数)/
                           //电表先显示整数---6位整数  
                            if(LcdShowBit[1]&0x01) 
                         {
                              if(m)
                           {
                               IicMuchByteRead(0xa0,0x20,3);
                               BataMoveFg=0;//不执行移位操作 
                               LcdDisplayData(IIcBuf[2],IIcBuf[1],IIcBuf[0],0x00,0x18,0x82,0x00);
                           }
                           //电表显示整数加小数---5位整数加一位小数
                           else
                           {
                               IicMuchByteRead(0xa0,0x20,4);
                               BataMoveFg=1;//执行移位操作 
                               LcdDisplayData(IIcBuf[3],IIcBuf[2],IIcBuf[2],IIcBuf[0],0x18,0x82,0x51);
                           }
                         }
                         else
                         {
                               LcdRunData=0x0d;
                         }
              break;                             
              case 0x0c ://第12种显示方式数据提取到显示缓冲区---上月总电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                             IicMuchByteRead(0xa0,0x23,2);
                             BataMoveFg=0;//不执行移位操作 
                             LcdDisplayData(0x00,IIcBuf[2],IIcBuf[1],0x00,0x18,0x82,0x21);
                         } 
              break; 
              case 0x0d ://第13种显示方式数据提取到显示缓冲区---上月峰电量(整数加小数|整数)/
                         //电表先显示整数---6位整数  
                            if(LcdShowBit[1]&0x02) 
                         {
                                if(m)
                             {
                                 IicMuchByteRead(0xa0,0x25,3);
                                 BataMoveFg=0;//不执行移位操作 
                                 LcdDisplayData(IIcBuf[2],IIcBuf[1],IIcBuf[0],0x00,0x14,0x82,0x00);
                             }
                             //电表显示整数加小数---5位整数加一位小数
                             else
                             {
                                 IicMuchByteRead(0xa0,0x25,4);
                                 BataMoveFg=1;//执行移位操作 
                                 LcdDisplayData(IIcBuf[3],IIcBuf[2],IIcBuf[1],IIcBuf[0],0x14,0x82,0x51);
                             }
                         }
                         else
                         {
                               LcdRunData=0x0f;
                         }
              break;                  
              case 0x0e ://第14种显示方式数据提取到显示缓冲区---上月峰电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                              IicMuchByteRead(0xa0,0x27,2);
                              BataMoveFg=0;//不执行移位操作 
                              LcdDisplayData(0x00,IIcBuf[2],IIcBuf[1],0x00,0x14,0x82,0x21); 
                         }   
              break;          
              case 0x0f ://第15种显示方式数据提取到显示缓冲区---上月平电量(整数加小数|整数)/
                         //电表先显示整数---6位整数 
                            if(LcdShowBit[1]&0x04) 
                         {
                                if(m)
                             {
                                IicMuchByteRead(0xa0,0x30,3);
                                BataMoveFg=0;//不执行移位操作 
                                LcdDisplayData(IIcBuf[2],IIcBuf[1],IIcBuf[0],0x00,0x12,0x82,0x00);
                             }
                             //电表显示整数加小数---5位整数加一位小数
                             else
                             {
                                 IicMuchByteRead(0xa0,0x30,4);
                                 BataMoveFg=1;//执行移位操作 
                                 LcdDisplayData(IIcBuf[3],IIcBuf[2],IIcBuf[1],IIcBuf[0],0x12,0x82,0x51);
                             }
                         }
                         else
                         {
                              LcdRunData=0x11;
                         }
              break;                              
              case 0x10 ://第16种显示方式数据提取到显示缓冲区---上月平电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                               IicMuchByteRead(0xa0,0x25,3);
                               BataMoveFg=0;//不执行移位操作 
                               LcdDisplayData(0x00,IIcBuf[2],IIcBuf[1],0x00,0x12,0x82,0x21);
                         }                     
              break;           
              case 0x11 ://第17种显示方式数据提取到显示缓冲区---上月谷电量(整数加小数|整数)/
                         //电表先显示整数---6位整数 
                         if(LcdShowBit[1]&0x08) 
                         {
                                if(m)
                             {
                                 IicMuchByteRead(0xa0,0x35,3);
                                 BataMoveFg=0;//不执行移位操作 
                                 LcdDisplayData(IIcBuf[2],IIcBuf[1],IIcBuf[0],0x00,0x11,0x82,0x00);
                             }
                             //电表显示整数加小数---5位整数加一位小数
                             else
                             {
                                 IicMuchByteRead(0xa0,0x35,4);
                                 BataMoveFg=1;//执行移位操作 
                                 LcdDisplayData(IIcBuf[3],IIcBuf[2],IIcBuf[1],IIcBuf[0],0x11,0x82,0x51);
                             }
                         }
                         else
                         {
                              LcdRunData=0x13;
                         }
              break;                                 
              case 0x12 ://第18种显示方式数据提取到显示缓冲区---上月谷电量(小数)/
                         //显示小数---4位小数最后两位代表脉冲个数 
                         if(m)
                         {
                              IicMuchByteRead(0xa0,0x38,2);

⌨️ 快捷键说明

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