新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機驅動點陣16*16綜合C程序-包含各種效果

        單片機驅動點陣16*16綜合C程序-包含各種效果

        作者: 時間:2016-11-29 來源:網絡 收藏

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

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

        /**************************左移顯示***************************/

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

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

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

        /*裝一線數據子函數(即一行數據)*/

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

        void yixian()

        {

        uchar s;

        for(s=0;s<2;s++)/*循環2次,得到第1個字(代碼存在數組1與2中)

        與第2個字(代碼存在數組2與3中)的某一行數值*/

        {

        BUF[s*2]=table[word+(32*s)+(line*2)];//左半屏代碼,line表示行數,word表示字數

        BUF[s*2+1]=table[word+(32*s+1)+(line*2)];//右半屏代碼

        }

        }

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

        /*將一行數據轉換出來,然后顯示*/

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

        void yipai()

        {

        uchar temp,yi;

        if(move<8)//處理移動次數小于8次的部分

        {

        yi=move;

        temp=(BUF[1]<>(8-yi));/*將第1個字的右半屏數左移yi次,

        然后或上第2個字左半屏的8-yi次數,注此句是處理右半屏的數*/

        song(~temp);//發送給74HC595

        temp=(BUF[0]<>(8-yi));/*將第1個字的左半屏數左移yi次,

        然后或上第1個字右半屏的8-yi次數,注此句是處理左半屏的數*/

        song(~temp);//發送給74HC595

        }

        else//處理移動次數小于8次以外的部分

        {

        yi=move-8;

        temp=(BUF[2]<>(8-yi));//原理同上

        song(~temp);//發送給74HC595

        temp=(BUF[1]<>(8-yi));//原理同上

        song(~temp);//發送給74HC595

        }

        }

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

        /************左移子程序**********/

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

        void zou()

        {

        uchar i;

        while(word<256)

        {

        for(move=0;move<16;move++)//要移多少位?

        {

        for(i=0;i {

        for(line=0;line<16;line++)//掃描16次,即完成一個字的移動

        {

        yixian();//調用一線子程序

        yipai();//調用數據轉換子程序

        LINE=line;//打開行線,即174HC154行線端

        CLKR=1;//在74HC595處鎖存起來

        CLKR=0;

        CLKR=1;

        }

        }

        }

        word=word+32;//一個字顯示完了,就顯示下一個字

        }

        }

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

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

        /**************************右移顯示***************************/

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

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

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

        /*將一行數據轉換出來,然后顯示*/

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

        void yipai1()

        {

        uchar temp,yi;

        if(move<8)//處理移動次數小于8次的部分

        {

        yi=move;//小于8次就直接給移動的次數

        temp=(BUF[0]<<(8-yi))|(BUF[1]>>yi);/*將第1個字的左半屏數左移8-yi次,

        然后或上右半屏的yi次數,注此句是處理右半屏的數*/

        song(~temp);//發送給74HC595

        temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);/*將第2個字的右半屏數與第1個字左

        半屏的數左移8-yi次,然后或上右半屏的yi次數,注此句是處理左半屏的數*/

        song(~temp);//發送給74HC595

        }

        else//處理移動次數小于8次以外的部分

        {

        yi=move-8;//不小于8次就給move-8次給變量

        temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);/*將第2個字的右半屏數左移8-yi次,

        然后或上第1個字左半屏的yi次數,注此句是處理右半屏的數*/

        song(~temp);//發送給74HC595

        temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);/*將第2個字的左半屏數左移8-yi次,

        然后或上第2個字的右半屏的yi次數,注此句是處理左半屏的數*/

        song(~temp);//發送給74HC595

        }

        }

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

        /************右移子程序**********/

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

        void you()

        {

        uchar i;

        while(word<256)

        {

        for(move=0;move<16;move++)//要移多少位?

        {

        for(i=0;i {

        for(line=0;line<16;line++)//掃描16次,即完成一個字的移動

        {

        yixian();//調用一線子程序

        yipai1();//調用數據轉換子程序

        LINE=line;//打開行線,即174HC154行線端

        CLKR=1;//在74HC595處鎖存起來

        CLKR=0;

        CLKR=1;

        }

        }

        }

        word=word+32;//一個字顯示完了,就顯示下一個字

        }

        }

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

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

        /*************************上拉子函數**************************/

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

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

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

        /***********顯示一個整體字子函數***********/

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

        void shang1()//快速上移完一個整體字

        {

        ji=word;//將變量給計數器

        for(line=0;line<16;line++)//循環16次得到一個整體字

        {

        song(~table[ji*2+1]);//先發右半屏數

        song(~table[ji*2]);//再發左半屏數

        ji++;//取下一行數

        CLKR=1;//在74HC595處鎖存起來

        CLKR=0;

        CLKR=1;

        LINE=line;//打開行

        delay(10);

        }

        }

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

        /****快速將一個字上移16次,即一個整體字****/

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

        void shangla()

        {

        uchar i;

        while(word<128)

        {

        for(i=0;i<16;i++)//循環16次將一個字上移16次

        {

        shang1();//調用顯示

        word+=1;

        }

        for(i=0;i<150;i++)//上移完一個字后,停留一段時間,從而形成上拉

        shang1();

        }

        }

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

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

        /**************************下拉函數***************************/

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

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

        /********************顯示一個字子程序************************/

        void xia1()

        {

        ji=word;

        for(line=0;line<16;line++)//循環16次顯示一個字

        {

        song(~table1[ji*2+1]);

        song(~table1[ji*2]);

        ji++;

        CLKR=1;//在74HC595處鎖存起來

        CLKR=0;

        CLKR=1;

        LINE=line;

        delay(3);

        }

        }

        /********************將一個字上移16次形成下拉子程序************************/

        void xiala()

        {

        uchar i;

        while(word>1)

        {

        for(i=0;i<16;i++)//將一個字下位16次

        {

        xia1();//調用顯示子程序

        word-=1;//下拉1位

        }

        for(i=0;i<150;i++)//下拉16次后停下來

        xia1();//調用顯示

        }

        }

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

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

        /**************************左拉子函數************************/

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

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

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

        /*將一行數據轉換出來,然后顯示*/

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

        void yipai2()

        {

        uchar temp,yi;

        if(move<8)//處理移動次數小于8次的部分

        {

        yi=move;

        temp=(BUF[1]<>(8-yi));/*將第1個字的右半屏數左移yi次,

        然后或上第2個字左半屏的8-yi次數,注此句是處理右半屏的數*/

        song(~temp);//發送給74HC595

        temp=(BUF[0]<>(8-yi));/*將第1個字的左半屏數左移yi次,

        然后或上第1個字右半屏的8-yi次數,注此句是處理左半屏的數*/

        song(~temp);//發送給74HC595

        }

        else//處理移動次數小于8次以外的部分

        {

        yi=move-8;

        temp=(BUF[2]<>(8-yi));//原理同上

        song(~temp);//發送給74HC595

        temp=(BUF[1]<>(8-yi));//原理同上

        song(~temp);//發送給74HC595

        }

        }

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

        /*******將一個字移一位***********/

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

        void zou3()

        {

        for(line=0;line<16;line++)//掃描16次,即完成一個字的移動

        {

        yixian();//調用一線子程序

        yipai2();//調用數據轉換子程序

        LINE=line;//打開行線,即174HC154行線端

        CLKR=1;//在74HC595處鎖存起來

        CLKR=0;

        CLKR=1;

        }

        }

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

        /*將一個左移16次,形成一個字左拉***/

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

        void zoula()

        {

        uchar x;

        while(word<256)

        {

        for(move=0;move<16;move++)//要移多少位?

        zou3();

        for(x=0;x<150;x++)

        zou3();

        word=word+32;//一個字顯示完了,就顯示下一個字

        }

        }

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

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

        /**************************右拉子函數***************************/

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

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

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

        /*將一行數據轉換出來,然后顯示*/

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

        void yipai3()

        {

        uchar temp,yi;

        if(move<8)//處理移動次數小于8次的部分

        {

        yi=move;//小于8次就直接給移動的次數

        temp=(BUF[0]<<(8-yi))|(BUF[1]>>yi);/*將第1個字的左半屏數左移8-yi次,

        然后或上右半屏的yi次數,注此句是處理右半屏的數*/

        song(~temp);//發送給74HC595

        temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);/*將第2個字的右半屏數與第1個字左

        半屏的數左移8-yi次,然后或上右半屏的yi次數,注此句是處理左半屏的數*/

        song(~temp);//發送給74HC595

        }

        else//處理移動次數小于8次以外的部分

        {

        yi=move-8;//不小于8次就給move-8次給變量

        temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);/*將第2個字的右半屏數左移8-yi次,

        然后或上第1個字左半屏的yi次數,注此句是處理右半屏的數*/

        song(~temp);//發送給74HC595

        temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);/*將第2個字的左半屏數左移8-yi次,

        然后或上第2個字的右半屏的yi次數,注此句是處理左半屏的數*/

        song(~temp);//發送給74HC595

        }

        }

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

        /*******將一個字移一位***********/

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

        void you3()

        {

        for(line=0;line<16;line++)//掃描16次,即完成一個字的移動

        {

        yixian();//調用一線子程序

        yipai3();//調用數據轉換子程序

        LINE=line;//打開行線,即174HC154行線端

        CLKR=1;//在74HC595處鎖存起來

        CLKR=0;

        CLKR=1;

        }

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 卫辉市| 屏边| 聊城市| 阳高县| 丰镇市| 蒙山县| 哈尔滨市| 江永县| 沿河| 大兴区| 林西县| 颍上县| 璧山县| 湘潭市| 涟源市| 武宣县| 上蔡县| 黎川县| 武邑县| 永济市| 中宁县| 浪卡子县| 浠水县| 鹤岗市| 峨眉山市| 雅安市| 杭锦后旗| 临猗县| 新乡县| 军事| 惠安县| 华池县| 廉江市| 黄陵县| 太仓市| 上高县| 灵川县| 石渠县| 石嘴山市| 门源| 句容市|