找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1813|回复: 19
打印 上一主题 下一主题
收起左侧

求一个定时判断程序的编程思路

[复制链接]
跳转到指定楼层
楼主
ID:740383 发表于 2020-9-4 17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求一个定时判断程序:
比如:早上9:20,到下午16:35,即判断时也判断分,定时期间执行其他函数判断;
只求一个判断思路;求大神
小弟这几天脑阔疼
求大神引路!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:529540 发表于 2020-9-4 18:00 | 只看该作者
看不懂你想表达什么
回复

使用道具 举报

板凳
ID:654028 发表于 2020-9-4 18:13 | 只看该作者
定时器先判断时钟,如果时钟一样就判断分钟
回复

使用道具 举报

地板
ID:213173 发表于 2020-9-4 20:41 | 只看该作者
可以把小时*60化为分计算

        unsigned int min_m;

        min_m=hour*60+min;
       
        if(min_m>=560 && min_m<=995)//9:20到16:35之间
        {
                //任务
        }
回复

使用道具 举报

5#
ID:740383 发表于 2020-9-4 23:57 来自手机 | 只看该作者
wulin 发表于 2020-9-4 20:41
可以把小时*60化为分计算

        unsigned int min_m;

谢谢大佬,这个思路真是太棒了
回复

使用道具 举报

6#
ID:740383 发表于 2020-9-5 00:01 来自手机 | 只看该作者
心有浮生 发表于 2020-9-4 18:13
定时器先判断时钟,如果时钟一样就判断分钟

这样子判断的话,判断分钟时,开始分钟大于结束分钟不太好判断吧,比如9:35-16:20
回复

使用道具 举报

7#
ID:401564 发表于 2020-9-5 08:17 | 只看该作者
这到底是有多难呢?
首先,要看你的时间是怎么走的了
如果是定时器累加的形式走的的,比如,是从早上8:00开始计时,到了9:00就走了一个小时的话,这种形式的话就按前面说的,把时间换算成分来进行比较不就可以了吗?
但如果是像DS1302这种时钟芯片提供的时间,那就先比较小时,再比较分,两者相同就行了,不存在什么大于什么的问题
回复

使用道具 举报

8#
ID:654028 发表于 2020-9-5 08:41 | 只看该作者
danq 发表于 2020-9-5 00:01
这样子判断的话,判断分钟时,开始分钟大于结束分钟不太好判断吧,比如9:35-16:20

要先判断时针,这样就不会出现分钟大小问题,9:35和16:20的时针不一样啊
回复

使用道具 举报

9#
ID:21069 发表于 2020-9-5 09:23 | 只看该作者
你将(时间取值)&&(分钟取值)调出来判断就行了
回复

使用道具 举报

10#
ID:740383 发表于 2020-9-5 09:59 | 只看该作者
心有浮生 发表于 2020-9-5 08:41
要先判断时针,这样就不会出现分钟大小问题,9:35和16:20的时针不一样啊

大佬,有没有个模板给小弟呀小弟我新手,谢谢大佬
回复

使用道具 举报

11#
ID:740383 发表于 2020-9-5 10:00 | 只看该作者
wulin 发表于 2020-9-4 20:41
可以把小时*60化为分计算

        unsigned int min_m;

大佬,按照你的思路这样可否行:
        uchar NOWtime,Time_work,Time_pause;
        uchar TimerAry_work[8]={20,20,5,21,9,20,52,2};
        uchar TimerAry_pause[8]={20,20,5,21,16,35,52,2};
        Time_work=TimerAry_work[4]*60+TimerAry_work[5];
        Time_pause=TimerAry_pause[4]*60+TimerAry_pause[5];
        NOWtime=TimeArray[4]*60+TimeArray[5];
        if((NOWtime>=Time_work) && (NOWtime<=Time_pause))   //9:20到16:35之间LED被点亮
        {
                LED=1;//任务
        }
        else
        {
                LED=0;
        }
运行的时候好像有点出错
回复

使用道具 举报

