找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 led選裝顯示器.doc

        led選裝顯示器.doc

         

        基于51單片機的LED旋轉顯示器(旋轉時鐘):
        程序如下:#include<reg52.h>

        unsigned char code shuzi_0[8]={0x82,0x7C,0x7C,0x7C,0x7C,0x7C,0x82,0xfe};/*"0",0*/
        unsigned char code shuzi_1[8]={0xfe,0x7e,0x7a,0x00,0x7e,0x7e,0xfe,0xfe};/*"1",1*/
        unsigned char code shuzi_2[8]={0x3a,0x3c,0x5c,0x5c,0x6c,0x6c,0x72,0xfe};/*"2",2*/
        unsigned char code shuzi_3[8]={0xba,0x7c,0x7c,0x6c,0x6c,0x6c,0x92,0xfe};/*"3",3*/
        unsigned char code shuzi_4[8]={0x9e,0xae,0xb6,0xba,0x00,0xbe,0xbe,0xfe};/*"4",4*/
        unsigned char code shuzi_5[8]={0xa0,0x6c,0x6c,0x6c,0x6c,0x6c,0x9c,0xfe};/*"5",5*/
        unsigned char code shuzi_6[8]={0x82,0x6c,0x6c,0x6c,0x6c,0x6c,0x9a,0xfe};/*"6",6*/
        unsigned char code shuzi_7[8]={0xfc,0xfc,0xfc,0x0c,0xf4,0xf8,0xfc,0xfe};/*"7",7*/
        unsigned char code shuzi_8[8]={0x92,0x6c,0x6c,0x6c,0x6c,0x6c,0x92,0xfe};/*"8",8*/
        unsigned char code shuzi_9[8]={0xb2,0x6c,0x6c,0x6c,0x6c,0x6c,0x82,0xfe};/*"9",9*/
        unsigned char code fuhao_A[8]={0xfe,0xfe,0xba,0xba,0xfe,0xfe,0xfe,0xfe};/*":",10*/
        /*******************************************************************************************************************************/
        unsigned char code hanzi_a[2][16]={0xf7,0x37,0x47,0x70,0x17,0x73,0xb7,0xbd,0xdd,0xdd,0xed,0xe5,0xc9,0xdd,0xbf,0xff,
        0xf7,0xe7,0xf7,0xf7,0x00,0xfb,0xbb,0xbd,0xbd,0xbd,0x81,0xbd,0xbc,0x9d,0xbf,0xff};/*輕*/
        unsigned char code hanzi_b[2][16]={0xff,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0x03,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xff,0xff,
        0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xc0,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xff};/*工*/
        unsigned char code hanzi_c[2][16]={0xfb,0xcb,0x3d,0xfb,0x3b,0xc3,0xdf,0xef,0xf0,0x17,0xf7,0xf7,0xd7,0xe7,0xff,0xff,
        0xef,0xf7,0xf9,0xfe,0x7d,0x73,0xbf,0xcf,0xf3,0xfc,0xf3,0xef,0x9f,0x3f,0xbf,0xff};/*歡*/
        unsigned char code hanzi_d[2][16]={0xbf,0xbd,0xbb,0x37,0xff,0x03,0xfb,0xfd,0x7d,0x03,0xfb,0xfb,0xfb,0x01,0xfb,0xff,
        0xff,0xbf,0xdf,0xe0,0xdf,0xb8,0xbd,0xbe,0xbf,0x80,0xbf,0xbd,0xbb,0x9c,0xdf,0xff};/*迎*/
        unsigned char code hanzi_e[2][16]={0xbf,0xdf,0xef,0x03,0xdc,0xef,0x73,0x98,0xfb,0x0b,0xfb,0xbb,0x6b,0x73,0xff,0xff,
        0xbf,0xcf,0xff,0x88,0x7f,0x7e,0x77,0x6d,0x4b,0x7c,0x7f,0x1f,0xff,0xee,0x9f,0xff};/*您*/

        //unsigned char bt=0; //定時器1中斷計數
        unsigned int Tcz=600,s=0,bt=0;//s表示中斷次數 ,Tcz表示定時器TO的初值
        unsigned char iDex=0,hiDex; //8列控制,把旋轉一周的180個顯示位置分成22.5塊。一塊為一個顯示單位
        unsigned char Hour=10,Minute=15,Second=45,Hour_Flag=0,buffer=0;
        void hanzi_Show(unsigned char m);
        void Time_Show(unsigned char m); //數字0-9加:顯示函數
        void Time_Amend(); //時間邏輯控制函數
        void Hour_Display(); //小時顯示函數
        void Minute_Display(); //分鐘顯示函數
        void Second_Display(); //秒鐘顯示函數
        void A_Display(); //“:”顯示函數
        void Init(); //初始化函數
        int k=0; //校正值
        void INT00(void)interrupt 0 //外部中斷服務函數,用于定位和定時器0初值校正
        { //k為校正值,當定時中斷過快,K 變大,Tcz同時變大,定時器初值變大,中斷變慢;
        k=s-180;
        Tcz=Tcz+k;
        iDex=0;
        hiDex=0;
        s=0; //定時器中斷次數清零,顯示第二周
        }
        void kjp_test(void)interrupt 1 //定時器中斷0中斷服務程序。
        { TH0=(-Tcz)/256;
        TL0=(-Tcz)%256;
        if(buffer==0) //buffer 用來控制顯示模式
        {
        if(hiDex>=16){hiDex=0;} //顯示模式選擇,1為數字式,這個我想的是用遙控起來控制顯示模式
        if(iDex>=8){iDex=0;}
        if(s==(Second*3)) //秒鐘
        {
        P0=0X00;P1=0X00;
        }
        else
        {
        P0=0XFE;P1=0XFF;
        }

        if(s==(Minute)*3) //分
        {
        P0=0XF0;P1=0X00;
        }
        else
        {
        P0=0XFE;P1=0XFF;
        }

        if(s==(Hour*15+Minute/4)) //時
        {
        P0=0XFF;P1=0X00;
        }
        else
        {
        P0=0XFE;P1=0XFF;
        }

        }
        s++;

        }

        void Time_luoji()interrupt 3
        { TH1=(65535-20000)/256; //定時器1初值定為20毫秒
        TL1=(65535-20000)%256;
        bt++;
        if(bt==50) //就是這里有問題,我定50次應該是秒數自加一,
        { // 但是實際卻很快,所以我定的500次
        bt=0;
        Second++;
        Time_Amend();

        }
        }
        void Time_Show(unsigned char m)
        {
        switch (m)
        {
        case 0 :P0=0xff; P0=shuzi_0[iDex];iDex++;P2=0xff;break;
        case 1 :P0=0xff; P0=shuzi_1[iDex];iDex++;P2=0xff;break;
        case 2 :P0=0xff; P0=shuzi_2[iDex];iDex++;P2=0xff;break;
        case 3 :P0=0xff; P0=shuzi_3[iDex];iDex++;P2=0xff;break;
        case 4 :P0=0xff; P0=shuzi_4[iDex];iDex++;P2=0xff;break;
        case 5 :P0=0xff; P0=shuzi_5[iDex];iDex++;P2=0xff;break;
        case 6 :P0=0xff; P0=shuzi_6[iDex];iDex++;P2=0xff;break;
        case 7 :P0=0xff; P0=shuzi_7[iDex];iDex++;P2=0xff;break;
        case 8 :P0=0xff; P0=shuzi_8[iDex];iDex++;P2=0xff;break;
        case 9 :P0=0xff; P0=shuzi_9[iDex];iDex++;P2=0xff;break;
        case 10 :P0=0xff; P0=fuhao_A[iDex];iDex++;P2=0xff;break;
        }
        }
        void hanzi_Show(unsigned char m)
        {
        switch (m)
        {
        case 0 :P0=0xff; P0=hanzi_a[0][hiDex];P2=0xff;P2=hanzi_a[1][hiDex];hiDex++;break; //輕
        case 1 :P0=0xff; P0=hanzi_b[0][hiDex];P2=0xff;P2=hanzi_b[1][hiDex];hiDex++;break; //工
        case 2 :P0=0xff; P0=hanzi_c[0][hiDex];P2=0xff;P2=hanzi_c[1][hiDex];hiDex++;break; //歡
        case 3 :P0=0xff; P0=hanzi_d[0][hiDex];P2=0xff;P2=hanzi_d[1][hiDex];hiDex++;break; //迎
        case 4 :P0=0xff; P0=hanzi_e[0][hiDex];P2=0xff;P2=hanzi_e[1][hiDex];hiDex++;break; //您
        }
        }


        void A_Display()
        {
        Time_Show(10);
        }

        void Hour_Display()
        { //顯示小時
        unsigned char m=0,n=0;
        m=Hour/10;
        n=Hour%10;
        if(s<8)
        Time_Show(m);
        else
        Time_Show(n);
        }

        void Minute_Display()
        {
        unsigned char m=0,n=0; //顯示分
        m=Minute/10;
        n=Minute%10;
        if(s<32)
        Time_Show(m);
        else
        Time_Show(n);
        }

        void Second_Display()
        {
        unsigned char m=0,n=0; //顯示秒
        m=Second/10;
        n=Second%10;
        if(s<56)
        Time_Show(m);
        else
        Time_Show(n);
        }

        void Time_Amend()
        {
        if(Second>=60) //時間邏輯控制
        {
        Second=0;
        Minute++;
        if(Minute>=60)
        {
        Minute=0;
        Hour++;
        if(Hour>=24)
        Hour=0;
        }
        }
        }

        void Init()
        {
        // TMOD|=0x01;
        // TMOD&=0xfd; //定時器/計數器的方式控制字。將T0設為方式2
        // TMOD|=0x10;
        // TMOD&=0xdf; //定時器/計數器的方式控制字。將T1設為方式2
        TMOD=0x11;
        EA=1; //中斷允許控制
        ET0=1; //定時器/計數器T0的中斷允許位
        ET1=1; //定時器/計數器T1的中斷允許位
        TH0=(65535-600)/256; //定時初值,5MS
        TL0=(65535-600)%256;
        TH1=(65535-50000)/256; //定時器1初值
        TL1=(65535-50000)%256;
        TR0=1; //定時器/計數器T0的啟動
        TR1=1;
        EX0=1;
        // EX1=1; //INT0中斷允許控制位
        IT0=1;
        IT1=1; //控制寄存器TCON
        PT1=1; //設置定時器T1中斷先級為高,防止T0中斷中出現,不處理T1中斷服務程序
        // PX1=1;
        }

        void main()
        {
        Init();
        while(1)
        {
        ;
        }
        }



        [ 此帖被tanghua718在2010-12-10 15:22重新編輯 ]



        QQ|手機版|MCU資訊論壇 ( 京ICP備18035221號-2 )|網站地圖

        GMT+8, 2025-5-5 06:45 , Processed in 0.044224 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        亚洲中文字幕久久精品无码APP | 亚洲成网777777国产精品| 国产亚洲精品观看91在线| 青青青青久久精品国产| 久久精品中文字幕一区| 中文字幕无码精品亚洲资源网久久| 精品一区二区三区免费毛片爱 | 精品午夜久久福利大片| 国产精品一区二区久久精品无码| 亚洲精品乱码久久久久久蜜桃| 欧美精品v欧洲精品| 四虎国产精品永久地址99| 日韩精品无码久久一区二区三| jizz国产精品| 午夜成人精品福利网站在线观看| 亚洲精品高清国产一线久久| 国产精品网站在线观看| 久草视频精品在线| 无码人妻精品一区二区三区久久| 欧美精品一区二区三区视频| 午夜精品久久久久久影视777| 精品人妻人人做人人爽| 国产精品日韩欧美在线第3页| 亚洲国产一二三精品无码| 91人前露出精品国产| 丝袜足控一区二区三区| 国产精品网站在线观看| 亚洲欧洲精品成人久久曰影片| 91麻豆精品国产自产在线观看一区| 精品国精品国产自在久国产应用男| 亚洲av无码国产精品色午夜字幕| 国产A∨免费精品视频| 在线观看国产精品日韩av| 99re只有精品8中文| 国产精品亚洲综合网站| 国产成人精品久久亚洲| 亚洲精品中文字幕乱码三区| 国产叼嘿久久精品久久| 亚洲动漫精品无码av天堂| 国产精品美女久久久久av爽| 色婷婷在线精品国自产拍|