• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 8位數(shù)碼管顯示電子時鐘c51單片機程序

    8位數(shù)碼管顯示電子時鐘c51單片機程序

    作者: 時間:2012-09-10 來源:網絡 收藏

    /*
    8位 時間格式 05—50—00 標示05點50分00秒
    S1 用于小時加1操作
    S2 用于小時減1操作
    S3 用于分鐘加1操作
    S4 用于分鐘減1操作
    */

    本文引用地址:http://www.czjhyjcfj.com/article/170901.htm

    #includereg52.h>
    sbit KEY1=P3^0; //定義端口參數(shù)
    sbit KEY2=P3^1;
    sbit KEY3=P3^2;
    sbit KEY4=P3^3;
    sbit LED=P1^2; //定義指示燈參數(shù)


    code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰極管0—9
    unsigned char StrTab[8]; //定義緩沖區(qū)
    unsigned char minute=19,hour=23,second; //定義并初始化為 12:30:00


    void delay(unsigned int cnt)
    {
    while(--cnt);
    }

    /******************************************************************/
    /* 處理函數(shù) */
    /******************************************************************/
    void Displaypro(void)
    {

    StrTab[0]=tab[hour/10]; //小時
    StrTab[1]=tab[hour%10];
    StrTab[2]=0x40; //顯示-
    StrTab[3]=tab[minute/10]; //顯示分鐘

    StrTab[4]=tab[minute%10];
    StrTab[5]=0x40; //顯示-
    StrTab[6]=tab[second/10]; //顯示秒

    StrTab[7]=tab[second%10];
    }

    main()
    {
    TMOD |=0x01; //定時器0 10ms inM crystal 用于計時
    TH0=0xd8; //初值
    TL0=0xf0;
    ET0=1;
    TR0=1;

    TMOD |=0x10; //定時器1用于動態(tài)掃描
    TH1=0xF8; //初值
    TL1=0xf0;
    ET1=1;
    TR1=1;
    EA =1;
    Displaypro(); //調用顯示處理函數(shù)

    while(1)
    {
    if(!KEY1) //按鍵1去抖以及動作
    {
    delay(10000);
    if(!KEY1)
    {
    hour++;

    if(hour==24)

    hour=0; //正常時間 小時 加1
    Displaypro();
    }
    }

    if(!KEY2) //按鍵2去抖以及動作
    {
    delay(10000);
    if(!KEY2)
    {
    hour--;

    if(hour==255)

    hour=23; //正常時間 小時減1
    Displaypro();
    }
    }
    if(!KEY3) //按鍵去抖以及動作
    {
    delay(10000);
    if(!KEY3)
    {
    minute++;

    if(minute==60)

    minute=0; //分加1
    Displaypro();
    }
    }
    if(!KEY4) //按鍵去抖以及動作
    {
    delay(10000);
    if(!KEY4)
    {
    minute--;

    if(minute==255)

    minute=59; //分減1
    Displaypro();
    }
    }
    }
    }


    /******************************************************************/
    /* 定時器1中斷 */
    /******************************************************************/
    void time1_isr(void) interrupt 3 using 0 //定時器1用來動態(tài)掃描
    {
    static unsigned char num;
    TH1=0xF8; //重入初值
    TL1=0xf0;

    switch (num)

    {
    case 0:P2=0;P0=StrTab[num];break; //分別調用緩沖區(qū)的值進行掃描
    case 1:P2=1;P0=StrTab[num];break;
    case 2:P2=2;P0=StrTab[num];break;
    case 3:P2=3;P0=StrTab[num];break;
    case 4:P2=4;P0=StrTab[num];break;
    case 5:P2=5;P0=StrTab[num];break;
    case 6:P2=6;P0=StrTab[num];break;
    case 7:P2=7;P0=StrTab[num];break;
    default:break;
    }
    num++; //掃描8次,使用8個
    if(num==8)
    num=0;
    }


    /******************************************************************/
    /* 定時器0中斷 */
    /******************************************************************/
    void tim(void) interrupt 1 using 1
    {
    static unsigned char count; //定義內部局部變量

    TH0=0xd8; //重新賦值
    TL0=0xf0;
    count++;
    switch (count)
    {
    case 0:
    case 20:
    case 40:
    case 60:
    case 80:Displaypro();break; //隔一定時間調用顯示處理
    case 50:P1=~P1;break; //半秒 LED 閃爍
    default:break;
    }

    if (count==100)
    {
    count=0;
    second++; //秒加1
    if(second==60)
    {
    second=0;
    minute++; //分加1
    if(minute==60)
    {
    minute=0;
    hour++; //時加1
    if(hour==24)
    hour=0;
    }
    }
    }
    }

    51單片機相關文章:51單片機教程


    單片機相關文章:單片機教程


    單片機相關文章:單片機視頻教程


    單片機相關文章:單片機工作原理


    燃氣報警器相關文章:燃氣報警器原理


    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 宜宾市| 乌恰县| 八宿县| 南康市| 越西县| 潮安县| 鄂温| 乐昌市| 博爱县| 紫阳县| 玛沁县| 安多县| 贵港市| 微山县| 祁阳县| 耿马| 郎溪县| 台北市| 五常市| 黎平县| 聂荣县| 赣榆县| 汉阴县| 偏关县| 福州市| 闽侯县| 恩施市| 吉安市| 菏泽市| 青浦区| 高清| 陵水| 收藏| 景宁| 石首市| 宿迁市| 江永县| 华蓥市| 长白| 香河县| 松阳县|