找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12635|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

16*64點(diǎn)陣左右移動(dòng)程序顯示漢字 數(shù)字 英文等 帶Proteus仿真 取模軟件等

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

單片機(jī)16乘64點(diǎn)陣的所有制作資料打包下載(Proteus仿真 程序 取模軟件):
16X64點(diǎn)陣左右移動(dòng)模式.rar (1.53 MB, 下載次數(shù): 309)

先來一個(gè)視頻:


在做16*64 ;蛘16*16 16*32  等點(diǎn)陣的時(shí)候遇到一個(gè)小問題。
就是漢字是16*16的規(guī)格。但是數(shù)字和英文字符那些都是8*16的規(guī)格
程序掃描算法是按照漢字的規(guī)格掃描的。如果出現(xiàn)8*16的。就會(huì)亂碼。
如果要改變掃描算法識(shí)別8*16的。那么漢字就會(huì)亂碼、
如果要同時(shí)識(shí)別漢字和數(shù)字,那么掃描算法就有點(diǎn)復(fù)雜。我有心無力、。
所以編寫了個(gè)小軟件,重組下數(shù)組。
具體操作請看視頻
左移




右移


小軟件



視頻比較模糊.大家將就下,把視頻錄到的文件貼上來.大家對著看就懂了
源程序預(yù)覽:
  1. #include<reg52.h>
  2. #include"MacroAndConst.h"
  3. #include"delay.h"
  4. #include"display.h"
  5. #include"ziku.h"

  6. extern bit fLeftFlag;  //聲明外部變量
  7. extern bit fRightFlag;        //聲明外部變量
  8. uchar scan;
  9. uchar speed=2;        //設(shè)定移動(dòng)速度
  10. uint words;                //字模計(jì)數(shù)器
  11. uchar move;                //列指針
  12. uchar line;                //行指針
  13. uchar temp;
  14. uchar BUFF[10];        //緩存數(shù)組
  15. sbit ST=P3^5;        //595 STR
  16. sbit SH=P3^6;  //595 CLK
  17. sbit DATA=P3^7;        //595 DATAS

  18. /**********************************************************
  19. 函數(shù)名稱:LeftflowDisplay
  20. 函數(shù)功能:左移顯示函數(shù)
  21. 入口參數(shù):無  
  22. 出口參數(shù):無
  23. 備  注:
  24. **********************************************************/
  25. void LeftflowDisplay()                //逐行 陰碼 逆向
  26. {
  27.         uchar sp,y=0;
  28.         move=0;
  29.         words=0;
  30.                 while(words<46*32)                //
  31.                 {        
  32.                          if(fLeftFlag==1)
  33.                         {
  34.                                 while(move<16)        //數(shù)據(jù)移位
  35.                                 {        
  36.                                         if(fLeftFlag==1)
  37.                                         {        
  38.                                        
  39.                                                 for(sp=0;sp<speed;sp++)        //移動(dòng)速度
  40.                                                 {        
  41.                                                         if(fLeftFlag==1)
  42.                                                         {
  43.                                                                 for(line=0;line<16;line++)        //行掃描
  44.                                                                 {
  45.                                                                         loadline1();        //裝載一線點(diǎn)陣數(shù)據(jù)
  46.                                                                         sendline1();        //發(fā)送一線移動(dòng)數(shù)據(jù)
  47.                                                                         scan=line;        //顯示第line行
  48.                                                                         P2=scan;
  49.                                                                         ST=1;                //鎖存為高,595鎖存信號
  50.                                                                         ST=0;
  51.                                                                         delay_10us(50);        //延時(shí)500us,等待一段時(shí)間,產(chǎn)生視覺暫留
  52.                                                                 }
  53.                                                         }
  54.                                                         else
  55.                                                         break;
  56.                                                 }
  57.                                                 move=move+1;                //移動(dòng)一步(一位)
  58.                                         }
  59.                                         else
  60.                                         break;
  61.                                 }
  62.                                 move=0;
  63.                                 words=words+32;        //下一個(gè)字
  64.                         }
  65.                         else
  66.                         break;
  67.                 }
  68.                 words=0;
  69.         }
  70. /**********************************************************
  71. 函數(shù)名稱:loadline1
  72. 函數(shù)功能:裝載點(diǎn)陣數(shù)據(jù)        緩存
  73. 入口參數(shù):無  
  74. 出口參數(shù):無
  75. 備  注:
  76. **********************************************************/

  77. void loadline1()
  78. {
  79.         uchar s;
  80.         for(s=0;s<5;s++)        //s為要顯示的字?jǐn)?shù)+1(顯示4字+1=5)
  81.         {
  82.                 BUFF[2*s]=zuoyi[words+ 32*s + 2*line];
  83.                 BUFF[2*s+1]=zuoyi[words+1+ 32*s + 2*line];
  84.                
  85.                
  86.         }
  87. }
  88. /**********************************************************
  89. 函數(shù)名稱:sendline1
  90. 函數(shù)功能:發(fā)送點(diǎn)陣數(shù)據(jù)        緩存
  91. 入口參數(shù):無  
  92. 出口參數(shù):無
  93. 備  注:
  94. **********************************************************/
  95. void sendline1()
  96. {
  97.         uchar s;
  98.         uchar inc,temp,tempcol;
  99.         uchar  k;
  100.         DATA=1;
  101.         if(move<8) inc=0;
  102.         else inc=1;
  103.         for(s=0+inc;s<=7+inc;s++)
  104.         {
  105.                 if(move<8)
  106.                         tempcol=move;
  107.                 else
  108.                         tempcol=move-8;
  109.                 temp=(BUFF[s]>>tempcol)|(BUFF[s+1]<<(8-tempcol));        //字模左邊字節(jié)右移tempcol位,右邊字節(jié)左移8-tempcol位,2者相或
  110.                 for(k=0;k<8;k++)
  111.               {
  112.                       SH=0;
  113.                         DATA=(bit)(temp&0x80);
  114.                        temp=temp<<1;
  115.                       SH=1;
  116.            }
  117.         }
  118. }
  119. /**********************************************************
  120. 函數(shù)名稱:RightflowDisplay
  121. 函數(shù)功能:右移顯示函數(shù)
  122. 入口參數(shù):無  
  123. 出口參數(shù):無
  124. 備  注:
  125. **********************************************************/
  126. void RightflowDisplay()        //流動(dòng)右移         逐行 陰碼 順向
  127. {
  128.         uchar i;
  129.         move=0;
  130.         words=0;
  131.         while(words<=46*32)          //數(shù)組元素。46組,每組32個(gè)
  132.         {        
  133.                 if(fRightFlag==1)
  134.             {
  135.                         while(move<16)// 循環(huán)16次,點(diǎn)亮并移動(dòng)一個(gè)漢字
  136.                         {         
  137.                                 if(fRightFlag==1)
  138.                                 {
  139.                                         for(i=0;i<speed;i++)//漢字在屏幕上的停留時(shí)間(即移動(dòng)速度快慢)
  140.                                         {
  141.                                                 if(fRightFlag==1)
  142.                                                 {
  143.                                                         for(line=0;line<16;line++)//掃描16行                        
  144.                                                         {
  145.                                                                 loadoneline();//裝載一線點(diǎn)陣數(shù)據(jù)
  146.                                                                 sendoneline();//發(fā)送一線點(diǎn)陣數(shù)據(jù)
  147.                                                                 P2=line;                 
  148.                                                             ST= 0;
  149.                                                                 ST= 1;
  150.                                                             delay_10us(50); //延時(shí)500us,等待一段時(shí)間,產(chǎn)生視覺暫留                                                              
  151.                                                         }
  152.                                                  }
  153.                                                  else
  154.                                                  break;
  155.                                         }
  156.                                         move++;        //列指針遞增
  157.                                 }
  158.                                 else
  159.                                 break;                        
  160.                         }
  161.                         move=0;
  162.                         words=words+32;// 一個(gè)漢字移動(dòng)后,指向下一個(gè)漢字         
  163.                 }
  164.                 else
  165.                 break;

  166.         }
  167.         words=0;
  168. }
  169. /**********************************************************
  170. 函數(shù)名稱:loadoneline
  171. 函數(shù)功能:裝載點(diǎn)陣數(shù)據(jù)        緩存
  172. 入口參數(shù):無  
  173. 出口參數(shù):無
  174. 備  注:
  175. **********************************************************/
  176. void loadoneline()
  177. {
  178.         uchar s;        
  179.     for(s=0;s<5;s++)              //s為要顯示的數(shù)字+1
  180.                 {
  181.                         BUFF[2*s+1]=youyi[words+32*s+2*line];
  182.                         BUFF[2*s]=youyi[words+1+32*s+2*line];//~
  183.                 }
  184. }
  185. /**********************************************************
  186. 函數(shù)名稱:sendoneline
  187. 函數(shù)功能:發(fā)送點(diǎn)陣數(shù)據(jù)        緩存
  188. 入口參數(shù):無  
  189. 出口參數(shù):無
  190. 備  注:
  191. **********************************************************/
  192. void sendoneline()
  193. {
  194.         char s;
  195.         uchar inc,k,tempcol;
  196.         if(move<8)
  197.                 inc=0;
  198.         else
  199.                 inc=1;      
  200.         for(s=7+inc;s>=0+inc;s--)
  201.                 {
  202.                         if(move<8)
  203.                                 tempcol=move;
  204.                         else
  205.                                 tempcol=move-8;
  206.                                 temp=(BUFF[s]>>tempcol)|(BUFF[s+1]<<(8-tempcol));
  207.                         for(k=0;k<8;k++)
  208.                              {        
  209.                               SH=0;
  210.                                 DATA=(bit)(temp&0x01);
  211.                                temp=temp>>1;
  212.                               SH=1;
  213.                           }
  214.                 }
  215. }
