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

📄 time.c

📁 内含单片机中对日期时间的查询等功能,可对单片机存储空间进行时间点分配查询的功能
💻 C
📖 第 1 页 / 共 2 页
字号:


void 	ContinueComm(void);
void 	Centercomm(void);


uint GetPoint(uint spacetemp,uint SumPoint,uint OldPoint,struct TIME_ITEM_D *OldTim,struct TIME_ITEM_D *NowTime);
uint GetPointAppl(uint spacetemp,uint SumPoint,uint OldPoint,struct TIME_ITEM_D *OldTim,struct TIME_ITEM_D *NowTime);

void GetPointNextTime(ulong PointNextNum,uint spacetemp,uchar OldYear
		    ,uchar OldMonth,uchar OldDay,uchar OldHour,uchar OldMinute);
void 	FmuReupdataHead(void);

/******************************
** 功能:处理连续读数据命令  **
** 入口:无                  **
** 出口:无                  **
******************************/



uint GetDayInYear(uchar DYear,uchar DMonth,uchar DDay)
{
 uintx day;
 ucharx year,year_rday;
 
 FmuPublic_Watchdog();
 day=(uint)BCD_HEX(DDay);
 year=BCD_HEX(DYear);
 if(year%4==0)
 	year_rday=1;
 else	year_rday=0;
 
 if(DMonth==1)
 	return(day);
 else if(DMonth==2)
 		day=day+31;
 else if(DMonth==3)
 		day=day+59+year_rday;
 else if(DMonth==4)
 		day=day+90+year_rday;
 else if(DMonth==5)
 		day=day+120+year_rday;
 else if(DMonth==6)
 		day=day+151+year_rday;
 else if(DMonth==7)
 		day=day+181+year_rday;
 else if(DMonth==8)
 		day=day+212+year_rday;
 else if(DMonth==9)
 		day=day+243+year_rday;
 else if(DMonth==0x10)
 		day=day+273+year_rday;
 else if(DMonth==0x11)
 		day=day+304+year_rday;
 else if(DMonth==0x12)
 		day=day+334+year_rday;
 else		day=1;
 return(day);
}
uint GetPointAppl(uint spacetemp,uint SumPoint,uint OldPoint,struct TIME_ITEM_D *OldTime,struct TIME_ITEM_D *NowTime)
{
 //ucharx spacetemp;
 uintx	itemp,oldtemp,nowtemp;
 ulongx	ltemp,ltemp1;
 uintx	point;
 
 FmuPublic_Watchdog();
 
 oldtemp=BCD_HEX((*OldTime).Year);
 nowtemp=BCD_HEX((*NowTime).Year);
   if((*NowTime).Year<(*OldTime).Year)
 {
 	if((oldtemp-nowtemp)>1) 		
 		return(0);
 	if((nowtemp%4)==0)
 		itemp=366;
 	else	itemp=365;
 	oldtemp=GetDayInYear((*OldTime).Year,(*OldTime).Month,(*OldTime).Day)+itemp;
 	nowtemp=GetDayInYear((*NowTime).Year,(*NowTime).Month,(*NowTime).Day);
 }
   else if((*NowTime).Year>(*OldTime).Year)
 {
 	if((nowtemp-oldtemp)>1)
 		return(0);
 	if((oldtemp%4)==0)
 		itemp=366;
 	else	itemp=365;
 	oldtemp=GetDayInYear((*OldTime).Year,(*OldTime).Month,(*OldTime).Day);
 	nowtemp=GetDayInYear((*NowTime).Year,(*NowTime).Month,(*NowTime).Day)+itemp; 
 }
 else
 {
 	oldtemp=GetDayInYear((*OldTime).Year,(*OldTime).Month,(*OldTime).Day);
 	nowtemp=GetDayInYear((*NowTime).Year,(*NowTime).Month,(*NowTime).Day); 
 }

 if(oldtemp>nowtemp)	//向下一时间查找
 {
 	FmuPublic_Watchdog();
 	ltemp=(ulong)(oldtemp-nowtemp)*1440;
 	oldtemp=(uint)(BCD_HEX((*OldTime).Minute))+(uint)(BCD_HEX((*OldTime).Hour))*60;
 	nowtemp=(uint)(BCD_HEX((*NowTime).Minute))+(uint)(BCD_HEX((*NowTime).Hour))*60;
 	FmuPublic_Watchdog();
 	ltemp1=(ulong)(ltemp+oldtemp-nowtemp);
 	ltemp1=(ulong)(ltemp1/spacetemp);
 	FmuPublic_Watchdog();
 	//if(ltemp1>=SumPoint)
 	//	return(OUTPOINT);
 	PointPreOrNext=POINTPRE;
 	PointCircleNum=(uchar)(ltemp1/SumPoint);
 	
 	ltemp1=ltemp1%SumPoint;
 	point=(uint)ltemp1;
 	if(OldPoint<point)
 	{
 		PointCircleNum++;
 		point=SumPoint+OldPoint-point;
 	}
 	else
 		point=OldPoint-point;
 	
 }
 else if(oldtemp<nowtemp) //往上一时间查找
 {
 	FmuPublic_Watchdog();
 	ltemp=(ulong)(nowtemp-oldtemp)*1440;
 	oldtemp=(uint)(BCD_HEX((*OldTime).Minute))+(uint)(BCD_HEX((*OldTime).Hour))*60;
 	nowtemp=(uint)(BCD_HEX((*NowTime).Minute))+(uint)(BCD_HEX((*NowTime).Hour))*60;
 	FmuPublic_Watchdog();
 	ltemp=(ulong)(ltemp+nowtemp-oldtemp);
 	ltemp1=(ulong)(ltemp/spacetemp);
 	//if((ltemp%spacetemp)!=0)
 	//	ltemp1++;
 	FmuPublic_Watchdog();
 	
 	PointCircleNum=(uchar)(ltemp1/SumPoint);
 	
 	ltemp1=ltemp1%SumPoint;
 	point=(uint)ltemp1+OldPoint;
 	
 	PointPreOrNext=POINTNEXT;
 	//if(ltemp1>=SumPoint)
 	//	return(OUTPOINT);
 	if(point>=SumPoint)
 	{
 		PointCircleNum++;
 		point-=SumPoint;
 	}
 }
 else
 {
 	oldtemp=(uint)(BCD_HEX((*OldTime).Minute))+(uint)(BCD_HEX((*OldTime).Hour))*60;
 	nowtemp=(uint)(BCD_HEX((*NowTime).Minute))+(uint)(BCD_HEX((*NowTime).Hour))*60;
 	FmuPublic_Watchdog();
 	if(oldtemp<nowtemp)
 	{
 		itemp=(nowtemp-oldtemp)/spacetemp;
 		//if(((nowtemp-oldtemp)%spacetemp)!=0)
 		//	itemp++;
 		FmuPublic_Watchdog();
 		point=itemp+OldPoint;
 		PointPreOrNext=POINTNEXT;
 		
 		PointCircleNum=0;
 		if(point>=SumPoint)
 		{
 			PointCircleNum++;
 			point-=SumPoint;
 		}
 	}
 	else 	if(oldtemp>nowtemp)
 	{
 		point=(oldtemp-nowtemp)/spacetemp;
 		//if((nowtemp-oldtemp)%spacetemp)!=0)
 		//{
 		//	if(point==0)
 		//		point=SumPoint-1;
 		//	else	point--;
 		//}
 		FmuPublic_Watchdog();
 		PointPreOrNext=POINTPRE;
 		PointCircleNum=0;
 		if(OldPoint<point)
 		{
 			PointCircleNum++;
	 		point=SumPoint+OldPoint-point;
	 	}
	 	else
	 		point=OldPoint-point;
 	}
 	else	
 	{
 		PointPreOrNext=POINTPRE;
 		PointCircleNum=0;
 		return(OldPoint);
 	}
 }
 return(point);
}

