搜索
bottom↓
回复: 8

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

[复制链接]

出0入0汤圆

发表于 2011-2-13 10:20:18 | 显示全部楼层 |阅读模式
最近写时钟程序,写到最后就是想不到怎么加时钟数码管中间的那两个时钟点,试过很多次了,昨天试了一天都没能写出来。。。太悲剧了。没办法,只好来请教大家啦!拜托指引小弟啊。。。。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 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[s%10];
        P0=0xfe;
        delay(100);
               
        P0=0xff;
        P2=duan[s/10];
        P0=0xfd;
        delay(100);
        
        P0=0xff;
        P2=duan[fen%10];
        P0=0xfb;
        delay(100);
        
        P0=0xff;
        P2=duan[fen/10];
        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
}

出0入0汤圆

 楼主| 发表于 2011-2-13 10:23:31 | 显示全部楼层
我的大体思路
现在是秒和分显示,想先调出让秒自增的时候,中间两个时钟点闪烁,频率和秒一样,然后我再把秒和分显示改为分和小时显示,这样中间的时钟点作为秒计数显示。下面是时钟数码管的样子。


(原文件名:20085218292137277[1].jpg)

出0入134汤圆

发表于 2011-2-13 10:39:50 | 显示全部楼层
如果控制冒号的段为第2个位选的小数,就这样写,注意要把中断服务函数里的count定义为全局变量
P0=0xff;

if (count < 10)
    P2=duan[s/10]&0x7F;
else
    P2=duan[s/10];

P0=0xfd;
delay(100);

出0入0汤圆

 楼主| 发表于 2011-2-13 10:46:22 | 显示全部楼层
冒号的段是两个位控制的,上面一个点是0xfe,下面一个点是0xfd,要控制两个点同时显示就是0xfc吧,我开了冒号的位好像秒显示也会受影响,消影也没用、、、、

出0入134汤圆

发表于 2011-2-13 11:09:44 | 显示全部楼层
0xFC显示冒号?   有问题吧  你还是查下资料

我的用的是这款

(原文件名:数码管资料.jpg)

部分代码如下

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

出0入0汤圆

 楼主| 发表于 2011-2-14 13:30:37 | 显示全部楼层
谢谢LS指教!我已经找到解决的方法了

出0入0汤圆

发表于 2011-2-17 22:36:18 | 显示全部楼层
什么方法 LZ

出0入0汤圆

发表于 2014-10-7 14:49:41 来自手机 | 显示全部楼层
一般时钟型数码管中间两个点的本质就是左边数起第二个8的小数点
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 00:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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