278958159 发表于 2011-2-13 10:20:18

时钟加中间两个时钟点的问题

最近写时钟程序,写到最后就是想不到怎么加时钟数码管中间的那两个时钟点,试过很多次了,昨天试了一天都没能写出来。。。太悲剧了。没办法,只好来请教大家啦!拜托指引小弟啊。。。。

278958159 发表于 2011-2-13 10:21:36

这是现在写的程序


#include<reg51.h>
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                                                   0x80,0x90};
unsigned int s,fen;

delay(unsigned int x)
{
      for(;x>0;x--);
}

void TimerInit()
{      
      TMOD=0x01;
      TH0=(65536-50000)/256;
      TL0=(65536-50000)%256;
      EA=1;
      ET0=1;
      TR0=1;
}

void disp()
{      
      P0=0xff;
      P2=duan;
      P0=0xfe;
      delay(100);
               
      P0=0xff;
      P2=duan;
      P0=0xfd;
      delay(100);
      
      P0=0xff;
      P2=duan;
      P0=0xfb;
      delay(100);
      
      P0=0xff;
      P2=duan;
      P0=0xf7;
      delay(100);      
}
void main()
{      
      fen=12;          // 初始化
      s=0;
      TimerInit();
      while(1)
      {      
                disp();
      }      
}

void Timer0() interrupt 1
{      
      static unsigned char count = 0;
    count++;
      if(count==20)                // 1s
      {
                count=0;
                s++;
      }
      if(s==60)
      {      
                s=0;
                fen++;
      }
      if(fen==60)
      {      
                fen=0;
      }

      TL0 =(65536-50000) % 256;
      TH0 =(65536-50000) / 256
}

278958159 发表于 2011-2-13 10:23:31

我的大体思路
现在是秒和分显示,想先调出让秒自增的时候,中间两个时钟点闪烁,频率和秒一样,然后我再把秒和分显示改为分和小时显示,这样中间的时钟点作为秒计数显示。下面是时钟数码管的样子。

http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_615732YCFFH5.jpg
(原文件名:20085218292137277.jpg)

elecfun 发表于 2011-2-13 10:39:50

如果控制冒号的段为第2个位选的小数,就这样写,注意要把中断服务函数里的count定义为全局变量
P0=0xff;

if (count < 10)
    P2=duan&0x7F;
else
    P2=duan;

P0=0xfd;
delay(100);

278958159 发表于 2011-2-13 10:46:22

冒号的段是两个位控制的,上面一个点是0xfe,下面一个点是0xfd,要控制两个点同时显示就是0xfc吧,我开了冒号的位好像秒显示也会受影响,消影也没用、、、、

elecfun 发表于 2011-2-13 11:09:44

0xFC显示冒号?   有问题吧你还是查下资料

我的用的是这款
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_615737GFJ0Q3.jpg
(原文件名:数码管资料.jpg)

部分代码如下

//显示函数,显示缓冲区内容
void Display(void)
{
    unsigned char a;
    for (a=0; a<4; a++)
    {
      if (DisPot && a==1 && time50<10 )   //如果允许显示冒号,且当前选通
            SegPort( DisBuff & 0x7F );   //第2位,且处于前半秒时,显示冒号
      else
            SegPort( DisBuff );
      SegSel(a);
      Delayms(5);
      SegSel(0xFF);                     //关闭选通,防止重影
    }
}

278958159 发表于 2011-2-14 13:30:37

谢谢LS指教!我已经找到解决的方法了

liaohaolin 发表于 2011-2-17 22:36:18

什么方法 LZ

dzrs0620 发表于 2014-10-7 14:49:41

一般时钟型数码管中间两个点的本质就是左边数起第二个8的小数点
页: [1]
查看完整版本: 时钟加中间两个时钟点的问题