<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

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

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

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

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

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

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

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

          void yixian()

          {

          uchar s;

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

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

          {

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

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

          }

          }

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

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

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

          void yipai()

          {

          uchar temp,yi;

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

          {

          yi=move;

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

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

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

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

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

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

          }

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

          {

          yi=move-8;

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

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

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

          song(~temp);//發(fā)送給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();//調(diào)用一線子程序

          yipai();//調(diào)用數(shù)據(jù)轉(zhuǎn)換子程序

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

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

          CLKR=0;

          CLKR=1;

          }

          }

          }

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

          }

          }

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

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

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

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

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

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

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

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

          void yipai1()

          {

          uchar temp,yi;

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

          {

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

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

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

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

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

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

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

          }

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

          {

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

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

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

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

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

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

          song(~temp);//發(fā)送給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();//調(diào)用一線子程序

          yipai1();//調(diào)用數(shù)據(jù)轉(zhuǎn)換子程序

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

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

          CLKR=0;

          CLKR=1;

          }

          }

          }

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

          }

          }

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

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

          /*************************上拉子函數(shù)**************************/

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

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

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

          /***********顯示一個整體字子函數(shù)***********/

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

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

          {

          ji=word;//將變量給計數(shù)器

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

          {

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

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

          ji++;//取下一行數(shù)

          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++)//循環(huán)16次將一個字上移16次

          {

          shang1();//調(diào)用顯示

          word+=1;

          }

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

          shang1();

          }

          }

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

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

          /**************************下拉函數(shù)***************************/

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

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

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

          void xia1()

          {

          ji=word;

          for(line=0;line<16;line++)//循環(huán)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();//調(diào)用顯示子程序

          word-=1;//下拉1位

          }

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

          xia1();//調(diào)用顯示

          }

          }

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

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

          /**************************左拉子函數(shù)************************/

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

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

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

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

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

          void yipai2()

          {

          uchar temp,yi;

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

          {

          yi=move;

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

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

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

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

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

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

          }

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

          {

          yi=move-8;

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

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

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

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

          }

          }

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

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

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

          void zou3()

          {

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

          {

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

          yipai2();//調(diào)用數(shù)據(jù)轉(zhuǎn)換子程序

          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;//一個字顯示完了,就顯示下一個字

          }

          }

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

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

          /**************************右拉子函數(shù)***************************/

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

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

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

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

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

          void yipai3()

          {

          uchar temp,yi;

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

          {

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

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

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

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

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

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

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

          }

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

          {

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

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

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

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

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

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

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

          }

          }

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

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

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

          void you3()

          {

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

          {

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

          yipai3();//調(diào)用數(shù)據(jù)轉(zhuǎn)換子程序

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

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

          CLKR=0;

          CLKR=1;

          }

          }



          關(guān)鍵詞: 單片機驅(qū)動點陣16*1

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();