復(fù)制代碼






評分

參與人數(shù) 1黑幣 +5 收起 理由
Asher0120 + 5 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:112441 發(fā)表于 2016-4-7 16:38 | 只看該作者
樓主,感覺左移的時(shí)候字有點(diǎn)抖動(dòng)啊,還有我換成自己的字摸后有逗號,第一遍顯示正常,第二遍就亂碼了。。求助樓主
回復(fù)

使用道具 舉報(bào)

板凳
ID:196241 發(fā)表于 2017-5-4 20:16 | 只看該作者
真的太棒了,不過有沒有總程序啊   
回復(fù)

使用道具 舉報(bào)

地板
ID:201741 發(fā)表于 2017-5-17 13:13 | 只看該作者
真的太棒了,不過有沒有總程序啊   
回復(fù)

使用道具 舉報(bào)

5#
ID:260250 發(fā)表于 2017-12-11 21:22 | 只看該作者
學(xué)習(xí)中,幫助大大的。謝謝
回復(fù)

使用道具 舉報(bào)

6#
ID:34063 發(fā)表于 2018-2-6 19:31 | 只看該作者
好,學(xué)習(xí)有邦助
回復(fù)

使用道具 舉報(bào)

7#
ID:436428 發(fā)表于 2018-11-30 12:00 來自手機(jī) | 只看該作者
請問這個(gè)程序完整嘛,可以直接用嗎
回復(fù)

使用道具 舉報(bào)

8#
ID:83626 發(fā)表于 2019-1-30 07:35 | 只看該作者
下來改改測試一下,
回復(fù)

使用道具 舉報(bào)

9#
ID:522355 發(fā)表于 2019-4-29 22:14 | 只看該作者
樓主哇,這個(gè)程序有點(diǎn)復(fù)雜,有沒有在一個(gè).c里的程序呢?我這種新手看不太懂求幫助
回復(fù)

使用道具 舉報(bào)

10#
ID:391819 發(fā)表于 2020-3-15 21:40 | 只看該作者
顯示的緩沖區(qū)的數(shù)據(jù)不能在程序時(shí)時(shí)更新,不太方便。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表