📄 单相复费率.c
字号:
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 + -