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

📄 multirate.c

📁 基于单片机的多费率电能表源程序
💻 C
字号:
#define MULTIRATE_GLOBALS
#include "includes.h"
void MultiRateInit(void)
{
	
	INT8U i;
	INT16U CurrentTimeTemp;
	INT16U TempVar;
	INT8U *Pnt;
	/*查找当前时段*/
	Pnt=&TimeSliceInfo.TimeSlice[0].Minute;
	CurrentTimeTemp=CurrentTime.Hour;
	CurrentTimeTemp<<=8;
	CurrentTimeTemp+=CurrentTime.Minute;								
	for(i=0;i<TimeSliceInfo.TimeSliceNum;i++)
	{
		TempVar=*(Pnt+1);
		TempVar<<=8;
		TempVar+=*Pnt;
		Pnt+=3;
		if(CurrentTimeTemp<TempVar)
		{			
			break;
		}		
	}
	if((i==0)||(i==TimeSliceInfo.TimeSliceNum))
	{	
		TimeSliceInfo.CurrentTimeSliceID=TimeSliceInfo.TimeSliceNum-1;	
	}
	else
	{
		TimeSliceInfo.CurrentTimeSliceID=i-1;
	}
	TimeSliceInfo.NextTimeSliceID=(TimeSliceInfo.CurrentTimeSliceID+1)%TimeSliceInfo.TimeSliceNum;
	TimeSliceInfo.CurrentRateID=TimeSliceInfo.TimeSlice[TimeSliceInfo.CurrentTimeSliceID].RateID;
}
void RateNormalRunningTask(void)
{
	if((CurrentTime.Hour==TimeSliceInfo.TimeSlice[TimeSliceInfo.NextTimeSliceID].Hour)&&(CurrentTime.Minute>=TimeSliceInfo.TimeSlice[TimeSliceInfo.NextTimeSliceID].Minute))
	{
		TimeSliceInfo.CurrentTimeSliceID=(TimeSliceInfo.CurrentTimeSliceID+1)%TimeSliceInfo.TimeSliceNum;
		TimeSliceInfo.NextTimeSliceID=(TimeSliceInfo.CurrentTimeSliceID+1)%TimeSliceInfo.TimeSliceNum;
		TimeSliceInfo.CurrentRateID=TimeSliceInfo.TimeSlice[TimeSliceInfo.CurrentTimeSliceID].RateID;		
	}	
}
void TimeSliceSort(void)
{
	INT8U i,j,change;
	INT8U TempHour,TempMinute,TempRateID;	
	for(i=TimeSliceInfo.TimeSliceNum-1,change=1;i>0&&change;i--)
	{
		change=0;
		for(j=0;j<i;j++)
		{
			if((TimeSliceInfo.TimeSlice[j].Hour>TimeSliceInfo.TimeSlice[j+1].Hour)||((TimeSliceInfo.TimeSlice[j].Hour==TimeSliceInfo.TimeSlice[j+1].Hour)&&(TimeSliceInfo.TimeSlice[j].Minute>TimeSliceInfo.TimeSlice[j+1].Minute)))
			{	
				TempHour=TimeSliceInfo.TimeSlice[j+1].Hour;
				TempMinute=TimeSliceInfo.TimeSlice[j+1].Minute;
				TempRateID=TimeSliceInfo.TimeSlice[j+1].RateID;
				TimeSliceInfo.TimeSlice[j+1].Hour=TimeSliceInfo.TimeSlice[j].Hour;
				TimeSliceInfo.TimeSlice[j+1].Minute=TimeSliceInfo.TimeSlice[j].Minute;
				TimeSliceInfo.TimeSlice[j+1].RateID=TimeSliceInfo.TimeSlice[j].RateID;
				TimeSliceInfo.TimeSlice[j].Hour=TempHour;
				TimeSliceInfo.TimeSlice[j].Minute=TempMinute;
				TimeSliceInfo.TimeSlice[j].RateID=TempRateID;
				change=1;
			}
		}
	}
}
INT8U TimeSliceTableCheck(void)
{
	INT8U i;
	INT8U TempVar1,TempVar2;
	TempVar1=(TimeSliceInfo.TimeSlice[0].Minute>>4)*10+(TimeSliceInfo.TimeSlice[0].Minute&0x0f);
	TempVar2=(TimeSliceInfo.TimeSlice[TimeSliceInfo.TimeSliceNum-1].Minute>>4)*10+(TimeSliceInfo.TimeSlice[TimeSliceInfo.TimeSliceNum-1].Minute&0x0f);
	if((TimeSliceInfo.TimeSlice[TimeSliceInfo.TimeSliceNum-1].Hour==0x23)&&(TimeSliceInfo.TimeSlice[0].Hour==0x00))//检查第一个时段和最后一个时段之间的时间间隔是否大于30分钟
	{
		if((TempVar2>(TempVar1+30)))
			return 0;
	}
	for(i=0;i<TimeSliceInfo.TimeSliceNum-1;i++)//检查相邻两时段之间的时间间隔是否大于30分钟
	{
		TempVar2=(TimeSliceInfo.TimeSlice[i+1].Minute>>4)*10+(TimeSliceInfo.TimeSlice[i+1].Minute&0x0f);
		if(TimeSliceInfo.TimeSlice[i].Hour==TimeSliceInfo.TimeSlice[i+1].Hour)
		{
			if((TempVar1+30)>TempVar2)
				return 0;
			TempVar1=TempVar2;
		}
		else
		{
			
			if(((TimeSliceInfo.TimeSlice[i].Hour+1)==TimeSliceInfo.TimeSlice[i+1].Hour)&&(TempVar1>(TempVar2+30)))
				return 0;
			
		}
		TempVar1=TempVar2;
	}
	
	return 1;
}

⌨️ 快捷键说明

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