找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3348|回复: 10
收起左侧

如果我定时计数1S,数字加1,用最简单的/取整,取余%怎样的到时分秒?

[复制链接]
ID:102056 发表于 2016-11-1 12:37 | 显示全部楼层 |阅读模式
void Timer0_ISR(void) interrupt 1
{
        static uInt16 uiCounter = 0;         //只做一次定义
        TH0 = 0xDC;
        TL0 = 0x00;                                                //定时器赋初值
        uiCounter++;                                        //记录中断次数
        if(100 == uiCounter)
        {
                uiCounter = 0;
                 num=num+1;       
              h= num /3600;     //时
              fen=(num%3600)/60;  //分
              miao=(num%3600)%60;   //秒       
        }       
}


这里如果假设num=3876,也就是1时4分36秒
h= num /3600;     //时 ,1时。
fen=(num%3600)/60;  //分 ,  4分。
miao=(num%3600)%60;   //秒, 36秒。
这样写应该没错吧?



回复

使用道具 举报

ID:138155 发表于 2016-11-1 13:44 | 显示全部楼层
既然1S计时 为何不先计分再计时啊
回复

使用道具 举报

ID:145514 发表于 2016-11-1 14:25 | 显示全部楼层
好像不太合适,外部中断计时的话,每次脉冲到了就要触发中断,这时在中断程序内应该先
秒(if<60 其他不变,if==60 秒清零 分要自增,再跳到分,然后同样的逻辑) 再分 再小时  再 日 月年
回复

使用道具 举报

ID:61002 发表于 2016-11-1 16:08 | 显示全部楼层
这样应该也可以,前提是num类型必须可以足够大,你可以选择u32,如果这个数只是u16型的话,你的时间累计最大不超过18个小时
回复

使用道具 举报

ID:123732 发表于 2016-11-1 16:17 | 显示全部楼层
if(s>59){s=0;m++;}
if(m>59){m=0;h++;}
if(h>23){h=0;}
回复

使用道具 举报

ID:111634 发表于 2016-11-1 18:07 | 显示全部楼层
本帖最后由 zl2168 于 2016-11-1 18:09 编辑

再加几条:
if(s>59){s=0;m++;满1分钟输出报警声子函数;}
if(m>59){m=0;h++;满1小时输出报警声子函数;}
if(h>23){h=0;满1天输出报警声子函数;}
回复

使用道具 举报

ID:102056 发表于 2016-11-1 19:55 | 显示全部楼层
wuyibin2003 发表于 2016-11-1 13:44
既然1S计时 为何不先计分再计时啊

这样计时,肯定先满足秒,再满足分,最后才满足时。
回复

使用道具 举报

ID:102056 发表于 2016-11-1 20:09 | 显示全部楼层
g753388438 发表于 2016-11-1 16:08
这样应该也可以,前提是num类型必须可以足够大,你可以选择u32,如果这个数只是u16型的话,你的时间累计最 ...

嗯,的确只能计时到18时,那我应该定义#define uInt32 unsigned   long     int  就不知道51单片机能不能用这句?很少用过大于U16定义。
回复

使用道具 举报

ID:102056 发表于 2016-11-1 20:10 | 显示全部楼层
刘海龙 发表于 2016-11-1 16:17
if(s>59){s=0;m++;}
if(m>59){m=0;h++;}
if(h>23){h=0;}

回复

使用道具 举报

ID:102056 发表于 2016-11-1 20:10 | 显示全部楼层
zl2168 发表于 2016-11-1 18:07
再加几条:
if(s>59){s=0;m++;满1分钟输出报警声子函数;}
if(m>59){m=0;h++;满1小时输出报警声子函数; ...

回复

使用道具 举报

ID:61002 发表于 2016-11-1 21:20 | 显示全部楼层
king@ 发表于 2016-11-1 20:09
嗯,的确只能计时到18时,那我应该定义#define uInt32 unsigned   long     int  就不知道51单片机能不能 ...

应该是可以这么用 ,我之前没这么用过
你可以看一下http://www.51hei.com/bbs/dpj-57560-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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