在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LED點(diǎn)陣屏(上移)C51程序

            LED點(diǎn)陣屏(上移)C51程序

            作者: 時(shí)間:2012-10-31 來(lái)源:網(wǎng)絡(luò) 收藏

            先來(lái)張效果,圖比較酷吧

            點(diǎn)擊瀏覽下一頁(yè)

            點(diǎn)擊瀏覽下一頁(yè)

            電路原路圖
            以下程序有部分刪減,請(qǐng)從以下地址下載.單片機(jī)型號(hào)是,晶振為11.0592.本人測(cè)試成功.
            完整程序下載:http://www.51hei.com/ziliao/file/dianzhen2.rar

            //*****************************************************
            //程序功能:
            // LED點(diǎn)陣顯示屏,每行顯示字?jǐn)?shù)為 LED_NUM個(gè),
            // 總共可顯示字?jǐn)?shù)為DISP_NUM個(gè),
            // 最大可顯示字?jǐn)?shù)為65536/32=2048個(gè)。
            // 行數(shù)最多可為65536/16=4096行。
            // 循環(huán)時(shí)間參數(shù)為DISP_TIME_MOVE
            //MCU:AT89S52
            //
            //程序編寫(xiě):Bunagi
            //修改時(shí)間:2008/11/11
            //********************************************************
            #include reg51.h>
            //********************************************************
            #define LED_NUM 2 //LED顯示屏字?jǐn)?shù)
            #define DISP_NUM 12 //顯示內(nèi)容字?jǐn)?shù)
            #define DISP_TIME_MOVE 3 //循環(huán)時(shí)間參數(shù)
            //**********************************************************
            #define uchar unsigned char
            #define uint unsigned int
            //*******************************************************
            sbit LED1_SH=P2^0; //595數(shù)據(jù)傳遞控制,上升沿有效
            sbit LED1_DS=P2^1; //595數(shù)據(jù)傳遞輸入
            sbit LED1_ST=P2^2; //595數(shù)據(jù)輸出控制,上升沿有效
            sbit LED1_OE=P2^3; //595片選
            sbit LED2_SH=P2^4; //595數(shù)據(jù)傳遞控制,上升沿有效
            sbit LED2_DS=P2^5; //595數(shù)據(jù)傳遞輸入
            sbit LED2_ST=P2^6; //595數(shù)據(jù)輸出控制,上升沿有效
            sbit LED2_OE=P2^7; //595片選
            //***********************************************************

            uint disp_up_move; //上下移動(dòng)控制
            uchar disp_move_time;
            code uchar disp_code[]={
            0x20,0x08,0x17,0xFC,0x10,0x00,0x03,0xF8, //福
            0xFA,0x08,0x0A,0x08,0x13,0xF8,0x38,0x04,
            0x57,0xFE,0x94,0x44,0x14,0x44,0x17,0xFC,
            0x14,0x44,0x14,0x44,0x17,0xFC,0x14,0x04,
            0x10,0x04,0x10,0x84,0x10,0x84,0x10,0x84, //州

            };

            //*********************************************************
            void disp();
            void sent(uchar sent_dat);
            void delay(uchar temp);
            //****************************************************

            void main()
            {
            P2=0X00;
            TR0=0;
            TL0=0; //20MS
            TH0=0;
            TMOD=0X01; //方式1
            EA=1;
            ET0=1;
            TR0=1;
            while(1)
            {
            disp();
            }
            }

            //**************************************************
            //LED掃描顯示程序。
            //顯示方式為逐字掃描
            //*************************************************

            void disp()
            {
            uchar i,j;
            uint move_ctrl;
            LED1_DS=0;
            LED1_SH=0;
            LED1_ST=0;
            LED1_OE=0;
            LED2_DS=0;
            LED2_SH=0;
            LED2_ST=0;
            LED2_OE=0;
            for(j=0;j8;j++)
            {

            for(i=LED_NUM;i>=1;i--)
            {
            //**************************************字符下半部分***************************************************
            if((disp_up_move+9+j)>((DISP_NUM/LED_NUM)*16)) //判斷要顯示的字符是否已超出字庫(kù)
            {
            sent(0x00);
            sent(0x00);
            }

            else
            {
            if((disp_up_move+8+j)>15) //判斷當(dāng)前行顯示內(nèi)容是否為下一屏內(nèi)容
            {

            move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+8+j)/16); //判斷顯示字符的下半部第一個(gè)字節(jié)位置
            // 第N個(gè)字符 一屏字符大小*當(dāng)前顯示行為第幾屏
            sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j+8)%16)+1]);
            sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j+8)%16)]);
            /*
            如果有多于一行的LED點(diǎn)陣條,則程序在此添加:
            move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+8+j)/16)+LED_NUM*32*第幾行;
            sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j+8)%16)+1]);
            sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j+8)%16)]);
            ......
            */
            }
            else
            {
            move_ctrl=32*(i-1)+2*(disp_up_move%16);
            sent(disp_code[move_ctrl+16+j*2+1]);
            sent(disp_code[move_ctrl+16+j*2]);
            /*
            如果有多于一行的LED點(diǎn)陣條,則程序在此添加:
            move_ctrl=32*(i-1)+2*(disp_up_move%16)+LED_NUM*32*第幾行;
            sent(disp_code[move_ctrl+16+j*2+1]);
            sent(disp_code[move_ctrl+16+j*2]);
            ......

            */
            }
            }

            //***********************************字符上半部分***************************************************
            if((disp_up_move+j+1)>(DISP_NUM/LED_NUM)*16)
            {
            sent(0x00);
            sent(0x00);
            }
            else
            {
            if((disp_up_move+j)>15)
            {
            move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+j)/16);
            sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j)%16)+1]);
            sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j)%16)]);
            /*
            如果有多于一行的LED點(diǎn)陣條,則程序在此添加:
            move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+j)/16)+LED_NUM*32*第幾行;
            sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j)%16)+1]);
            sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j)%16)]);
            ......
            */
            }
            else
            {
            move_ctrl=32*(i-1)+2*(disp_up_move%16);
            sent(disp_code[move_ctrl+j*2+1]);
            sent(disp_code[move_ctrl+j*2]);
            /*

            如果有多于一行的LED點(diǎn)陣條,則程序在此添加:
            move_ctrl=32*(i-1)+2*(disp_up_move%16)+LED_NUM*32*第幾行;
            sent(disp_code[move_ctrl+j*2+1]);
            sent(disp_code[move_ctrl+j*2]);
            ......
            */
            }
            }
            }


            LED1_SH=1;
            LED1_SH=0;
            LED1_DS=1;
            LED1_ST=1;
            LED1_ST=0;
            LED2_ST=1;
            LED2_ST=0;
            delay(1);
            }

            LED1_OE=1;
            LED2_OE=1;

            }

            //***************************************************
            void sent(uchar sent_dat)
            {
            uchar i;
            for(i=0;i8;i++)
            {
            LED2_DS=sent_dat0x01;
            sent_dat=sent_dat>>1;
            LED2_SH=1;
            LED2_SH=0;
            }

            }

            //************************************************
            void delay(uchar temp)
            {
            uchar i,j;
            for(i=0;itemp;i++)
            for(j=0;j100;j++);
            }

            //********************************************

            void t0() interrupt 1
            {
            TR0=0;
            TL0=0;
            TH0=0;
            if(disp_move_time++>DISP_TIME_MOVE)
            {
            disp_move_time=0;
            if(disp_up_move++ >((DISP_NUM/LED_NUM)*16)-1)disp_up_move=0;
            }
            TR0=1;
            }



            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