12#
ID:740383 发表于 2020-9-5 10:02 | 只看该作者
Y_G_G 发表于 2020-9-5 08:17
这到底是有多难呢?
首先,要看你的时间是怎么走的了
如果是定时器累加的形式走的的,比如,是从早上8:0 ...

大佬,小弟新手,我用DS1302时钟芯片的,有没有模板呀,小弟参考参考写个大概就好了
回复

使用道具 举报

13#
ID:740383 发表于 2020-9-5 11:06 | 只看该作者
jinsheng7533967 发表于 2020-9-5 09:23
你将(时间取值)&&(分钟取值)调出来判断就行了

TimeArray[4]、TimeArray[5]//现在时间的时和分:
是这样判断吗,但是感觉怪怪的
uchar TimerAry_work[8]={20,20,5,21,9,35,52,2};
  uchar TimerAry_pause[8]={20,20,5,21,16,20,52,2};
        if((TimeArray[4]>=TimerAry_work[4])&&(TimeArray[4]<=TimerAry_pause[4]))   //9:35到16:20之间LED被点亮
        {
                if((TimeArray[5]>=TimerAry_work[5])&&(TimeArray[5]<=TimerAry_pause[5]))
                {
                        LED=1;//任务
                }
                else
                {
                        LED=0;
                }
        }
回复

使用道具 举报

14#
ID:213173 发表于 2020-9-5 11:32 | 只看该作者
danq 发表于 2020-9-5 10:00
大佬,按照你的思路这样可否行:
        uchar NOWtime,Time_work,Time_pause;
        uchar TimerAry_work[ ...

uchar NOWtime,Time_work,Time_pause;变量实际大小已经超出uchar数据范围255,要用unsigned int  定义变量。数据溢出肯定要出错。这个方法肯定没有问题。另外还有一种算法,变量不会大于255:
        static bit a,b,c;
        if(hour==9 && min==20)//9:20
                a=1;
        if(hour==16 && min==35)//16:35
                b=1;
        c=a^b;
        if(c){/*任务*/}//9:20到16:35之间       
        else {a=0;b=0;}//复位
回复

使用道具 举报

15#
ID:471066 发表于 2020-9-5 12:41 | 只看该作者
多试试几次。别人给有思路你应该明白了,就看你的动手能力了!加油!
回复

使用道具 举报

16#
ID:740383 发表于 2020-9-5 13:36 | 只看该作者
wulin 发表于 2020-9-5 11:32
uchar NOWtime,Time_work,Time_pause;变量实际大小已经超出uchar数据范围255,要用unsigned int  定义变 ...

谢谢大佬,我去试试
回复

使用道具 举报

17#
ID:740383 发表于 2020-9-5 13:36 | 只看该作者
#include51.h 发表于 2020-9-5 12:41
多试试几次。别人给有思路你应该明白了,就看你的动手能力了!加油!

谢谢
回复

使用道具 举报

18#
ID:401564 发表于 2020-9-5 13:49 | 只看该作者
danq 发表于 2020-9-5 10:02
大佬,小弟新手,我用DS1302时钟芯片的,有没有模板呀,小弟参考参考写个大概就好了

用DS1302就没有必要转换什么了呀
直接比较不就可以了吗?
读取小时,然后和设定好的小时"9"和"16"进行比较,只要有一个是相等的,就去比较分"20"和"35"
你都用到DS1302了,你不会连两个数是不是相等的都不会吧???
回复

使用道具 举报

19#
ID:740383 发表于 2020-9-5 15:27 | 只看该作者
Y_G_G 发表于 2020-9-5 13:49
用DS1302就没有必要转换什么了呀
直接比较不就可以了吗?
读取小时,然后和设定好的小时"9"和"16"进行比 ...

哈哈,大佬我是新手,DS1302也不是很熟练
回复

使用道具 举报

20#
ID:798185 发表于 2020-9-5 16:06 | 只看该作者
利用定时器模拟一个时钟,定两个闹钟,到时钟为9:20开始执行,时钟为16:35结束任务。emmm可能就是计时时间比较久。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表