在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用51單片機做的電子時鐘

            用51單片機做的電子時鐘

            作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏

            程序如下:
            #include
            unsigned char code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x76};//字碼表0-9,最后一個是一橫"-"
            unsigned int i,a,b,c,d,flag,flag1;
            unsigned int sec,min,h,nm,nh,nz;
            unsigned int w,day,mon,year;
            int miao1,miao2,miao3;
            sbit keyled=P1^0;
            sbit key2=P1^1;
            sbit keyinc=P1^2;
            sbit keymood=P1^3;
            sbit BEEP=P1^4;
            void second();
            void minute();
            void hour();
            void time();
            void riqi();
            void xianshi();
            void delay10ms();
            void delay20ms();
            void tiaoshi();
            void miaobiao();
            void miaotime();
            void week();
            void naozhong();
            void shengyin();
            //前幾天剛用了下定時器,想起來之前用匯編寫的時鐘程序基本沒有什么功能,所以這幾天就用C再寫了下
            //這個時鐘的功能是模仿我自己的手表寫的,功能完全一樣,有秒表,鬧鐘,可以顯示年月日及星期
            /
            {
            if(min==nm&&h==nh)//時間到了,鬧鐘響
            {
            shengyin(); //鬧鐘的聲音程序
            }
            }
            if(c==0||c==2)
            {
            if(keymood==0)
            {
            miao1=0;
            miao2=0;
            miao3=0;
            }
            }
            while(b==1)//保證按鍵只按一次,沒有重復(fù)按鍵
            {tiaoshi();
            goto B1; //如果b還等于1,剛重復(fù)掃描秒表界面
            }
            }
            /
            { i=0;//將i清零,保證每次進(jìn)入都是一樣的
            B2:if(nz==0)
            { if(min==nm&&h==nh)
            {
            shengyin();
            }
            }
            naozhong();
            while(b==2)
            { tiaoshi();
            goto B2;
            }
            }
            /
            { i=1;
            B3:if(nz==0)
            { if(min==nm&&h==nh)
            {
            shengyin();
            }
            }
            xianshi(); //顯示程序,用i的大小來分配,相當(dāng)于調(diào)時、分、秒就顯示時間,調(diào)年月日就顯示日期
            while(b==3)
            {tiaoshi();
            goto B3;
            }
            }
            /
            {i=0;
            if(nz==0)
            { if(min==nm&&h==nh)
            {
            shengyin();
            }
            }
            second();
            minute();
            hour();
            }
            if(keyinc==0)
            { delay10ms();
            if(keyinc==0)
            {
            B: riqi();
            while(keyinc==0)
            {
            goto B;
            }
            }
            }
            if(keymood==0)
            {
            delay10ms();
            if(keymood==0)
            {
            N: naozhong();
            }
            while(keymood==0)
            {
            goto N;
            }
            }
            tiaoshi();
            /
            {
            if(flag>10) //在flag>10的時候關(guān)閉所有的數(shù)碼管,其他時間開啟相應(yīng)位,這樣就可以達(dá)到閃爍的目的了
            {
            P3=0xff;
            }
            else
            {
            P3=0x7f;
            }
            }
            else //如果i不等于1,剛正常顯示,不會閃爍
            {
            P3=0x7f;
            }
            P2=table1[secge];
            for(a=0;a<100;a++);
            if(i==1)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xbf;
            }
            }
            else//如果i不等于1,剛正常顯示,不會閃爍
            {
            P3=0xbf;
            }
            P2=table1[secshi];
            for(a=0;a<100;a++);
            P3=0xdf;
            P2=table1[10];
            for(a=0;a<100;a++);
            }
            //*******************************分顯示程序***************************
            void minute()
            {
            int minge,minshi;
            minge=min%10;
            minshi=min/10;


            if(i==2)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xef;
            }
            }
            else
            {
            P3=0xef;
            }
            P2=table1[minge];
            for(a=0;a<100;a++);

            if(i==2)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xf7;
            }
            }
            else
            {
            P3=0xf7;
            }
            P2=table1[minshi];
            for(a=0;a<100;a++);
            P3=0xfb;
            P2=table1[10];
            for(a=0;a<100;a++);
            }
            //*********************************時顯示程序*************************
            void hour()
            {
            int hourge,hourshi;
            hourge=h%10;
            hourshi=h/10;

            if(i==3)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xfd;
            }
            }
            else
            {
            P3=0xfd;
            }
            P2=table1[hourge];
            for(a=0;a<100;a++);
            if(i==3)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xfe;
            }
            }
            else
            {
            P3=0xfe;
            }
            P2=table1[hourshi];
            for(a=0;a<100;a++);
            }
            //*****************************年、月、日顯示程序************************
            void riqi()
            {
            int dayge,dayshi;
            int monge,monshi;
            int yearge,yearshi;
            dayge=day%10;
            dayshi=day/10;
            if(i==4)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0x7f;
            }
            }
            else
            {
            P3=0x7f;
            }
            P2=table1[dayge];
            for(a=0;a<100;a++);
            if(i==4)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xbf;
            }
            }
            else
            {
            P3=0xbf;
            }
            P2=table1[dayshi];
            for(a=0;a<100;a++);
            P3=0xdf;
            P2=table1[10];
            for(a=0;a<100;a++);
            monge=mon%10;
            monshi=mon/10;
            if(i==5)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xef;
            }
            }
            else
            {
            P3=0xef;
            }
            P2=table1[monge];
            for(a=0;a<100;a++);
            if(i==5)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xf7;
            }
            }
            else
            {
            P3=0xf7;
            }
            P2=table1[monshi];
            for(a=0;a<100;a++);
            P3=0xfb;
            P2=table1[10];
            for(a=0;a<100;a++);
            yearge=year%10;
            yearshi=year/10;
            if(i==6)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xfd;
            }
            }
            else
            {
            P3=0xfd;
            }
            P2=table1[yearge];
            for(a=0;a<100;a++);
            if(i==6)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xfe;
            }
            }
            else
            {
            P3=0xfe;
            }
            P2=table1[yearshi];
            for(a=0;a<100;a++);
            }
            //*****************************星期顯示程序****************************
            void week()
            {
            if(i==7)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xef;
            }
            }
            else
            {
            P3=0xef;
            }
            P2=table1[w];
            for(a=0;a<100;a++);
            }
            //*****************************秒表顯示程序************************
            void miaobiao()
            {
            int miao1ge,miao1shi;
            int miao2ge,miao2shi;
            int miao3ge,miao3shi;
            miao1ge=miao1%10;
            miao1shi=miao1/10;
            P3=0x7f;
            P2=table1[miao1ge];
            for(a=0;a<100;a++);
            P3=0xbf;
            P2=table1[miao1shi];
            for(a=0;a<100;a++);
            P3=0xdf;
            P2=table1[10];
            for(a=0;a<100;a++);
            miao2ge=miao2%10;
            miao2shi=miao2/10;
            P3=0xef;
            P2=table1[miao2ge];
            for(a=0;a<100;a++);
            P3=0xf7;
            P2=table1[miao2shi];
            for(a=0;a<100;a++);
            P3=0xfb;
            P2=table1[10];
            for(a=0;a<100;a++);
            miao3ge=miao3%10;
            miao3shi=miao3/10;
            P3=0xfd;
            P2=table1[miao3ge];
            for(a=0;a<100;a++);
            P3=0xfe;
            P2=table1[miao3shi];
            for(a=0;a<100;a++);
            }
            //****************************鬧鐘顯示程序************************
            void naozhong()
            {
            int nmge,nmshi;
            int nhge,nhshi;
            nmge=nm%10;
            nmshi=nm/10;
            if(i==1||i==3||i==5||i==7)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xef;
            }
            }
            else
            {
            P3=0xef;
            }
            P2=table1[nmge];
            for(a=0;a<100;a++);
            if(i==1||i==3||i==5||i==7)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xf7;
            }
            }
            else
            {
            P3=0xf7;
            }
            P2=table1[nmshi];
            for(a=0;a<100;a++);
            P3=0xfb;//顯示一橫
            P2=table1[10];
            for(a=0;a<100;a++);
            nhge=nh%10;
            nhshi=nh/10;
            if(i==2||i==4||i==6)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xfd;
            }
            }
            else
            {
            P3=0xfd;
            }
            P2=table1[nhge];
            for(a=0;a<100;a++);
            if(i==2||i==4||i==6)
            {
            if(flag>10)
            {
            P3=0xff;
            }
            else
            {
            P3=0xfe;
            }
            }
            else
            {
            P3=0xfe;
            }
            P2=table1[nhshi];
            for(a=0;a<100;a++);
            P3=0xdf; //顯示H
            P2=table1[11];
            for(a=0;a<100;a++);
            }
            //*******************************調(diào)時顯示***********************
            void xianshi()
            {
            if(i>3&&i<7)
            {
            riqi();
            }
            else if(i==7)
            {
            week();
            }
            else
            {
            second();
            minute();
            hour();
            }
            }
            //***********************************鬧鐘聲音程序****************
            void shengyin()
            {
            BEEP=~BEEP;
            for(a=0;a<10;a++);
            }
            //***************************時鐘加1程序*******************************
            void time()
            {
            if(flag==90)
            {
            flag=0;
            sec++;
            if(sec==60)
            {
            sec=0;
            min++;
            if(min==60)
            {
            min=0;
            h++;
            if(h==24)
            {
            h=0;
            day++;
            if(day==31)
            {
            day=0;
            mon++;
            if(mon==12);
            {
            mon=0;
            year++;
            }
            }
            }
            }
            }
            }
            }
            //****************************秒表加1程序****************
            // flag1標(biāo)志位主要是為秒表而設(shè)的
            void miaotime()//秒表加時程序
            {

            if(flag1==1)
            {
            flag1=0;
            miao1++;
            if(miao1==100)
            {
            miao1=0;
            miao2++;
            if(miao2==60)
            {
            miao2=0;
            miao3++;
            if(miao3==60)
            {
            miao3=0;
            }
            }
            }
            }
            }
            //************************調(diào)時程序*******************************
            void tiaoshi()//
            {
            if(keyinc==0&&keymood==0)
            {
            delay10ms();
            if(keyinc==0&&keymood==0)
            {
            nz++;
            if(nz==2)
            {
            nz=0;
            }
            }
            while(keyinc==0&&keymood==0);
            }
            //********************
            if(keymood==0)
            {
            delay10ms();
            if(keymood==0)
            {
            i++;
            if(i==8)
            {
            i=1;
            }
            }
            while(keymood==0);
            }
            //******************************
            if(key2==0)
            {
            for(a=0;a<2000;a++);
            if(key2==0)
            {
            b++;
            if(c>0||i>0)//只要調(diào)了秒表,再按一次key2鍵就可以退回到正常時間顯示界面
            {
            if(key2==0)
            {
            b=0;
            c=0;
            }
            }
            //***
            if(b==4)
            {
            b=0;
            }
            }

            while(key2==0);
            }
            //****************************************
            //**********
            if(b==2&&(i==1||i==3||i==5||i==7)) //調(diào)鬧鐘的分
            {
            if(keyinc==0)
            {
            nm++;
            if(nm==60)
            nm=0;
            }
            while(keyinc==0);
            }
            //
            if(b==2&&(i==2||i==4||i==6))//調(diào)鬧鐘的時
            {
            if(keyinc==0)
            {
            nh++;
            if(nh==24)
            {
            nh=0;
            }
            }
            while(keyinc==0);
            }
            //**********************
            if(b==1)
            {
            if(keyinc==0)
            {
            delay10ms();
            if(keyinc==0)
            {
            c++;
            if(c==3)
            {
            c=1;
            }
            }
            while(keyinc==0);
            }
            }

            //*******************************************************
            if(i==1)
            {

            if(keyinc==0)
            {
            delay10ms();
            if(keyinc==0)
            {
            sec=0;
            }
            while(keyinc==0);
            }
            }
            if(i==2&&keyinc==0)
            {
            for(a=0;a<5000;a++);
            if(keyinc==0)
            {
            min++;
            }
            if(min==60)
            {
            min=0;
            }
            delay10ms();
            }
            //***************
            if(i==3&&keyinc==0)
            {
            for(a=0;a<5000;a++);
            if(keyinc==0)
            {
            h++;
            }
            if(h==24)
            {
            h=0;
            }
            while(keyinc==0);
            }
            //******************
            if(i==4&&keyinc==0)
            {
            for(a=0;a<5000;a++);
            if(keyinc==0)
            {
            day++;
            if(day==31)
            {
            day=0;
            }
            }
            while(keyinc==0);
            }
            //
            if(i==5&&keyinc==0)
            {
            for(a=0;a<5000;a++);
            if(keyinc==0)
            {
            mon++;
            if(mon==13)
            {
            mon=0;
            }
            }
            while(keyinc==0);
            }
            //
            if(i==6&&keyinc==0)
            {
            for(a=0;a<5000;a++);
            if(keyinc==0)
            {
            year++;
            }
            while(keyinc==0);
            }
            //
            if(i==7&&keyinc==0)
            {
            delay10ms();
            if(keyinc==0)
            {
            w++;
            }
            while(keyinc==0);
            }
            }
            //*****************************延時程序******************************
            void delay10ms() //延時10MS子程序,在消除鍵盤的抖動
            {
            for(a=0;a<5000;a++);
            }
            //******************************************************
            void delay20ms()//延時20MS,在調(diào)時間的時候,按下超過20MS就可以被認(rèn)為重復(fù)按鍵
            {
            for(a=0;a<10000;a++);
            }
            //*******************************中斷服務(wù)程序************************
            void timer1() interrupt 3
            {
            TH1=(65535-10000)/256;//計算初值
            TL1=(65535-10000)%256;
            flag++;
            time();
            if((c==1&&i==0)||(c==1&&(i==2||i==4||i==6)))
            {
            flag1++;
            }
            miaotime();
            }
            程序主要功能有時間顯示,秒表,鬧鐘,年月日及星期顯示,基本與一般的電子手表相同。還應(yīng)該有個燈,按鍵已經(jīng)畫出來了,程序部分沒有寫,不過比較簡單,就沒有寫了。當(dāng)然還有一些地方要再改下,像鬧鐘應(yīng)該還有個懶人模式,關(guān)鬧鐘也沒有達(dá)到預(yù)想的效果,當(dāng)然鬧鐘的聲音就更不用說了,怎么都調(diào)不到手表上的那種清脆的聲音。先這樣,以后再努力!

            本文引用地址:http://www.biyoush.com/article/201611/320128.htm


            關(guān)鍵詞: 51單片機電子時

            評論


            技術(shù)專區(qū)

            關(guān)閉