新聞中心

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

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

        作者: 時間:2016-11-29 來源:網(wǎng)絡 收藏

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

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

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

        void youla()

        {

        uchar i;

        while(word<256)

        {

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

        you3();

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

        you3();

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

        }

        }

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

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

        /**************************左覆蓋***************************/

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

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

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

        /*將一行數(shù)據(jù)轉換出來,然后顯示*/

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

        void yipai5()

        {

        uchar temp,yi;

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

        {

        yi=move;

        temp=(BUF[1]);//發(fā)送左半屏的數(shù),在移動右半屏時,左半屏不動

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

        temp=(BUF[2]&~gai)|(BUF[0]&gai);

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

        }

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

        {

        yi=move-8;

        temp=(BUF[3]&~gai)|(BUF[1]&gai);/*將第1個字的左半屏數(shù)第0列清0或上第二

        個字左半屏最后1行*/

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

        temp=BUF[2];//發(fā)送右半屏的數(shù),在移動左半屏時,右半屏不動

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

        }

        }

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

        /*****掃描16次,形成一列覆蓋*****/

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

        void fu3()

        {

        uchar i;

        for(i=0;i<2;i++)//一字移動的速度

        {

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

        {

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

        yipai5();//調用數(shù)據(jù)轉換子程序

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

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

        CLKR=0;

        CLKR=1;

        }

        }

        }

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

        /***每列移動16次后,形成覆蓋****/

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

        void zoufu()

        {

        uchar o;

        while(word<256)

        {

        for(move=0;move<16;move++)//移動16次,形成覆蓋

        {

        gai=table3[move];//移動一次改變一次覆蓋變量

        fu3();//調用覆蓋子程序

        }

        for(o=0;o<60;o++)//一字完后,停一段時間

        {

        fu3();//調用覆蓋子程序

        }

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

        }

        }

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

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

        /**************************右覆蓋***************************/

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

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

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

        /*將一行數(shù)據(jù)轉換出來,然后顯示*/

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

        void yipai4()

        {

        uchar temp,yi;

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

        {

        yi=move;

        temp=(BUF[1]&gai)|(BUF[3]&~gai);/*將第1個字的右半屏數(shù)第0列清0或上第二

        個字右半屏最后1行*/

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

        temp=(BUF[0]);//發(fā)送左半屏的數(shù),在移動右半屏時,左半屏不動

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

        }

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

        {

        yi=move-8;

        temp=BUF[3];//發(fā)送右半屏的數(shù),在移動左半屏時,右半屏不動

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

        temp=(BUF[0]&gai)|(BUF[2]&~gai);/*將第1個字的左半屏數(shù)第0列清0或上第二

        個字左半屏最后1行*/

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

        }

        }

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

        /*****掃描16次,形成一列覆蓋*****/

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

        void fu2()

        {

        uchar i;

        for(i=0;i<2;i++)//一字移動的速度

        {

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

        {

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

        yipai4();//調用數(shù)據(jù)轉換子程序

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

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

        CLKR=0;

        CLKR=1;

        }

        }

        }

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

        /***每列移動16次后,形成覆蓋****/

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

        void youfu()

        {

        uchar o;

        while(word<256)

        {

        for(move=0;move<16;move++)//移動16次,形成覆蓋

        {

        gai=table2[move];//移動一次改變一次覆蓋變量

        fu2();//調用覆蓋子程序

        }

        for(o=0;o<60;o++)//一字完后,停一段時間

        {

        fu2();//調用覆蓋子程序

        }

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

        }

        }

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

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

        /**************************主函數(shù)***************************/

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

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

        void main()

        {

        while(1)

        {

        word=0;//初始化變量

        jian();//間斷顯示子程序

        word=0;

        shang();//調用上移子程序

        word=128;//賦初值以便形成下移

        xia();//調用下移子程序

        word=0;

        zou();//調用左移子程序

        word=0;

        you();//調用右移子程序

        word=0;

        shangla();//調用上拉子程序

        word=128;

        xiala();//調用下拉子程序

        word=0;

        zoula();//調用左拉子程序

        word=0;

        youla();//調用右拉子程序

        word=0;

        zoufu();//調用左覆蓋子程序

        word=0;

        youfu();//調用右覆蓋子程序

        }

        }


        上一頁 1 2 3 下一頁

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 阿克| 康定县| 鄂托克前旗| 彭阳县| 吐鲁番市| 盐城市| 东源县| 仁寿县| 麻栗坡县| 同德县| 宁乡县| 阜康市| 额尔古纳市| 呼伦贝尔市| 长丰县| 濮阳市| 霍林郭勒市| 青岛市| 长治市| 玛沁县| 浦北县| 西乌珠穆沁旗| 灵丘县| 武功县| 龙山县| 呼伦贝尔市| 宁强县| 拜泉县| 贡嘎县| 阿尔山市| 安顺市| 青铜峡市| 东丰县| 儋州市| 汽车| 宿松县| 永顺县| 平南县| 广东省| 汝南县| 钟山县|