uint GetPoint(uint spacetemp,uint SumPoint,uint OldPoint,struct TIME_ITEM_D *OldTime,struct TIME_ITEM_D *NowTime)
{
 //ucharx spacetemp;
 uintx	itemp,oldtemp,nowtemp;
 ulongx	ltemp,ltemp1;
 uintx	point;
 
 FmuPublic_Watchdog();
 
 oldtemp=BCD_HEX((*OldTime).Year);
 nowtemp=BCD_HEX((*NowTime).Year);
   if((*NowTime).Year<(*OldTime).Year)
 {
 	if((oldtemp-nowtemp)>1) 		
 		return(0);
 	if((nowtemp%4)==0)
 		itemp=366;
 	else	itemp=365;
 	oldtemp=GetDayInYear((*OldTime).Year,(*OldTime).Month,(*OldTime).Day)+itemp;
 	nowtemp=GetDayInYear((*NowTime).Year,(*NowTime).Month,(*NowTime).Day);
 }
   else if((*NowTime).Year>(*OldTime).Year)
 {
 	if((nowtemp-oldtemp)>1)
 		return(0);
 	if((oldtemp%4)==0)
 		itemp=366;
 	else	itemp=365;
 	oldtemp=GetDayInYear((*OldTime).Year,(*OldTime).Month,(*OldTime).Day);
 	nowtemp=GetDayInYear((*NowTime).Year,(*NowTime).Month,(*NowTime).Day)+itemp; 
 }
 else
 {
 	oldtemp=GetDayInYear((*OldTime).Year,(*OldTime).Month,(*OldTime).Day);
 	nowtemp=GetDayInYear((*NowTime).Year,(*NowTime).Month,(*NowTime).Day); 
 }

 if(oldtemp>nowtemp)	//向下一时间查找
 {
 	FmuPublic_Watchdog();
 	ltemp=(ulong)(oldtemp-nowtemp)*1440;
 	oldtemp=(uint)(BCD_HEX((*OldTime).Minute))+(uint)(BCD_HEX((*OldTime).Hour))*60;
 	nowtemp=(uint)(BCD_HEX((*NowTime).Minute))+(uint)(BCD_HEX((*NowTime).Hour))*60;
 	FmuPublic_Watchdog();
 	ltemp1=(ulong)(ltemp+oldtemp-nowtemp);
 	ltemp1=(ulong)(ltemp1/spacetemp);
 	FmuPublic_Watchdog();
 	//if(ltemp1>=SumPoint)
 	//	return(OUTPOINT);
 	PointPreOrNext=POINTPRE;
 	PointCircleNum=(uchar)(ltemp1/SumPoint);
 	
 	ltemp1=ltemp1%SumPoint;
 	point=(uint)ltemp1;
 	if(OldPoint<point)
 	{
 		PointCircleNum++;
 		point=SumPoint+OldPoint-point;
 	}
 	else
 		point=OldPoint-point;
 	
 }
 else if(oldtemp<nowtemp) //往上一时间查找
 {
 	FmuPublic_Watchdog();
 	ltemp=(ulong)(nowtemp-oldtemp)*1440;
 	oldtemp=(uint)(BCD_HEX((*OldTime).Minute))+(uint)(BCD_HEX((*OldTime).Hour))*60;
 	nowtemp=(uint)(BCD_HEX((*NowTime).Minute))+(uint)(BCD_HEX((*NowTime).Hour))*60;
 	FmuPublic_Watchdog();
 	ltemp=(ulong)(ltemp+nowtemp-oldtemp);
 	ltemp1=(ulong)(ltemp/spacetemp);
 	if((ltemp%spacetemp)!=0)
 		ltemp1++;
 	FmuPublic_Watchdog();
 	
 	PointCircleNum=(uchar)(ltemp1/SumPoint);
 	
 	ltemp1=ltemp1%SumPoint;
 	point=(uint)ltemp1+OldPoint;
 	
 	PointPreOrNext=POINTNEXT;
 	//if(ltemp1>=SumPoint)
 	//	return(OUTPOINT);
 	if(point>=SumPoint)
 	{
 		PointCircleNum++;
 		point-=SumPoint;
 	}
 }
 else
 {
 	oldtemp=(uint)(BCD_HEX((*OldTime).Minute))+(uint)(BCD_HEX((*OldTime).Hour))*60;
 	nowtemp=(uint)(BCD_HEX((*NowTime).Minute))+(uint)(BCD_HEX((*NowTime).Hour))*60;
 	FmuPublic_Watchdog();
 	if(oldtemp<nowtemp)
 	{
 		itemp=(nowtemp-oldtemp)/spacetemp;
 		if(((nowtemp-oldtemp)%spacetemp)!=0)
 			itemp++;
 		FmuPublic_Watchdog();
 		point=itemp+OldPoint;
 		PointPreOrNext=POINTNEXT;
 		
 		PointCircleNum=0;
 		if(point>=SumPoint)
 		{
 			PointCircleNum++;
 			point-=SumPoint;
 		}
 	}
 	else 	if(oldtemp>nowtemp)
 	{
 		point=(oldtemp-nowtemp)/spacetemp;
 		//if((nowtemp-oldtemp)%spacetemp)!=0)
 		//{
 		//	if(point==0)
 		//		point=SumPoint-1;
 		//	else	point--;
 		//}
 		FmuPublic_Watchdog();
 		PointPreOrNext=POINTPRE;
 		PointCircleNum=0;
 		if(OldPoint<point)
 		{
 			PointCircleNum++;

⌨️ 快捷键说明

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