中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機C編程(六、定時器時鐘顯示時分秒)

        51單片機C編程(六、定時器時鐘顯示時分秒)

        作者: 時間:2016-11-27 來源:網絡 收藏
        六位數(shù)碼管顯示時分秒,通過四個按鍵進行時間的控制。按下"調時"按鍵,時間顯示停止;按下"選擇時分秒"按鍵,數(shù)碼管上方的發(fā)光二極管會點亮,對應著選中的要修改的時間是小時、分鐘還是秒;按下"按下增加"按鍵,選中的時間將會增加;按下"完成"按鍵,時間繼續(xù)顯示。

        已通過proteus仿真,電路圖如下所示,希望大家多多指點,積極留言:

        本文引用地址:http://www.antipu.com.cn/article/201611/322159.htm

        //編程:jumpmysoul

        #include
        #define ulong unsigned long
        char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽數(shù)碼管數(shù)字碼
        char tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x70,0x10};//共陽數(shù)碼管數(shù)字碼(帶小數(shù)點)

        #define LED P0//P0為數(shù)碼管的段選
        #define LIGHT P1//P1為時分秒位的指示燈
        #define WS P2//P2為數(shù)碼管的位選

        sbit time_change=P3^0;//P3^0為“調時”按鍵
        sbit time_choose=P3^1;//P3^1為“選擇時分秒”按鍵
        sbit time_inc=P3^2;//P3^2為“增加”按鍵
        sbit time_ok=P3^3;//P3^3為“完成”按鍵

        ulong t;
        ulong sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi;//定義秒,分,時,秒的個位,十位,分的個位,十位,時的個位,十位
        int choose_n;//按下“選擇時分秒”按鍵的次數(shù)
        int flag;//定義“調時”按鍵的標志位
        //---------------------------------------------------------------------
        void init();
        void display();
        void delay(int);
        void time_modify();
        //---------------------------------------------------------------------
        void main()
        {
        init();
        while(1)
        {
        TR0=1;
        display();
        time_modify();
        }
        }
        //---------------------------------------------------------------------
        void init()
        {
        WS=t=LIGHT=choose_n=0;
        sec_ge=sec_shi,min_ge,min_shi,hour_ge,hour_shi=sec=min=hour=flag=0;
        TMOD=0x01;//定義定時器0工作與方式1
        TH0=(65536-5536)/256;//定時器賦初值
        TL0=(65536-5536)%256;
        EA=1;//開總中斷和T0中斷
        ET0=1;
        }
        //--------------------------------延時子函數(shù)------------------------------------
        void delay(int x)
        {
        int i,j;
        for(i=x;i>0l;i--)
        for(j=255;j>0;j--);
        }
        //-------------------------------顯示子函數(shù)---------------------------------------
        void display()
        {
        int i=0;

        if(TF0==1)//如果定時器溢出
        {
        TF0=0;//清中斷標志位
        t++;
        if(t==10)
        {
        t=0;
        sec++;//秒加1
        if(sec==60)//如果秒為60,則清零,分加1
        {
        sec=0;
        min++;
        }
        if(min==60)//如果分為60,則清零,時加1
        {
        min=0;
        hour++;
        }
        if(hour==24)//如果時為24,則清零
        {
        hour=0;
        }
        }
        }
        sec_ge=sec%10;//秒的個位和十位
        sec_shi=sec/10;
        min_ge=min%10;//分的個位和十位
        min_shi=min/10;
        hour_ge=hour%10;//時的個位和十位
        hour_shi=hour/10;

        WS=0x20;//循環(huán)掃描
        LED=tab[sec_ge];
        delay(1);

        WS=0x10;
        LED=tab[sec_shi];
        delay(1);

        WS=0x08;
        LED=tab_dp[min_ge];
        delay(1);

        WS=0x04;
        LED=tab[min_shi];
        delay(1);

        WS=0x02;
        LED=tab_dp[hour_ge];
        delay(1);

        WS=0x01;
        LED=tab[hour_shi];
        delay(1);
        }
        //----------------------------調時子程序-------------------------------
        void time_modify()
        {
        if(time_change==0)//如果“調時”按鍵按下
        {
        delay(5);//延時去抖
        if(time_change==0)
        {
        flag=1;//標志位置1
        while(flag)//當標志位為1時才能進行時間調整
        {
        TR0=0;//定時器停止
        display();//顯示停止時的時間
        if(time_ok==0)//如果“完成”按鍵按下
        {
        delay(15);//延時去抖
        if(time_ok==0)
        {
        flag=0;//標志位清零
        }
        }
        if(time_choose==0)//如果“時分秒選擇”按鍵按下
        {
        delay(30);//延時去抖
        if(time_choose==0)
        {
        ++choose_n;//按下的次數(shù)增加
        if(choose_n==4)//如果次數(shù)達到4次
        {
        choose_n=1;//次數(shù)清零
        }
        if(choose_n==1)//如果次數(shù)為1,秒指示燈亮
        {
        LIGHT=0x03;
        }
        else if(choose_n==2)//如果次數(shù)為2,分指示燈亮
        {
        LIGHT=0x0c;
        }
        else if(choose_n==3)//如果次數(shù)為3,時指示燈亮
        {
        LIGHT=0x30;
        }
        }
        }
        if(time_inc==0)//如果“增加”按鍵按下
        {
        delay(30);//延時去抖
        if(time_inc==0)
        {
        switch(choose_n)//分支結構,根據choose_n的值來判斷哪一位加1
        {
        case 1://如果choose_n為1,秒加1,到60清零
        {
        sec++;
        if(sec==60)
        sec=0;
        break;
        }
        case 2://如果choose_n為2,分加1,到60清零
        {
        min++;
        if(min==60)
        min=0;
        break;
        }
        case 3://如果choose_n為3,時加1,到24清零
        {
        hour++;
        if(hour==24)
        hour=0;
        break;
        }
        default:break;
        }
        }
        }
        }
        }
        }
        }



        評論


        技術專區(qū)

        關閉