找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5090|回復: 0
打印 上一主題 下一主題
收起左側

51單片機顯示時分秒 LED顯示 哈哈

[復制鏈接]
跳轉到指定樓層
樓主
ID:257049 發(fā)表于 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);
        }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表