找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数码管写时间程序用中断每隔一秒计数一次 时分秒如何计算?

[复制链接]
跳转到指定楼层
楼主
ID:102056 发表于 2016-11-19 23:56 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例如,h=num/3600;//小时的个位
那么其余的时分秒该如何表示?
   
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2016-11-20 01:37 | 只看该作者
这种构思是最下策。
回复

使用道具 举报

板凳
ID:123289 发表于 2016-11-20 01:37 | 只看该作者
应先做秒,再做分,再做时……
回复

使用道具 举报

地板
ID:102056 发表于 2016-11-20 07:55 来自手机 | 只看该作者
yzwzfyz 发表于 2016-11-20 01:37
应先做秒,再做分,再做时……

最简单那种
s++;
if(s==60)
s=0;
f++;
if(f==60)
f=0;
h++;
if(h==24)
h=0;
在细分为s%10  s/10 f%10   f/10
h%10   h/10
最简单表示方法我会,但是我现在想用简短的公式把时分秒写出来?



回复

使用道具 举报

5#
ID:143108 发表于 2016-11-20 10:37 | 只看该作者
利用定时器中断
void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x3C;
    TL0 = 0x0B0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void main(void)
{
    InitTimer0();
}

void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0x3C;
    TL0 = 0x0B0;
   }//这里定义50000微秒
回复

使用道具 举报

6#
ID:111634 发表于 2016-11-20 10:57 | 只看该作者
king@ 发表于 2016-11-20 07:55
最简单那种
s++;
if(s==60)

"最简单表示方法我会,但是我现在想用简短的公式把时分秒写出来?"
你还是没有了解计算机与人的差别,计算机的特点是不怕麻烦,善于做简单而重复的劳动。
回复

使用道具 举报

7#
ID:111634 发表于 2016-11-20 10:59 | 只看该作者
yzwzfyz 发表于 2016-11-20 01:37
这种构思是最下策。

为什么?思路问题,方法问题,悟性问题,问题特别多。
回复

使用道具 举报

8#
ID:102056 发表于 2016-11-20 12:51 | 只看该作者
zl2168 发表于 2016-11-20 10:57
"最简单表示方法我会,但是我现在想用简短的公式把时分秒写出来?"
你还是没有了解计算机与人的差别,计 ...

优化程序,去掉余缀,减少资源浪费,使程序更简洁,易懂
回复

使用道具 举报

