发 帖  
[问答]

我是新手,想做一个AT89C528位数码管数字钟.时-分-秒,具体要求在正文,一直做不出来,求帮助

1682

QQ截图20190523135833.png (88.07 KB, 下载次数: 7)

QQ截图20190523135833.png
2019-5-23 13:59:40   评论 分享淘帖 邀请回答 举报
5个回答
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;
                                    }
                            }
                    }
            }
           
    }

2019-5-23 17:10:45 评论

举报

2019-5-24 13:53:44 评论

举报

2019-5-24 19:08:45 评论

举报

2019-5-24 19:16:35 评论

举报

撰写答案

你正在撰写答案

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

您需要登录后才可以回帖 登录/注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@hauqiu.com
关闭

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

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