发 帖  
原厂入驻New
发烧友10周年庆典,全网超值优惠来袭!千元现金券,下单抽奖赶紧参与》》
[问答] 我是新手,想做一个AT89C528位数码管数字钟.时-分-秒,具体要求在正文,一直做不出来,求帮助
337 单片机AT89C52
分享
多功能数字钟应该具有的功能有:显示时-分-秒、整点报时、小时和分钟可调等基本功能。首先要知道钟表的工作机理,整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,但是需要注意的是,小时的范围是从023时。
在实训中为了显示的方便,由于分钟和秒钟显示的范围都是从059,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为它的范围是从023,所以可以用一个2位的二进制码显示十位,用4位二进制码(BCD码)显示个位。
对于整点报时功能,用户可以根据系统的硬件结构和自身的具体要求来设计。本实训设计的是当进行整点的倒计时5秒时,让LED来闪烁与蜂鸣器提示音同事进行整点报时的提示。

0
QQ截图20190523135833.png
2019-5-23 13:59:40   评论 分享淘帖 邀请回答
5个回答
51单片机的数码管方式的电子钟的例程可以在论坛里找到
2019-5-23 15:27:29 2 评论

举报

2 条评论
  • 2019-5-23 23:00

    我做了几个,但是都失败了

  • 2019-5-23 23:01

    #include<reg51.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit fmq=P1^0;//定义蜂鸣器
    sbit s1=P1^5;//定义加小时按钮
    sbit s2=P1^6;//定义加分钟按钮
    sbit led=P1^7;//定义一个LED灯
    void delay(uint);//延时函数
    void display(uchar shi,uchar fen,uchar miao);//数码管显示函数
    uchar shi,fen,miao,shi_s,shi_g,fen_s,fen_g,miao_s,miao_g,t,i;
    uchar code table[]={0x3f,0x06,0x5b,0x4f,
                                            0x66,0x6d,0x7d,0x07,
                                            0x7f,0x6f};        //数码管段选码

    void key()        //按键识别函数
    {
            if(s1==0)
            {
                    delay(10); //消抖
                    if(s1==0)
                    {
                            while(!s1);
                            shi++;
                            if(shi==24)
                            shi=0;
                            display(shi,fen,miao); //将加来的小时送到数码管显示
                    }
            }
            if(s2==0)
            {
                    delay(10); //消抖
                    if(s2==0)
                    {
                            while(!s2);
                            fen++;
                            if(fen==60)
                            fen=0;
                            display(shi,fen,miao);
                    }
            }
    }
    void delay(uint i)        //延时函数 延时i*1ms
    {
            uint x,y;
            for(x=i;x>0;x--)
                    for(y=110;y>0;y--);
    }
    void init()         //定时器的初始化
    {
            TMOD=0x01; //设置定时器工作在模式1
            TH0=(65536-50000)/256; //装初值
            TL0=(65536-50000)%256;
            EA=1;          //打开总中断
            ET0=1;          //打开定时机器中断
            TR0=1;          //打开定时器
    }
    void display(uchar shi,uchar fen,uchar miao)   //数码管显示函数
    {

            shi_s=shi/10;
            shi_g=shi%10;
            fen_s=fen/10;
            fen_g=fen%10;
            miao_s=miao/10;
            miao_g=miao%10;

            P2=0xdb;
            P0=0xbf;
           
            P2=0xfe;
            P0=table[shi_s];       
            delay(5);
            P2=0xff;

            P2=0xfd;       
            P0=table[shi_g];       
            delay(5);
            P2=0xff;
                           
            P2=0xf7;
            P0=table[fen_s];       
            delay(5);
            P2=0xff;

            P2=0xef;
            P0=table[fen_g];               
            delay(5);
            P2=0xff;
                           
            P2=0xbf;
            P0=table[miao_s];
            delay(5);
            P2=0xff;

            P2=0x7d;
            P0=table[miao_g];       
            delay(5);
            P2=0xff;
    }
    void main()
    {
            init();           //初始化
            while(1)
            {
                    display(shi,fen,miao); //数码管显示
                    key();                                   //按键扫描
                    if(miao>=50&&fen==59)  //整点报时
                    {
                            fmq=0;
                    }
            }       
    }
    void t0_init()interrupt 1
    {
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            t++;
            if(t==20)
            {
                    t=0;
                    miao++;
                    if(miao==60)
                    {
                            miao=0;
                            fen++;
                            if(fen==60)
                            {
                                    fen=0;
                                    shi++;
                                    if(shi==24)
                                    {
                                            shi=1;
                                    }
                            }
                    }
            }
           
    }

先看怎么驱动LED 其他的基本都是一些程序上进位的问题了
2019-5-23 17:10:45 评论

举报

你都是怎么做的,哪里失败了能说明一下吗
2019-5-24 13:53:44 评论

举报

P0口需要接上拉电阻,功能分开进行调试,先调试数码管显示,显示正常了,再调试时钟显示,时钟正常了,再调试按键
2019-5-24 19:08:45 评论

举报

P0口需要接上拉电阻,功能分开进行调试,先调试数码管显示,显示正常了,再调试时钟显示,时钟正常了,再调试按键
2019-5-24 19:16:35 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
课程
    关闭

    站长推荐 上一条 /10 下一条

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