找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2465|回复: 2
打印 上一主题 下一主题
收起左侧

16*32LED点阵屏左移的程序请大神指教

[复制链接]
跳转到指定楼层
楼主
ID:493146 发表于 2019-6-5 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近抄了一个LED点阵屏左移的程序16*32,用的138和595,可是在定义字模数组的时候只能定义5个字,多于5个字就没有显示,五个字以内就正常,请
大神们给予指点,
以下是源程序
  1. #include<STC12C5A60S2.h>            
  2. #include <intrins.h>
  3. typedef unsigned char         uchar;
  4. typedef unsigned int          uint;
  5. sbit SDA_G =P4^1; //                                      
  6. sbit SDA_R =P4^5;//串行数据输入
  7. sbit SHCP =P0^6; //移位时钟脉冲
  8. sbit STCP =P4^6; //输出锁存器控制脉冲
  9. sbit IA=P2^0;//
  10. sbit IB=P2^1;  //  
  11. sbit IC=P2^2; //
  12. sbit ID=P2^3;//      
  13. sbit OE=P4^4; //               
  14. //uint   uiAllData;
  15. uchar  Move,line,Speed;
  16. uint   zimuo;                                 
  17. uchar  BUFF[20];                                   //缓存
  18. void   DelayMs(void);              // 延时
  19. void   in_data();                                   // 调整移动数据
  20. void   rxd_data();                                   // 发送移动数据

  21. uchar code hanzi[]={
  22. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
  24. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
  25. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
  26. 0x00,0x01,0x00,0x01,0x3F,0x01,0x20,0x3F,0xA0,0x20,0x92,0x10,0x54,0x02,0x28,0x02,
  27. 0x08,0x02,0x14,0x05,0x24,0x05,0xA2,0x08,0x81,0x08,0x40,0x10,0x20,0x20,0x10,0x40,/*"欢",0*/
  28. 0x00,0x00,0x04,0x01,0xC8,0x3C,0x48,0x24,0x40,0x24,0x40,0x24,0x4F,0x24,0x48,0x24,
  29. 0x48,0x24,0x48,0x2D,0xC8,0x14,0x48,0x04,0x08,0x04,0x14,0x04,0xE2,0x7F,0x00,0x00,/*"迎",1*/
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
  31. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
  32. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/
  33. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",3*/

  34. };
  35. /******************************************************/
  36. /*****不影响其他端口的扫描*************************/
  37. void scan(uchar Value)
  38. {
  39.         switch(Value)
  40.         {case  0: {IA=0;IB=0;IC=0;ID=0;};break;
  41.                   case  1:{IA=1;IB=0;IC=0;ID=0;};break;
  42.                    case  2:{IA=0;IB=1;IC=0;ID=0;};break;            
  43.                     case  3: {IA=1;IB=1;IC=0;ID=0;};break;
  44.              case  4: {IA=0;IB=0;IC=1;ID=0;};break;
  45.                       case  5: {IA=1;IB=0;IC=1;ID=0;};break;
  46.                        case  6: {IA=0;IB=1;IC=1;ID=0;};break;
  47.                         case  7:{IA=1;IB=1;IC=1;ID=0;};break;
  48.                  case  8: {IA=0;IB=0;IC=0;ID=1;};break;
  49.                        case  9:  {IA=1;IB=0;IC=0;ID=1;};break;
  50.                       case 10:{IA=0;IB=1;IC=0;ID=1;};break;
  51.                      case 11: {IA=1;IB=1;IC=0;ID=1;};break;
  52.             case 12: {IA=0;IB=0;IC=1;ID=1;};break;
  53.                   case 13:{IA=1;IB=0;IC=1;ID=1;};break;
  54.                  case 14:{IA=0;IB=1;IC=1;ID=1;};break;
  55.             case 15:{IA=1;IB=1;IC=1;ID=1;};break;
  56.            default:break;
  57.         }
  58. }
  59. /**************************延时***********************/

  60. void DelayMs(void)
  61. {
  62. unsigned char i, j;

  63.         _nop_();
  64.         i = 11;
  65.         j = 190;
  66.         do
  67.         {
  68.                 while (--j);
  69.         } while (--i);
  70.          }
  71. void Timer0Init(void)                //1毫秒@22.1184MHz
  72. {
  73.     AUXR &= 0x7F;                //定时器时钟12T模式
  74.         TMOD &= 0xF0;                //设置定时器模式
  75.         TMOD |= 0x01;                //设置定时器模式
  76.         TL0 = 0xCD;                //设置定时初值
  77.         TH0 = 0xF8;                //设置定时初值
  78.         TR0 = 1;                //定时器0开始计时
  79.         EA=1;
  80.         ET0=1;

  81. }


  82. /********************************************/

  83. /*主函数*/
  84. void main()
  85. {   P4SW=0x70;
  86.     P2M1=0x00;P2M0=0x0f;
  87.         P4M1=0x00;P4M0=0xff;      
  88.         P3M1=0x00;P3M0=0x80;
  89.         zimuo=0;
  90.     Move=0;
  91.         SHCP=0;
  92.         STCP=0;
  93.         Timer0Init();
  94.         line=0;      
  95.    while(1)  
  96.   {


  97.          while(zimuo<128)
  98.     {
  99.            while(Move<16)      
  100.      {
  101.              for(Speed=0;Speed<15;Speed++)
  102.              {      
  103.                   
  104.                     for(line=0;line<16;line++)
  105.                           {
  106.                                 in_data();        //
  107.                                 rxd_data(); //
  108.                                 scan(line); //   
  109.                                 OE=1;//
  110.                                 DelayMs();               
  111.                                 OE=0;
  112.                                  
  113.                   }
  114.                  }
  115.          Move++;                                             
  116.              }
  117.       Move=0;
  118.          zimuo=zimuo+32;
  119.     }      
  120.      zimuo=0;
  121.     }         
  122. }      

  123.          
  124. /********************************************************         */

  125. void in_data(void)                                      
  126. {
  127. uchar s;
  128.         for(s=0;s<8;s++)                                            
  129.         {
  130.                  BUFF[2*s]=hanzi[zimuo+32*s+2*line];      
  131.                  BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*line];         
  132.         }
  133. }


  134. /***********************发送移动的数据************************  */
  135. void rxd_data(void)                           
  136. {
  137. uchar h;
  138. uchar inc,tempyid,temp,k;

  139. if(Move<8)
  140.    inc=0;
  141.   else
  142.     inc=1;
  143.   for(h=0+inc;h<4+inc;h++)                  
  144.         {
  145.          if(Move<8)
  146.        tempyid=Move;
  147.      else
  148.      tempyid=Move-8;
  149.          temp=(BUFF[h]>>tempyid)|(BUFF[h+1]<<(8-tempyid));
  150.          temp=~temp;
  151.              for(k=0;k<8;k++)
  152.                {  
  153.                                 SHCP=0;      
  154.                            if(temp&0x01==0x01)                          
  155.                             {
  156.                                   SDA_G=1;
  157.                                 }
  158.                            else
  159.                            {
  160.                                     SDA_G=0;
  161.                            }
  162.                                    
  163.                           // SDA_G=(bit)(temp&0x01);
  164.                           temp=temp>>1;   
  165.                           SHCP=1;         
  166.                             _nop_();                                                                                 
  167.                   _nop_();                     
  168.                
  169.                            
  170.     }
  171.     STCP=1;
  172.         STCP=0;   
  173.    }
  174.    }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:424598 发表于 2019-6-6 11:05 来自手机 | 只看该作者
看我发的贴,有仿真和程序有备注。
回复

使用道具 举报

板凳
ID:58796 发表于 2020-1-17 22:33 | 只看该作者
while(zimuo<128)//128除32=4,修改128
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表