9#
ID:102056 发表于 2016-11-20 12:53 | 只看该作者
jby 发表于 2016-11-20 10:37
利用定时器中断
void InitTimer0(void)
{

知道,我只是在程序细节问题,处理的不够合理,不够简洁。
回复

使用道具 举报

10#
ID:102056 发表于 2016-11-20 12:55 | 只看该作者
zl2168 发表于 2016-11-20 10:59
为什么?思路问题,方法问题,悟性问题,问题特别多。

先有思路,再有方法,最后实践实践再实践。笨鸟先飞。
回复

使用道具 举报

11#
ID:102056 发表于 2016-11-20 14:12 来自手机 | 只看该作者
yzwzfyz 发表于 2016-11-20 01:37
应先做秒,再做分,再做时……

从小到大,由秒到分,最后到时,这个套路我记住了。
回复

使用道具 举报

12#
ID:102056 发表于 2016-11-20 19:54 | 只看该作者
uestchina 发表于 2016-11-20 14:40
一般是从小到大做。
按你的思路来:
hour=num/3600;

多谢,综上所述也就是s,s1,f,f1,h,h1  (s1,f1,h1分别代表秒的十位,分的十位,时的十位)
hour=num/3600;
min=(num%3600)/60;
sec=num%60;
h1=hour/10;
h=hour%10;
f1=min/10;
f=min%10;
s1=sec/10;
s=sec%10;
回复

使用道具 举报

13#
ID:111634 发表于 2016-11-20 20:01 | 只看该作者
本帖最后由 zl2168 于 2016-11-21 22:39 编辑

善意提醒:这样运行有什么不良后果???
待后解答。
回复

使用道具 举报

14#
ID:148885 发表于 2016-11-20 20:48 | 只看该作者
方法1;分的十位f1=(num/3600/60/10个位(num%3600)%60%10秒就是除或余100
回复

使用道具 举报

15#
ID:149098 发表于 2016-11-20 22:20 | 只看该作者
参观一下
回复

使用道具 举报

16#
ID:111634 发表于 2016-11-21 08:40 | 只看该作者
本帖最后由 zl2168 于 2016-11-21 09:19 编辑
king@ 发表于 2016-11-20 19:54
多谢,综上所述也就是s,s1,f,f1,h,h1  (s1,f1,h1分别代表秒的十位,分的十位,时的十位)
hour=num/3600; ...

多谢,综上所述也就是s,s1,f,f1,h,h1  (s1,f1,h1分别代表秒的十位,分的十位,时的十位)
hour=num/3600;
min=(num%3600)/60;
sec=num%60;
h1=hour/10;
h=hour%10;
f1=min/10;
f=min%10;
s1=sec/10;
s=sec%10;
善意提醒:后果很严重!!!
后果严重在哪里?大家发表意见。
回复

使用道具 举报

17#
ID:111634 发表于 2016-11-21 15:10 | 只看该作者
uestchina 发表于 2016-11-21 15:03
100小时以内没有问题,按天算,24小时清0就行了

这个不是严重后果,另外再想想。
回复

使用道具 举报

18#
ID:111634 发表于 2016-11-21 16:15 | 只看该作者
uestchina 发表于 2016-11-21 15:38
还会有什么???说来听听

提示:
这一段程序放在哪里?需运行多长时间?对整体程序有和影响?
回复

使用道具 举报

19#
ID:111634 发表于 2016-11-21 18:06 | 只看该作者
楼主king@可以将你自己说的程序段放进去,看看有什么故障?
回复

使用道具 举报

20#
ID:111634 发表于 2016-11-21 21:15 | 只看该作者
为何没有对楼主一段程序的严重后果发表看法?我已经提示:“这一段程序放在哪里?需运行多长时间?对整体程序有和影响?”,特别是初学者动动脑子,将对51单片机的特点会有新的认识。这个问题是对楼主king@的答复,楼主king@更应将你自己说的程序段放进去,看看有什么故障?给大家亮亮。
回复

使用道具 举报

21#
ID:102056 发表于 2016-11-21 22:26 来自手机 | 只看该作者
uestchina 发表于 2016-11-21 15:03
100小时以内没有问题,按天算,24小时清0就行了

是的,24小时的肯定要写if(hour==24)
hour=0;
回复

使用道具 举报

22#
ID:111634 发表于 2016-11-21 22:36 | 只看该作者
king@ 发表于 2016-11-21 22:26
是的,24小时的肯定要写if(hour==24)
hour=0;

我提的问题不是这个问题,这个问题不大,最多是显示错误。我提的问题是程序根本不能运行(大家可从我提示的3个问题思考)。楼主king@既然提出了自己的程序段,更应将你自己说的程序段放进去,看看有什么结果?不要光让别人回答你的帖子,也给大家亮亮你程序段的运行结果。
回复

使用道具 举报

23#
ID:102056 发表于 2016-11-21 22:37 来自手机 | 只看该作者
zl2168 发表于 2016-11-21 16:15
提示:
这一段程序放在哪里?需运行多长时间?对整体程序有和影响?

首先这句话不能放在中断里,放在中断里计会影响计时的准确性。最好放在主函数里。
回复

使用道具 举报

24#
ID:111634 发表于 2016-11-21 22:41 | 只看该作者
king@ 发表于 2016-11-21 22:37
首先这句话不能放在中断里,放在中断里计会影响计时的准确性。最好放在主函数里。

好的。有点入门了,继续想问题。
回复

使用道具 举报

25#
ID:102056 发表于 2016-11-22 20:06 | 只看该作者
以实测,满足计时要求
#include<reg52.h>
sbit wela=P1^6;
sbit dula=P1^7;
#define uChar8  unsigned char  //8bit,0~255
#define uint  unsigned int  // 16bit, 0 ~  65,535
#define uint32  unsigned long int
uint32 c=0;
uint  m,m1,f,f1,s,s1,num;
uChar8 nums,numf;
uChar8 code Bit_Tab[] =
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};                //位选数组位码1~8
unsigned char  DISP_smg[10] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};                 //0~9数字显示编码数组
void delayms(uint m)    // 11.0592MHz 晶振ms延时,偏差小于1%
{
    uint i, j;
    for(i=m; i>0; i--)
        for(j=114; j>0; j--);
}
void InitTimer0(void)
{
    TMOD = 0x01;
    TH0 = 0x0DC;
    TL0 = 0x00;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void xiaoying()
{
dula=1;
P0=0x00;
dula=0;



}


void SMG()
{
  
  


xiaoying();
wela=1;
P0=Bit_Tab[2];
wela=0;
dula=1;
P0=0x40;
delayms(2);

xiaoying();
wela=1;
P0=Bit_Tab[5];
wela=0;
dula=1;
P0=0x40;
delayms(2);


xiaoying();
wela=1;
P0=Bit_Tab[6];
wela=0;
dula=1;
P0=DISP_smg[m1];
delayms(2);

xiaoying();
wela=1;
P0=Bit_Tab[7];
wela=0;
dula=1;
P0=DISP_smg[m];
delayms(2);


xiaoying();
wela=1;
P0=Bit_Tab[4];
wela=0;
dula=1;
P0=DISP_smg[f];
delayms(2);

xiaoying();
wela=1;
P0=Bit_Tab[3];
wela=0;
dula=1;
P0=DISP_smg[f1];
delayms(2);

xiaoying();
wela=1;
P0=Bit_Tab[1];
wela=0;
dula=1;
P0=DISP_smg[s];
delayms(2);

xiaoying();
wela=1;
P0=Bit_Tab[0];
wela=0;
dula=1;
P0=DISP_smg[s1];
delayms(2);

}

void main(void)
{
  InitTimer0();
while(1)
{
  SMG();
}
}

void time0_interrupt()         interrupt 1
{

  TH0 = 0x0DC;
  TL0 = 0x00;
  c++;
  if(c==100)
  {
     c=0;
     num++;   
         m=num%10;   
         m1=num/10;     
         f=numf%10;   
         f1=numf/10;   
         s=nums%10;     
         s1=nums/10;      
         if(num==59)   
          {      
            num=0;      
                numf++;   
                if(numf==59)  
            {        
                  numf=0;   
                  nums++;  
                 }
                 if(num==24)
                 num=0;
                 }
         }


}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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