<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        單片機小時鐘(電子制作)

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年04月17日   【字體:

         采用四位一體數碼管倆個,限流電阻4.7k歐,主控為STC89c52單片機。以下程序作為參考。實物圖可以去相冊里觀看。
        呵呵,在編寫這個程序時遇到了一些問題,拿出來與大家共勉。
        剛開始我就把位定義的接口弄錯,單片機怎么都不工作,看來看去終于發現剛開始就錯了;之后發現我的時間走得比標準時鐘快好多,可能我的芯片晶振更快吧,但怎么想真么不合理,那個后來我只好計算一下,只好把時鐘改了;再之后我發現有時調節時和分時,秒針要等很久(大約一分鐘)才工作,后來經過排查發現,當你調節時,如果正好等于time==16,那么time將繼續增加,直至走到下一個16,。
        本程序應用了定時器中斷。
        #include<reg52.h>

        #define DIG P0

        sbit LSA=P2^2;
        sbit LSB=P2^3;
        sbit LSC=P2^4;

        sbit k0=P3^1;
        sbit k1=P3^0;

        void timerconfiguration();
        void digdisplay();
        void clock();
        void keydown();

        unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        unsigned char state[10];
        unsigned char time;
        unsigned char a;
        unsigned char b;
        unsigned char d;
        unsigned char c;
        unsigned char e;

        void main()
        {
            char k;
            for(k=7;k>0;k--)
                state[k]=num[0];
            state[2]=0x40;
            state[5]=0x40;
            time=0;
            a=0;
            b=0;
            c=0;
            d=0;
            e=0;

            timerconfiguration();

            while(1)
            {
                digdisplay();
                keydown();
                clock();
            }
        }

        void timerconfiguration(void)
        {
            TMOD=0X01;
            TH0=0X3C;
            TL0=0XB0;
            EA=1;
            ET0=1;
            TR0=1;
        }

        void digdisplay(void)
        {
            unsigned char i;
            unsigned char j;
            i=0;
            while(i<8)
            { 
                switch(i)
            {
                    case (0): LSA=0; LSB=0; LSC=0; break;
                    case (1): LSA=1; LSB=0; LSC=0; break;
                    case (2): LSA=0; LSB=1; LSC=0; break;
                    case (3): LSA=1; LSB=1; LSC=0; break;
                    case (4): LSA=0; LSB=0; LSC=1; break;
                    case (5): LSA=1; LSB=0; LSC=1; break;
                    case (6): LSA=0; LSB=1; LSC=1; break;
                    case (7): LSA=1; LSB=1; LSC=1; break;
            }
                DIG=state[i];
                i++;
                j=10;
                while(j--);
                DIG=0x00;
            }
        }

        void timer() interrupt 1
        {
            time++;
        }

        void keydown(void)
        {
            unsigned char q;             
            unsigned char w;
            unsigned char p;
            unsigned char number;
           
            if((k0==0) || (k1==0))
            {
                for(q=38; q>0; q--)
                        for(w=100; w>0; w--);
                if(k0==0)
            {
                        if(state[3]!=num[9])
                {
                    c++;
                            state[3]=num[c];
                }
                else
                {
                    c=0;
                            state[3]=num[c];
                            if(state[4]!=num[5])
                {
                    d++;
                                state[4]=num[d];
                }
                    else
                {
                    d=0;
                                state[4]=num[d];
                                if(state[6]!=num[9])
                {
                    e++;
                                state[6]=num[e];
                }
                    else
                {
                    e=0;
                                state[6]=num[e];
                                state[7]=num[1];
                }
                                if((state[7]==num[1]) && (state[6]==num[3]))
                {
                                        for(number=7; number>0; number--)
                                        state[number]=num[0];
                                state[2]=0x40;
                                state[5]=0x40;
                    d=0;
                        e=0;
                }
              
                }
            }
            }
                if(k1==0)
            {
                        if(state[6]!=num[9])
                {
                    e++;
                                state[6]=num[e];
                }
                    else
                {
                    e=0;
                                state[6]=num[e];
                                state[7]=num[1];
                }
                                if((state[7]==num[1]) && (state[6]==num[3]))
                {
                                    for(number=7; number>0; number--)
                                        state[number]=num[0];
                                state[2]=0x40;
                                state[5]=0x40;
                        e=0;
                }
              
            }

                p=50;
               while((p>0) && ((k0==0) ||(k1==0)))
               {
                    p--;
                    for(q=38; q>0; q--)
                        for(w=100; w>0; w--);
               }
           
        }}

        void clock(void)
        {
            unsigned char number;
            if(time>=16)
            {
                time=0;
                if(state[0]!=num[9])
            {
                a++;
                    state[0]=num[a];
            }
                else
            {
                a=0;
                    state[0]=num[a];
                    if(state[1]!=num[5])
            {
                b++;
                        state[1]=num[b];
            }
                else
            {
                b=0;
                        state[1]=num[b];
                        if(state[3]!=num[9])
                {
                    c++;
                            state[3]=num[c];
                }
                else
                {
                    c=0;
                            state[3]=num[c];
                            if(state[4]!=num[5])
                {
                    d++;
                                state[4]=num[d];
                }
                    else
                {
                    d=0;
                                state[4]=num[d];
                                if(state[6]!=num[9])
                {
                    e++;
                                state[6]=num[e];
                }
                    else
                {
                    e=0;
                                state[6]=num[e];
                                    state[7]=num[1];  
                }
                                if((state[7]==num[1]) && (state[6]==num[3]))
                {
                                    for(number=7; number>0; number--)
                                        state[number]=num[0];
                                state[2]=0x40;
                                state[5]=0x40;
                        e=0;
                }
              
                }
                }
            }
            }
            }
        }                                                                                                   

        robots brother  之  牧雷(愛昵空間)
        歡迎喜歡電子的朋友加我的新qq一起討論,以后作品將很少發在這個qq。
        robots brother   2300862512

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