找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)16*64的點(diǎn)陣屏程序 為什么滾動(dòng)顯示的時(shí)候會(huì)有重影 求幫助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:892657 發(fā)表于 2021-4-13 06:12 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char        
  4. #define uint  unsigned int
  5. uchar code num[4][32]={  {0xFE,0xFF,0xFE,0xFB,0x00,0x01,0xFE,0xFF,0xFD,0xFF,0xC0,0x03,0xDB,0xDB,0xDD,0xBB,0xD0,0x0B,0xDE,0xFB,0xC0,                                                                            0x03,0xDE,0xFB,0xDE,0xFB,0xDE,0xEB,0xDE,0xF7,0xFF,0xFF},/*"南",0*/
  6.                         {0xFD,0xFF,0xFE,0xF7,0x80,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xFE,0xFF,0xF6,                                                                             0xCF,0xE6,0xE7,0xCE,0xF3,0xBE,0xF7,0xFA,0xFF,0xFD,0xFF},/*"京",1*/
  7.                          {0xFF,0xFF,0xC0,0x03,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,                                                                           0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFF,0xFF,0xFF,0xFF},/*"工",2*/


  8.                          {0xF2,0x07,0x8E,0xF7,0xEE,0xF7,0xEE,0xF7,0x02,0xF7,0xEE,0x07,0xCF,0xFF,0xC4,0x03,0xAB,0xBF,0xAF,0xBF,0x6C,                                                                       0x03,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xE8,0x01,0xEF,0xFF}/*"程",3*/
  9. };
  10. uchar idatanum_temp[16][8];   //數(shù)據(jù)緩存,用于移位                                                                           
  11. uchar b[8];                   //16*16點(diǎn)陣,每次發(fā)送1個(gè)字節(jié)。用b[8]保存
  12. int n1=0;
  13. uchar zuoyou=0;
  14. uchar hanzi;
  15. sbit EN=P1^0;                   //74hc154的使能端
  16. sbit A_R=P2^0;                 //A B C D每位數(shù)據(jù)對(duì)應(yīng)于74hc154的4個(gè)數(shù)據(jù)口
  17. sbit B_R=P2^1;                     
  18. sbit C_R=P2^2;                     
  19. sbit D_R=P2^3;


  20. sbit RST_C=P1^1;                //74hc595的復(fù)位口                     
  21. sbit DATA_C=P3^2;               //串行數(shù)據(jù)口
  22. sbit SRC_C=P3^3;                //74hc595的寄存器時(shí)鐘線
  23. sbit SLC_C=P3^4;                //74hc595的鎖存器的時(shí)鐘線


  24. /*************************************
  25.   函數(shù)功能:延時(shí)程序
  26. **************************************/
  27. void delay(int i)
  28. {      
  29.   int a;
  30.   for(a=0;a<i;a++);
  31. }
  32. /**************************************************************
  33.   函數(shù)功能: 595在SLC上升沿的時(shí)候并行輸出到寄存器下的8位數(shù)據(jù)
  34.   入口參數(shù):無
  35.   返回值  :無
  36. **************************************************************/
  37. void SLC_595()
  38. {  
  39.    SLC_C=0;
  40.    SLC_C=1;
  41.    SLC_C=0;  
  42. }
  43. /**************************************************************
  44. 函數(shù)功能:往num_temp[16][8]暫存器下存儲(chǔ)數(shù)據(jù)  16對(duì)應(yīng)著16個(gè)字節(jié)   
  45. *************************************************************/
  46. void hanziku()
  47. {
  48.    int i,j=0,k;
  49.    for(i=0;i<16;i++){
  50.    b[0]=num[0][j];b[2]=num[1][j];b[4]=num[2][j];b[6]=num[3][j];
  51.     j++;
  52.     b[1]=num[0][j];b[3]=num[1][j];b[5]=num[2][j];b[7]=num[3][j];
  53.     j++;
  54.     for(k=7;k>=0;k--){
  55.       num_temp[i][k]=b[k]; [/i][i]
  56.     }
  57.   }
  58. }


  59. /*******************************************************************
  60.   函數(shù)功能: 595輸出列向的數(shù)據(jù)64個(gè)(8位為一字節(jié),那就是8字節(jié)的數(shù)據(jù))
  61.   入口參數(shù): 無
  62.   返回值  :無
  63. *******************************************************************/
  64. //右移
  65. void column_zuoyi(int n)      
  66. {
  67.   int i,j,e=0,f;
  68.   uchar a1,b1;
  69.   for(i=7;i>=0;i--){
  70.       f=e;
  71.      e=num_temp[n][i]&0x80;[/i][i]
  72.       num_temp[n][i]<<=1;[/i][i]
  73.       if(f){
  74.        num_temp[n][i]=num_temp[n][i]+0x01;[/i][/i][i][i]
  75.       }               
  76.       b1=num_temp[n][i];[/i][i]
  77.       for(j=0;j<8;j++){
  78.         a1=0x01;
  79.        SRC_C=0;
  80.         DATA_C=b1&a1;
  81.        b1>>=1;
  82.        SRC_C=1;
  83.       }
  84.    }
  85. }


  86. //左移
  87. void column_youyi(int n)      
  88. {
  89.     int i,j,e=0,f;
  90.   uchar a1,b1;
  91.   for(i=7;i>=0;i--){
  92.       if(i!=0)
  93.       {
  94.         f=num_temp[n][i-1]&0x01;
  95.       }
  96.       else
  97.       {
  98.         f=0;
  99.       }
  100.       num_temp[n][i]>>=1;[/i][i]
  101.       if(f)
  102.       {
  103.        num_temp[n][i]=num_temp[n][i]+0x80;[/i][/i][i][i]
  104.       }         
  105.       b1=num_temp[n][i];[/i][i]
  106.       for(j=0;j<8;j++){
  107.         a1=0x01;
  108.        SRC_C=0;
  109.         DATA_C=b1&a1;
  110.        b1>>=1;
  111.        SRC_C=1;
  112.       }
  113.    }
  114. }
  115. //靜止
  116. void column_stop(int n)        
  117. {
  118.   int i,j;
  119.   uchar a1,b1;


  120.   for(i=7;i>=0;i--){      
  121.       b1=num_temp[n][i];[/i][i]
  122.       for(j=0;j<8;j++){
  123.         a1=0x01;
  124.        SRC_C=0;
  125.         DATA_C=b1&a1;
  126.        b1>>=1;
  127.        SRC_C=1;
  128.       }
  129.    }
  130. }
  131. /**********************************************
  132. 函數(shù)功能:行掃描程序,16次為1個(gè)周期,利用154的譯碼器
  133. 入口參數(shù):無
  134. 返回值:  無
  135. ***********************************************/
  136. void column_16()
  137. {
  138.   int i,j=0;
  139.   char temp=0x00;
  140.                                 //這里輸入行數(shù)據(jù)en打開
  141.   n1++;
  142.                                //對(duì)應(yīng)16行數(shù)據(jù)
  143.   for(i=0;i<16;i++)
  144.   {   
  145.       switch(zuoyou)
  146.   {
  147.     case 0:
  148.      if(hanzi==0)
  149.        {
  150.           hanziku();
  151.        }
  152.        hanzi++;
  153.        column_stop(i);
  154.        break;
  155.      case 1:
  156.        column_zuoyi(i);
  157.        hanzi=0;
  158.        break;
  159.      case 2:
  160.        if(hanzi==0)
  161.        {
  162.           hanziku();
  163.        }
  164.        hanzi++;
  165.        column_stop(i);
  166.        break;
  167.      case 3:
  168.        column_youyi(i);
  169.        hanzi=0;
  170.        break;
  171.   }
  172.    if(n1==70)
  173.   {
  174.     n1=0;
  175.     zuoyou++;
  176.     if(zuoyou==4)
  177.     {
  178.       zuoyou=0;
  179.     }
  180.   }
  181. EN=0;  
  182.    //每一行的數(shù)據(jù)
  183.     P2=temp++;          //P2從0000開始到1111
  184.     SLC_595();
  185.   }
  186. }  
  187. int main()
  188. {
  189.   int i=0;
  190.   EN=1;              //154使能端關(guān)上
  191.   SRC_C=0;          //595初始化
  192.   SLC_C=0;
  193.   hanziku();       //初始化漢字庫
  194.   while(1){
  195.    column_16();
  196.    delay(5);
  197.    EN=1;            
  198.   }
  199. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:332444 發(fā)表于 2021-4-13 08:16 | 只看該作者
需要消隱處理,同數(shù)碼管需要消隱一樣道理。
回復(fù)

使用道具 舉報(bào)

板凳
ID:390416 發(fā)表于 2021-4-13 09:16 | 只看該作者
數(shù)據(jù)發(fā)送到595后,先關(guān)閉ABCD,然后再讓595輸出數(shù)據(jù)到點(diǎn)陣LED。其實(shí)單獨(dú)用595也可以驅(qū)動(dòng),可以參考我的貼子
回復(fù)

使用道具 舉報(bào)

地板
ID:723547 發(fā)表于 2021-4-13 09:30 | 只看該作者
在顯示下一次數(shù)據(jù)前,把數(shù)據(jù)口清空
回復(fù)

使用道具 舉報(bào)

5#
ID:892657 發(fā)表于 2021-4-13 15:58 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2021-4-13 09:16
數(shù)據(jù)發(fā)送到595后,先關(guān)閉ABCD,然后再讓595輸出數(shù)據(jù)到點(diǎn)陣LED。其實(shí)單獨(dú)用595也可以驅(qū)動(dòng),可以參考我的貼子

大佬 參考你哪個(gè)帖子
回復(fù)

使用道具 舉報(bào)

6#
ID:892657 發(fā)表于 2021-4-13 17:32 | 只看該作者
具體應(yīng)該怎么改代碼 求幫助
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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