找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 1812|回復(fù): 4
收起左側(cè)

4個16*16點陣led顯示半幅偏移 各位單片機大佬求幫助

[復(fù)制鏈接]
ID:892657 發(fā)表于 2021-3-17 22:24 | 顯示全部樓層 |閱讀模式
51hei圖片20210317222206.png
附件有原理圖

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char            
  4. #define uint  unsigned int
  5. uchar code num[4][32]={   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,
  6. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"一",0*/

  7. {0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  8. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},/*"二",1*/

  9. {0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
  10. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00},/*"三",2*/

  11. {0x00,0x00,0x00,0x00,0x7F,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,
  12. 0x48,0x44,0x48,0x3C,0x50,0x04,0x60,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00},/*"四",3*/
  13. };
  14. uchar idata num_temp[16][8];   //數(shù)據(jù)緩存,用于移位                                                                                          
  15. uchar b[8];                   //16*16點陣,每次發(fā)送1個字節(jié)。用b[8]保存
  16. int n1=0;
  17. uchar zuoyou=0;
  18. uchar hanzi;
  19. sbit EN=P1^0;                                         //74hc154的使能端
  20. sbit A_R=P2^0;                 //A B C D每位數(shù)據(jù)對應(yīng)于74hc154的4個數(shù)據(jù)口
  21. sbit B_R=P2^1;                                         
  22. sbit C_R=P2^2;                                       
  23. sbit D_R=P2^3;

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

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

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

  90. //左移
  91. void column_youyi(int n)         
  92. {
  93.    int i,j,e=0,f;
  94. uchar a1,b1;
  95. for(i=7;i>=0;i--){
  96.          if(i!=0)
  97.          {
  98.        f=num_temp[n][i-1]&0x01;
  99.          }
  100.          else
  101.          {
  102.            f=0;
  103.          }
  104.          num_temp[n]>>=1;
  105.          if(f)
  106.          {
  107.            num_temp[n]=num_temp[n]+0x80;
  108.          }               
  109.      b1=num_temp[n];
  110.          for(j=0;j<8;j++){
  111.            a1=0x01;
  112.               SRC_C=0;
  113.            DATA_C=b1&a1;
  114.               b1>>=1;
  115.               SRC_C=1;
  116.          }
  117.    }
  118. }
  119. //靜止
  120. void column_stop(int n)           
  121. {
  122.   inti,j;
  123. uchar a1,b1;
  124.   
  125. for(i=7;i>=0;i--){              
  126.      b1=num_temp[n];
  127.          for(j=0;j<8;j++){
  128.            a1=0x01;
  129.               SRC_C=0;
  130.            DATA_C=b1&a1;
  131.               b1>>=1;
  132.               SRC_C=1;
  133.          }
  134.    }
  135. }
  136. /**********************************************
  137. 函數(shù)功能:行掃描程序,16次為1個周期,利用154的譯碼器
  138. 入口參數(shù):無
  139. 返回值: 無
  140. ***********************************************/
  141. void column_16()
  142. {
  143.   inti,j=0;
  144. char temp=0x00;
  145.                                                //這里輸入行數(shù)據(jù)en打開
  146. n1++;
  147.                                //對應(yīng)16行數(shù)據(jù)
  148. for(i=0;i<16;i++)
  149.   {   
  150.          switch(zuoyou)
  151.   {
  152.    case 0:
  153.         if(hanzi==0)
  154.           {
  155.              hanziku();
  156.           }
  157.           hanzi++;
  158.           column_stop[i];
  159.           break;
  160.         case 1:
  161.           column_zuoyi[i];
  162.           hanzi=0;
  163.           break;
  164.         case 2:
  165.           if(hanzi==0)
  166.           {
  167.              hanziku();
  168.           }
  169.           hanzi++;
  170.           column_stop[i];
  171.           break;
  172.         case 3:
  173.           column_youyi[i];
  174.           hanzi=0;
  175.           break;
  176.   }
  177.   if(n1==70)
  178.   {
  179.    n1=0;
  180.        zuoyou++;
  181.        if(zuoyou==4)
  182.        {
  183.          zuoyou=0;
  184.        }
  185.   }  
  186. EN=0;   
  187.    //每一行的數(shù)據(jù)
  188.    P2=temp++;          //P2從0000開始到1111
  189.    SLC_595();  
  190.   }
  191. }  
  192. int main()
  193. {
  194.   inti=0;
  195. EN=1;              //154使能端關(guān)上
  196. SRC_C=0;               //595初始化
  197. SLC_C=0;
  198. hanziku();            //初始化漢字庫
  199. while(1){
  200.   column_16();
  201.   delay(5);
  202.   EN=1;                       
  203.   }
  204. }
復(fù)制代碼


新建文件夾.zip

52.64 KB, 下載次數(shù): 7

回復(fù)

使用道具 舉報

ID:892657 發(fā)表于 2021-3-17 22:26 | 顯示全部樓層
我是代碼有什么問題么  有沒有大佬幫忙改一下
回復(fù)

使用道具 舉報

ID:100826 發(fā)表于 2021-3-18 08:06 | 顯示全部樓層
帶仿真的 希望能幫到你

點陣多種移動模式.zip

255.33 KB, 下載次數(shù): 21

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:390416 發(fā)表于 2021-3-18 09:46 | 顯示全部樓層
LED16x16點陣 89單片機+四個74HC595的 程序源碼原理圖 http://www.torrancerestoration.com/bbs/dpj-200961-1.html
回復(fù)

使用道具 舉報

ID:89515 發(fā)表于 2021-3-18 15:14 來自手機 | 顯示全部樓層
反正是仿真,你改第四塊電路看看啊,排除法嘛。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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