|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2014-1-9 12:50:47
|
显示全部楼层
本帖最后由 lswhome 于 2014-1-9 12:54 编辑
C51,时间来源是时钟芯片,判断某一时刻是否在某一时间段之内,精确到分即可,但算法必须包含时间段在同一天或者跨一天,但时间段不超过24小时。。。百度查了查,高级的语言直接就有相关的函数,非常简单,可是C51没有啊,只能自己算。。。脑子笨,虽然问题昨天晚上已经解决了,但感觉我的算法超级笨。。
算法如下:
bit Time_of_Times(UINT8 Now_h,UINT8 Now_m,UINT8 Start_h,UINT8 Start_m,UINT8 End_h,UINT8 End_m);//判断某一时间是否在某一时间段内 返回1=在,0=不在
bit Time_of_Times1(UINT8 Now_h,UINT8 Now_m,UINT8 Start_h,UINT8 Start_m,UINT8 End_h,UINT8 End_m);//判断某一时间是否在同一天的某一时间段内 返回1=在,0=不在
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
bit Time_of_Times(UINT8 Now_h,UINT8 Now_m,UINT8 Start_h,UINT8 Start_m,UINT8 End_h,UINT8 End_m)//判断某一时间是否在某一时间段内 返回1=在,0=不在
{
if(End_h>=Start_h)//先判断结束时间是否大于或者等于起始时间,如果是,则肯定在同一天,否则就跨天了
{//如果是在同一天
return(Time_of_Times1(Now_h,Now_m,Start_h,Start_m,End_h,End_m)); //例: Start=00:00 Now=23:26 End=23:59
}
else
{//如果跨天了,返回取反的值
return(!Time_of_Times1(Now_h,Now_m,End_h,End_m,Start_h,Start_m)); //例: Start=12:30 Now=8:30 End=08:00
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
bit Time_of_Times1(UINT8 Now_h,UINT8 Now_m,UINT8 Start_h,UINT8 Start_m,UINT8 End_h,UINT8 End_m)//判断某一时间是否在同一天的某一时间段内 返回1=在,0=不在
{
bit In;//=1在区间内,0=不在区间内
if(Now_h==Start_h && Now_m>=Start_m && Now_h==End_h && Now_m<End_m)//时间段在同一个小时之内的情况 例:1:10~1:50 Now=1:30
In=1;//那么在
else
In=0;//否则不在
if(In==0)
{
if(Now_h==Start_h && Now_m>=Start_m && Now_h<End_h)//如果不在以上时间段内,但是在起始的小时内,又小于结束的时范围内 例:1:10~2:50 Now=1:30
In=1;//
else
In=0;
}
if(In==0)
{
if(Now_h>Start_h && Now_h <End_h)//同上,大于起始的小时,又小于结束的小时 例:1:10~3:30 Now=2:20
In=1;
else
In=0;
}
if(In==0)
{
if(Now_h>Start_h && Now_h==End_h && Now_m<End_m)//同上,大于起始的小时,但等于结束的小时 并且小于结束的分钟 例:1:10~3:30 Now=3:20
In=1;
else
In=0;
}
return(In);//返回值
}
调用:
Time_of_Times(12,23,23,45,15,30);
返回1
运行结果达到了要求,但算法感觉很土,各位给精简精简呗。。。 |
|