找回密碼
         注冊會員
        搜索附件  
        MCU資訊論壇 附件中心 單片機論壇 51單片機論壇 5_111576_2fc9f82be259d0a.jpg

        5_111576_2fc9f82be259d0a.jpg

         

        基于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重新編輯 ]



        5_111576_2fc9f82be259d0a.jpg

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

        GMT+8, 2025-5-5 11:21 , Processed in 0.047730 second(s), 8 queries , Redis On.

        Powered by Discuz! X3.5

        © 2001-2025 Discuz! Team.

        返回頂部
        久久久久亚洲精品天堂久久久久久| 人人妻人人澡人人爽人人精品| 久久久久99精品成人片欧美| 久久青青草原精品国产| 99久久99这里只有免费费精品 | 日韩欧精品无码视频无删节 | 国产精品亚洲αv天堂无码| 亚洲精品成人久久久| 久久精品人人做人人妻人人玩 | 亚洲精品无码专区久久同性男| 久久精品www人人爽人人| 91精品一区二区综合在线| 亚洲国产成人乱码精品女人久久久不卡| xx视频免费网址在线看| 久久精品一区二区| 天天视频国产精品| 国产麻豆一精品一AV一免费| 国产区精品高清在线观看| 亚洲线精品一区二区三区| 久久99国产精品久久| 无码AⅤ精品一区二区三区| 2020亚洲男人天堂精品| 久久精品亚洲乱码伦伦中文 | 欧美成人精品一级高清片| 亚洲婷婷国产精品电影人久久| 538国产精品一区二区在线| 久久九九久精品国产免费直播| 日韩精品无码一本二本三本| 国产精品日日摸夜夜添夜夜添1国产精品va欧美精 | 日本精品自产拍在线观看中文 | 精品国产一区二区三区久久蜜臀| 亚洲AV永久精品爱情岛论坛| 91久久福利国产成人精品| freexx性日本| 999国产精品视频| 亚洲国产精品无码AAA片| 国产欧美在线观看精品一区二区| 久久久久99精品成人片试看| 久久九九久精品国产| 99久久婷婷免费国产综合精品| 无码人妻精品一区二区三区99不卡|