专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
又碰到个算法的问题,想请教各位大大
2020-01-25 15:19
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
11122
16
16
本帖最后由 lswhome 于 2014-1-9 02:35 编辑
就是计算某一时刻是否在某一时间段内:比如从23:25开始到第二天的8:30结束,某一时刻(几点几分)是否在这个时间段内
算法必须包含在同一天之内(比如00:00~23:00)和跨天(比如22:00~第二天的21:00)想来想去想不到好的算法,用C51。。。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
lswhome
2020-01-26 08:05
本帖最后由 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
运行结果达到了要求,但算法感觉很土,各位给精简精简呗。。。
加载中...
查看其它16个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
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
运行结果达到了要求,但算法感觉很土,各位给精简精简呗。。。
一周热门 更多>