2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > c软件查表获得电量代码_energy.c 源代码查看 - 基于单片机的多费率电能表源程

c软件查表获得电量代码_energy.c 源代码查看 - 基于单片机的多费率电能表源程

时间:2023-07-05 09:13:41

相关推荐

c软件查表获得电量代码_energy.c 源代码查看 - 基于单片机的多费率电能表源程

#define ENERGY_GLOBALS#include "includes.h"void EnergyDataPowerOnInit(void){INT8U i;EnergyReverseTest.ReverseRecordCnt=0;CalculateTatolEnergy();if(ReadEepromData(LAST_POWERDOWN_TIME_ID,TempBufOfMain))//以下是上电转存处理{if((TempBufOfMain[0]==0)&&(TempBufOfMain[1]==0)&&(TempBufOfMain[2]==0)&&(TempBufOfMain[3]==0))//没有停电记录return;if(TempBufOfMain[3]!=CurrentTime.Year)//停电跨年{if((TempBufOfMain[2]==0x12)&&(CurrentTime.Month==0x01))//停电时间不超过一个月{if((TempBufOfMain[1]{EnergyMonthStore();}elseif((MonthStoreDate[1]{EnergyMonthStore();}}else//超过一个月{EnergyMonthStore();}}else//停电不跨年{if(TempBufOfMain[2]==CurrentTime.Month)//停电不跨年不跨月{if((TempBufOfMain[1]{if((MonthStoreDate[1]{EnergyMonthStore();}}}else//不跨年但跨月{TempBufOfMain[2]+=2;if((TempBufOfMain[2]&0x0f)>=0x0a)TempBufOfMain[2]+=0x06;//转化成BCD码if(CurrentTime.Month>=TempBufOfMain[2])//停电跨2个月EnergyMonthStore();else//跨月但没有跨2个月{if((TempBufOfMain[1]{EnergyMonthStore();}elseif((MonthStoreDate[1]{EnergyMonthStore();}}}}}for(i=0;iTempBufOfMain[i]=0;WriteEepromData(LAST_POWERDOWN_TIME_ID,TempBufOfMain); }//有功电能计算void ActiveEnergyCalculate(void){INT8U CarryCnt;INT8U *Pnt;_EnergyAccum=0;IncBcd(&EnergyData.ActiveTotalEnergy[0],4);Pnt=&EnergyData.ActiveTotalEnergy[0];Pnt+=((TimeSliceInfo.CurrentRateID-1)IncBcd(Pnt,4);WriteEepromData(ACTIVE_ENERGY_ID0+EnergyData.EnergyPointer,&EnergyData.ActiveRate1Energy[0]);}void ReverseEnergyCalculate(void){_ReverseEnergyAccum=0;IncBcd(&EnergyData.ActiveReverseEnergy[0],4);WriteEepromData(REVERSE_TOTAL_ENERGY_ID,&EnergyData.ActiveReverseEnergy[0]);}void PowerDownTask(void){TempBufOfMain[0]=PulseSample.PulseNum[0];TempBufOfMain[1]=PulseSample.PulseNum[1];TempBufOfMain[2]=PulseSample.PulseNum[2];TempBufOfMain[3]=PulseSample.PulseNum[3];WriteEepromData(ENERGY_PULSE_ID,TempBufOfMain);TempBufOfMain[0]=CurrentTime.Hour;TempBufOfMain[1]=CurrentTime.Day;TempBufOfMain[2]=CurrentTime.Month;TempBufOfMain[3]=CurrentTime.Year;WriteEepromData(LAST_POWERDOWN_TIME_ID,TempBufOfMain);while(1);}void EnergyMonthStore(void){WriteEepromData(ACTIVE_ENERGY_ID0+EnergyData.EnergyPointer,&EnergyData.ActiveRate1Energy[0]);EnergyData.EnergyPointer++;if(EnergyData.EnergyPointer>12)EnergyData.EnergyPointer=0;WriteEepromData(ACTIVE_ENERGY_ID0+EnergyData.EnergyPointer,&EnergyData.ActiveRate1Energy[0]);TempBufOfMain[0]=EnergyData.EnergyPointer;WriteEepromData(CURRENT_ENERGY_POINTER_ID,TempBufOfMain);}void CalculateTatolEnergy(void){BcdAdd(&EnergyData.ActiveRate1Energy[0],&EnergyData.ActiveRate2Energy[0],TempBufOfMain,4);BcdAdd(TempBufOfMain,&EnergyData.ActiveRate3Energy[0],&EnergyData.ActiveTotalEnergy[0],4);}void InitEnergyData(INT8U *DataPnt){INT8U i;INT8U *Pnt;/*初始化当前正向电量*/Pnt=&EnergyData.ActiveRate1Energy[0];for(i=0;i{*Pnt=*DataPnt;Pnt++;DataPnt++;}CalculateTatolEnergy();/*初始化当前反向电量*/Pnt=&EnergyData.ActiveReverseEnergy[0];for(i=0;i{*Pnt=0;Pnt++;}/*清0历史电量*/for(i=0;iTempBufOfMain[i]=0;for(i=ACTIVE_ENERGY_ID1;iWriteEepromData(i,TempBufOfMain);PulseSample.PulseNum[0]=0;PulseSample.PulseNum[1]=0;PulseSample.PulseNum[2]=0;PulseSample.PulseNum[3]=0;//保存当前锋平谷电能WriteEepromData(ACTIVE_ENERGY_ID0,&EnergyData.ActiveRate1Energy[0]);//保存反向电能WriteEepromData(REVERSE_TOTAL_ENERGY_ID,&EnergyData.ActiveReverseEnergy[0]);//保存电能脉冲数TempBufOfMain[0]=0;TempBufOfMain[1]=0;TempBufOfMain[2]=0;TempBufOfMain[3]=0;WriteEepromData(ENERGY_PULSE_ID,TempBufOfMain);EnergyData.EnergyPointer=0;WriteEepromData(CURRENT_ENERGY_POINTER_ID,&EnergyData.EnergyPointer);}void EnergyReverseDeal(void){if(IS_ENERGY_REVERSE_HIGH){EnergyReverseTest.ReverseHighCnt=0;EnergyReverseTest.ReverseLowCnt++;if(EnergyReverseTest.ReverseLowCnt>=3){MeterRunningState&=0xef;//正向电能EnergyReverseTest.ReverseLowCnt=0;EnergyReverseTest.ReverseState=0;}}else{EnergyReverseTest.ReverseLowCnt=0;EnergyReverseTest.ReverseHighCnt++;if(EnergyReverseTest.ReverseHighCnt>=3){MeterRunningState|=0x10;//反向电能EnergyReverseTest.ReverseHighCnt=0;if(EnergyReverseTest.ReverseState==0){TempBufOfMain[0]=CurrentTime.Minute;TempBufOfMain[1]=CurrentTime.Hour;TempBufOfMain[2]=CurrentTime.Day;TempBufOfMain[3]=CurrentTime.Month;WriteEepromData(LAST_POWER_REVERSE_TIME_ID,TempBufOfMain);EnergyReverseTest.ReverseState=1;}}}if(EnergyReverseTest.ReverseState){EnergyReverseTest.ReverseRecordCnt++;if(EnergyReverseTest.ReverseRecordCnt>=60){EnergyReverseTest.ReverseRecordCnt=0;IncBcd(ReverseTotalTime,3);WriteEepromData(POWER_REVERSE_TOTALTIME_ID,ReverseTotalTime);}}}

c软件查表获得电量代码_energy.c 源代码在线查看 - 基于单片机的多费率电能表源程序 资源下载 虫虫电子下载站...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。