找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4829|回复: 0
收起左侧

51单片机显示时分秒 LED显示 哈哈

[复制链接]
ID:257049 发表于 2017-12-4 09:16 | 显示全部楼层 |阅读模式
       #include "reg51.h"
        typedef unsigned char uint;
        typedef unsigned char uchar;
        unsigned char code disptab[] =
        {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
        0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
        unsigned char code bittab[] =
        {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
        unsigned char hour=24,min=0,sec=0;//时分秒
        unsigned int count;//计数次数
        unsigned char num=0;//数码管序号
        unsigned char s=1;
        sbit sw1 = P3^1;
        sbit sw2 = P3^2;

        void delay(uchar i)
        {
          uint j;
          while(i--)
          for(j= 0; j<114 ; j++);
        }
        void disp(uchar sec) //显示函数
        {
        num++;
        num=(num%8);
        P2=0xff; //数码管消影
        P0=0xff;
        P2=bittab[num];
        switch(num)
        {
        case 0:P0=disptab[sec%10]; break;//秒个位
        case 1:P0=disptab[sec/10]; break;//秒十位
        case 2:P0=disptab[0xff]; break;//
        case 3:P0=disptab[min%10]; break;//分个位
        case 4:P0=disptab[min/10]; break;//分十位
        case 5:P0=disptab[0xff]; break;//
        case 6:P0=disptab[hour%10]; break;//时个位
        case 7:P0=disptab[hour/10]; break;//时十位
        default:;
          }
        }
        void disp1( uchar min) //显示函数
        {
        num++;
        num=(num%8);
        P2=0xff; //数码管消影
        P0=0xff;
        P2=bittab[num];
        switch(num)
        {
        case 0:P0=disptab[sec%10]; break;//秒个位
        case 1:P0=disptab[sec/10]; break;//秒十位
        case 2:P0=disptab[0xff]; break;//
        case 3:P0=disptab[min%10]; break;//分个位
        case 4:P0=disptab[min/10]; break;//分十位
        case 5:P0=disptab[0xff]; break;//
        case 6:P0=disptab[hour%10]; break;//时个位
        case 7:P0=disptab[hour/10]; break;//时十位
        default:;
                }
        }
    void disp2( uchar hour) //显示函数
        {
        num++;
        num=(num%8);
        P2=0xff; //数码管消影
        P0=0xff;
        P2=bittab[num];
        switch(num)
        {
        case 0:P0=disptab[sec%10]; break;//秒个位
        case 1:P0=disptab[sec/10]; break;//秒十位
        case 2:P0=disptab[0xff]; break;//
        case 3:P0=disptab[min%10]; break;//分个位
        case 4:P0=disptab[min/10]; break;//分十位
        case 5:P0=disptab[0xff]; break;//
        case 6:P0=disptab[hour%10]; break;//时个位
        case 7:P0=disptab[hour/10]; break;//时十位
        default:;

        }
        //if(num==2||num==4)P0=P0&0x7f;
        }
        void t0() interrupt 1 //T0中断函数
        {

        TL0=0x6c;//赋初值,重新定时1ms
        TH0=0xfc;
        count++;
        if(count==1000)          
        {
        int c=0,v;
        if(!sw2)
        {int v;
        v=c+1;
         c++;
         }
        count=0;
        sec=sec+1;
        if(sec==60) {sec=0;min++;}
        delay (10);
        count=0;
        //TR0 = 0;
        //sw2&&TR0==(min=min+1);
        if(min==60) {min=0;hour++;}
        disp1((sw2&&s));
        sw1&&(hour=hour+v)&&count;
        if(hour==24) {hour=0;}
        }
         s=0;
        disp(sec);disp1(min);disp2(hour);
        //disp(sec,min&&sw2,hour&&sw1);

        }

        void main() //主函数
        {
        TMOD=0x11; //T0工作方式1,定时
        TH0=0xfc; //定时1ms,赋初值
        TL0=0x6c;
        ET0=1;
        EA=1;
        TR0=1;
        while(1);
        }

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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