极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: zzz

【Z】Arduino也能驱动LED显示屏,LED业界标准Arduino驱动方案解析

  [复制链接]
发表于 2013-10-20 21:32:55 | 显示全部楼层
shiow1984 发表于 2013-10-20 20:19
我已经研究出来了  ,这个datain 根本就没什么用,我也找不到接在哪里,但是成功了,我买的是一个16*64单 ...

滚动屏你研究出来了没有啊,我一直无解~
回复 支持 反对

使用道具 举报

发表于 2013-10-20 21:51:34 | 显示全部楼层
万马奔腾 发表于 2013-10-20 21:32
滚动屏你研究出来了没有啊,我一直无解~

这两天净研究这个东东了   刚点亮,显示静止的汉字了,还没研究滚动的,明天再研究吧
你到哪一步了?
回复 支持 反对

使用道具 举报

发表于 2013-10-21 13:50:53 | 显示全部楼层
万马奔腾 发表于 2013-10-20 21:32
滚动屏你研究出来了没有啊,我一直无解~

看看这个帖子,他这个能滚动, http://www.geek-workshop.com/for ... thread&tid=4787
回复 支持 反对

使用道具 举报

发表于 2013-10-24 20:12:07 | 显示全部楼层
万马奔腾 发表于 2013-10-2 00:18
01.for(row=0;row

我剛看懂ZZZ 所寫的16*16 單字驅動程式,
也經過測試其實第二段
for(row=0;row<16;row++){

      for (int i=0;i<4;i++){//8片595
         //硬件SPI  发送8字节耗时:22US         
         spi_transfer(~(zzz[i*32+row*2]));  //硬件SPI      
         spi_transfer(~(zzz[i*32+row*2+1]));  //硬件SPI        
      }
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x03,0xC0,0x02,0xE0,0x06,0x60,0x04,0x70,
0x0C,0x30,0x0F,0xF8,0x18,0x38,0x10,0x1C,0x30,0x1C,0xFC,0x3F,0x00,0x00,0x00,0x00, //A
這程式是掃描 16*1 及第16*2
把zzz[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x03,0xC0,0x02,0xE0,0x06,0x60,0x04,0x70,
0x0C,0x30,0x0F,0xF8,0x18,0x38,0x10,0x1C,0x30,0x1C,0xFC,0x3F,0x00,0x00,0x00,0x00, //A
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x03,0xC0,0x02,0xE0,0x06,0x60,0x04,0x70,
0x0C,0x30,0x0F,0xF8,0x18,0x38,0x10,0x1C,0x30,0x1C,0xFC,0x3F,0x00,0x00,0x00,0x00, //A
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x03,0xC0,0x02,0xE0,0x06,0x60,0x04,0x70,
0x0C,0x30,0x0F,0xF8,0x18,0x38,0x10,0x1C,0x30,0x1C,0xFC,0x3F,0x00,0x00,0x00,0x00, //A
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x03,0xC0,0x02,0xE0,0x06,0x60,0x04,0x70,
0x0C,0x30,0x0F,0xF8,0x18,0x38,0x10,0x1C,0x30,0x1C,0xFC,0x3F,0x00,0x00,0x00,0x00 //A

}

而原始程式中是直接橫向掃64行,所以會造成錯位。
這樣應該你就懂了。
我最近專題也在做這個,關於滾動的部分還在研究...
共勉之
回复 支持 反对

使用道具 举报

发表于 2013-11-29 21:40:16 | 显示全部楼层
smartjay 发表于 2013-10-24 20:12
我剛看懂ZZZ 所寫的16*16 單字驅動程式,
也經過測試其實第二段
for(row=0;row

滚动研究的怎么样了?  好像得先设置缓存,在缓存里操作移位,循环左移的方法是 temp=(a>>7|a<<1)
回复 支持 反对

使用道具 举报

发表于 2014-1-8 11:37:58 | 显示全部楼层
本帖最后由 iceicon 于 2014-1-8 11:39 编辑

问下楼主,用的硬件spi,下面这段代码是多余的吧?

  1. void hc595senddata(byte data){// 高位在前  反相(1亮0灭)
  2. for (byte i=0; i<8;i++) {
  3.      digitalWrite(CLK,0);
  4.      if (data & 0x80) {
  5.          digitalWrite(R1, 0);     
  6.      } else {
  7.          digitalWrite(R1, 1);
  8.      }
  9.      data=data<<1;
  10.      digitalWrite(CLK,1);
  11. }
  12. }
复制代码
然后我也把js给的51代码改到了arduino里面。单色左移的程序。
  1. digitalWrite(hc138en, 1);  //关闭显示
  2.       hc138sacn(row);            //换行
  3.       digitalWrite(STB, 0);      //595刷新      
  4.       digitalWrite(STB, 1);
  5.       delayMicroseconds(500) ;   //节电用,
  6.       digitalWrite(hc138en, 0);  //开启显示
  7.       delayMicroseconds(500) ;  //刷新频率调,差不多60HZ,1/16间隔
复制代码
上面这段代码写的很好用,我也顺便加上去了
回复 支持 反对

使用道具 举报

发表于 2014-1-8 11:39:12 | 显示全部楼层
本帖最后由 iceicon 于 2014-1-8 20:28 编辑
  1. int R1=7;
  2. int STR=8;
  3. int CLK=9;
  4. int EN=2;


  5. int dig0=3;
  6. int dig2=4;
  7. int dig4=5;
  8. int dig8=6;
  9. //int i,m;

  10. unsigned char jj,j;


  11. void setup()
  12. {
  13.   pinMode(R1,OUTPUT);
  14.   pinMode(STR,OUTPUT);
  15.   pinMode(CLK,OUTPUT);
  16.   pinMode(EN,OUTPUT);
  17.   pinMode(dig0,OUTPUT);
  18.   pinMode(dig2,OUTPUT);
  19.   pinMode(dig4,OUTPUT);
  20.   pinMode(dig8,OUTPUT);
  21. }

  22. unsigned char zi[][16]={
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  24. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  25. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  26. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  27. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  28. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  29. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  31. //以上为空白显示,保证汉字从最右面开始滚出
  32. /*煮   CD6F3 */
  33. 0x01,0x01,0x3F,0x01,0xFF,0x03,0x0F,0x38,0xCF,0x08,0x0F,0x00,0x24,0x22,0x42,0x00,
  34. 0x00,0x08,0xD8,0x24,0xFE,0x00,0xF0,0x10,0xF0,0x10,0xF0,0x10,0x88,0x44,0x62,0x00,

  35. /*豆   CB6B9 */
  36. 0x00,0x7F,0x00,0x00,0x1F,0x10,0x10,0x10,0x1F,0x00,0x10,0x08,0x04,0xFF,0x00,0x00,
  37. 0x00,0xFE,0x00,0x00,0xF0,0x10,0x10,0x10,0xF0,0x20,0x30,0x20,0x40,0xFE,0x00,0x00,

  38. /*燃   CC8BC */
  39. 0x22,0x22,0x23,0x2C,0xB4,0xAA,0xA5,0xA2,0x22,0x24,0x29,0x52,0x4D,0x45,0x88,0x00,
  40. 0x10,0x10,0xD8,0x54,0x90,0xFE,0x10,0x28,0x48,0x84,0x06,0x48,0x24,0xB6,0x92,0x00,

  41. /*豆   CB6B9 */
  42. 0x00,0x7F,0x00,0x00,0x1F,0x10,0x10,0x10,0x1F,0x00,0x10,0x08,0x04,0xFF,0x00,0x00,
  43. 0x00,0xFE,0x00,0x00,0xF0,0x10,0x10,0x10,0xF0,0x20,0x30,0x20,0x40,0xFE,0x00,0x00,

  44. /*箕   CBBFE */
  45. 0x20,0x3F,0x28,0x45,0x8A,0x7F,0x08,0x0F,0x08,0x0F,0x08,0x08,0xFF,0x04,0x18,0x60,
  46. 0x40,0x7E,0x90,0x08,0x20,0xFC,0x20,0xE0,0x20,0xE0,0x20,0x20,0xFE,0x40,0x30,0x0C,

  47. /*,   CA3AC */
  48. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x10,0x20,0x00,
  49. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  50. /*豆   CB6B9 */
  51. 0x00,0x7F,0x00,0x00,0x1F,0x10,0x10,0x10,0x1F,0x00,0x10,0x08,0x04,0xFF,0x00,0x00,
  52. 0x00,0xFE,0x00,0x00,0xF0,0x10,0x10,0x10,0xF0,0x20,0x30,0x20,0x40,0xFE,0x00,0x00,

  53. /*在   CD4DA */
  54. 0x02,0x02,0x7F,0x04,0x04,0x08,0x18,0x17,0x30,0x50,0x90,0x10,0x10,0x17,0x10,0x00,
  55. 0x00,0x00,0xFE,0x00,0x00,0x40,0x40,0xFC,0x40,0x40,0x40,0x40,0x40,0xFE,0x00,0x00,

  56. /*斧   CB8AB */
  57. 0x04,0x18,0x66,0x01,0x06,0x78,0x00,0x0F,0x08,0x0F,0x08,0x10,0x10,0x20,0xC0,0x00,
  58. 0x20,0x18,0x64,0x80,0x60,0x1E,0x68,0x80,0x00,0xFC,0x40,0x40,0x40,0x40,0x40,0x40,

  59. /*中   CD6D0 */
  60. 0x01,0x01,0x21,0x3F,0x21,0x21,0x21,0x21,0x21,0x3F,0x21,0x01,0x01,0x01,0x01,0x01,
  61. 0x00,0x00,0x08,0xFC,0x08,0x08,0x08,0x08,0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,

  62. /*泣   CC6FC */
  63. 0x20,0x10,0x10,0x07,0x88,0x48,0x50,0x12,0x22,0x21,0xE1,0x21,0x20,0x20,0x3F,0x20,
  64. 0x80,0x40,0x40,0xFC,0x00,0x08,0x08,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0xFE,0x00,

  65. /*;   CA3BB */
  66. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x30,0x30,0x10,0x20,0x00,
  67. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  68. /*本   CB1BE */
  69. 0x01,0x01,0x01,0xFF,0x03,0x03,0x05,0x05,0x09,0x11,0x2F,0xC1,0x01,0x01,0x01,0x00,
  70. 0x00,0x00,0x00,0xFE,0x80,0x40,0x40,0x20,0x10,0x18,0xEE,0x04,0x00,0x00,0x00,0x00,

  71. /*是   CCAC7 */
  72. 0x00,0x0F,0x08,0x0F,0x08,0x0F,0x00,0xFF,0x01,0x09,0x09,0x09,0x15,0x23,0x40,0x00,
  73. 0x00,0xF0,0x10,0xF0,0x10,0xF0,0x00,0xFE,0x00,0x00,0xF8,0x00,0x00,0x00,0xFE,0x00,

  74. /*同   CCDAC */
  75. 0x00,0x7F,0x40,0x40,0x5F,0x40,0x40,0x4F,0x48,0x48,0x48,0x4F,0x48,0x40,0x40,0x40,
  76. 0x00,0xFC,0x04,0x04,0xF4,0x04,0x04,0xE4,0x24,0x24,0x24,0xE4,0x24,0x04,0x14,0x08,

  77. /*根   CB8F9 */
  78. 0x10,0x11,0x11,0xFD,0x11,0x11,0x39,0x35,0x51,0x51,0x91,0x11,0x11,0x11,0x11,0x10,
  79. 0x00,0xF8,0x08,0x08,0xF8,0x08,0x08,0xF8,0x84,0x4C,0x30,0x10,0x48,0x8E,0x04,0x00,

  80. /*生   CC9FA */
  81. 0x00,0x10,0x10,0x10,0x1F,0x20,0x20,0x40,0x9F,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,
  82. 0x80,0xC0,0x80,0x88,0xFC,0x80,0x80,0x88,0xFC,0x80,0x80,0x80,0x80,0x84,0xFE,0x00,

  83. /*,   CA3AC */
  84. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x10,0x20,0x00,
  85. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,


  86. /*相   CCFE0 */
  87. 0x10,0x10,0x10,0x10,0xFE,0x18,0x34,0x32,0x52,0x50,0x90,0x10,0x10,0x10,0x10,0x10,
  88. 0x00,0xFC,0x84,0x84,0x84,0xFC,0x84,0x84,0x84,0xFC,0x84,0x84,0x84,0x84,0xFC,0x84,

  89. /*煎   CBCE5 */
  90. 0x08,0x04,0xFF,0x00,0x3E,0x22,0x3E,0x22,0x3E,0x22,0x2A,0x24,0x48,0x44,0xC6,0x82,
  91. 0x20,0x40,0xFE,0x00,0x08,0x48,0x48,0x48,0x48,0x48,0x28,0x10,0x88,0x44,0x66,0x22,

  92. /*何   CBACE */
  93. 0x08,0x0C,0x1B,0x10,0x30,0x27,0x64,0xA4,0x24,0x27,0x24,0x20,0x20,0x20,0x20,0x00,
  94. 0x00,0x00,0xFE,0x08,0x08,0xC8,0x48,0x48,0x48,0xC8,0x48,0x08,0x08,0x28,0x10,0x00,

  95. /*太   CCCAB */
  96. 0x01,0x01,0x01,0x01,0x7F,0x01,0x01,0x01,0x02,0x02,0x04,0x05,0x08,0x10,0x20,0x40,
  97. 0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x98,0xCC,0x86,0x04,

  98. /*急   CBCB1 */
  99. 0x04,0x04,0x0F,0x08,0x10,0x2F,0x00,0x0F,0x00,0x0F,0x01,0x28,0x28,0x68,0x07,0x00,
  100. 0x00,0x00,0xE0,0x40,0x80,0xF0,0x10,0xF0,0x10,0xF0,0x00,0x84,0x92,0x12,0xF0,0x00,

  101. /*。   CA1A3 */
  102. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x30,0x00,0x00,
  103. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  104. //以下为空白,保证所有汉字滚动到最左边
  105. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  106. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  107. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  108. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  109. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  110. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  111. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  112. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  113. };

  114. void row1(int i)
  115. {
  116.         digitalWrite(dig0,(i&0x01));
  117.         digitalWrite(dig2,(i&0x02));
  118.         digitalWrite(dig4,(i&0x04));
  119.         digitalWrite(dig8,(i&0x08));
  120. }

  121. void sendbyte(byte bbyte1)
  122. {
  123.         for(byte i=0;i<8;i++)
  124.         {
  125.                 digitalWrite(CLK,LOW);
  126.                 if (bbyte1&0x80)
  127.                 {
  128.                         digitalWrite(R1,0);
  129.                 }
  130.                 else
  131.                 {
  132.                         digitalWrite(R1,1);
  133.                 }
  134.                 digitalWrite(CLK,HIGH);
  135.                 bbyte1=bbyte1<<1;
  136.         }
  137. }

  138. void sendbyte2(byte bbyte1,byte m)
  139. {
  140.         for(byte i=0;i<m;i++)
  141.         {
  142.                 digitalWrite(CLK,LOW);
  143.                 if (bbyte1&0x80)
  144.                 {
  145.                         digitalWrite(R1,0);
  146.                 }
  147.                 else
  148.                 {
  149.                         digitalWrite(R1,1);
  150.                 }
  151.                 digitalWrite(CLK,HIGH);
  152.                 bbyte1=bbyte1<<1;
  153.         }
  154. }

  155. void loop()
  156. {
  157.         unsigned char row,m,k;
  158.         for(row=0;row<16;row++)
  159.         {
  160.                 k=jj;
  161.                 for(m=0;m<8;m++)
  162.                 {
  163.                         sendbyte(zi[k+m][row]);
  164.                 }
  165.                 sendbyte2(zi[k+8][row],j);
  166.                 if(j==8)
  167.                 {
  168.                         j=0;
  169.                         jj++;
  170.                         if(jj>55)
  171.                         {
  172.                                 jj=0;
  173.                         }
  174.                 }
  175.                 digitalWrite(EN,1);
  176.                 row1(row);
  177.                 digitalWrite(STR,0);
  178.                 digitalWrite(STR,1);
  179.                 delayMicroseconds(100);
  180.                 digitalWrite(EN,0);
  181.                 delayMicroseconds(100);
  182.         }
  183.         j++;
  184. }

复制代码


这是我写的,用的软件spi。
回复 支持 反对

使用道具 举报

发表于 2014-1-8 20:22:51 | 显示全部楼层
滚屏代码是sendbyte2,是每次多读M个数据传过去,同理可以往右滚屏。翻页的代码51的有,还没转成arduino。同理往下网上也可以,翻页是改数组第二个,滚屏是第一个
回复 支持 反对

使用道具 举报

发表于 2014-2-11 15:38:24 | 显示全部楼层
iceicon 发表于 2014-1-8 20:22
滚屏代码是sendbyte2,是每次多读M个数据传过去,同理可以往右滚屏。翻页的代码51的有,还没转成arduino。同 ...

我后来用网上51版的改了一个滚屏的,不过总有问题,哪天传上了大家研究研究,问题是有几行字前面总多几个灯亮
回复 支持 反对

使用道具 举报

发表于 2014-2-12 15:45:39 | 显示全部楼层
本帖最后由 shiow1984 于 2014-2-12 15:48 编辑
iceicon 发表于 2014-1-8 20:22
滚屏代码是sendbyte2,是每次多读M个数据传过去,同理可以往右滚屏。翻页的代码51的有,还没转成arduino。同 ...


用你的代码试了下,正常,这是我的代码,有点小问题, 我用的是arduino uno R3的板子,帮忙看下可以吧,
这个问题,我在arduino版块新发表了个帖子,http://www.geek-workshop.com/thread-8598-1-1.html


  1. #define RowA 2   
  2. #define RowB 3
  3. #define RowC 4
  4. #define RowD 5
  5. //业界所采用的ABCD 08驱动模式
  6. /*  2 ABCD G1 G2 STB CLK 16 1 N N N EN R1 R2 N N 15*/
  7. int hc138en=6; //EN口

  8. //使用了硬件SPI,以下脚不能更改
  9. #define R1 11          //数据出    MOSI
  10. #define CLK 13         //时钟    SCK
  11. #define STB 10         //595 刷新显示  SS  锁存         STB(LT)为锁存信号,CLK(CK)为时钟信号
  12. #define DATAIN  12     //数据入,读FLASH时有用  MISO

  13. char yid,h;                     //YID为移动计数器,H为行段计数器
  14. int zimuo;                   //字模计数器

  15. byte Zdate[10];  //缓存
  16. byte zzz[] =
  17. {/*------------------------------------------------------------------------------
  18. ;  源文件 / 文字 : 吉祥如意
  19. ;  宽×高(像素): 64×16
  20. ------------------------------------------------------------------------------*/
  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  22. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  24. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  25. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  26. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  27. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  28. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  29. 0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x08,0x7F,0xFC,0x00,0x00,
  30. 0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,/*"吉",0*/
  31. 0x21,0x04,0x10,0x88,0x10,0x50,0xFD,0xFE,0x04,0x20,0x08,0x20,0x11,0xFC,0x38,0x20,
  32. 0x54,0x20,0x94,0x20,0x13,0xFE,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,/*"祥",1*/
  33. 0x10,0x00,0x10,0x00,0x18,0x00,0x10,0x7E,0xFE,0x42,0x22,0x42,0x22,0x42,0x22,0x42,
  34. 0x22,0x42,0x24,0x42,0x14,0x42,0x08,0x42,0x14,0x7E,0x23,0x42,0x42,0x42,0x80,0x00,/*"如",2*/
  35. 0x01,0x00,0x3F,0xFC,0x08,0x20,0x04,0x40,0xFF,0xFE,0x00,0x00,0x1F,0xF0,0x12,0x10,
  36. 0x11,0x10,0x1F,0xF0,0x00,0x00,0x29,0x08,0x28,0x84,0x68,0x14,0x07,0xF0,0x00,0x00,/*"意",3*/

  37. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  38. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  39. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  40. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  41. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  42. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  43. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  44. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  45. };

  46. void spi_transfer(volatile char data)
  47. {
  48.   SPDR = data;                    // Start the transmission
  49.   while (!(SPSR & (1<<SPIF)))     // Wait the end of the transmission
  50.   {
  51.   };
  52.   //return SPDR;                    // return the received byte
  53. }


  54. void hc138sacn(byte r){  //输出行线状态ABCD (A低,D高)
  55.     digitalWrite(RowA,(r & 0x01));
  56.     digitalWrite(RowB,(r & 0x02));
  57.     digitalWrite(RowC,(r & 0x04));
  58.     digitalWrite(RowD,(r & 0x08));
  59. }
  60. /**************************************************************************************
  61. 左移显示数据生成模块:(功能相当于有返回值的函数 )
  62. ***************************************************************************************/
  63. char two_onebyteL(char h1,char h2)
  64. {
  65. char temp,tempcol;          //输出变量;列移动位数变量。
  66. if(yid<8)
  67. tempcol=yid;
  68. else
  69. tempcol=yid-8;
  70. temp=(h1<<tempcol)|(h2>>(8-tempcol));    //左移显示
  71. temp=255-temp;           
  72. return temp;            //将显示数据返回显示输出函数。
  73. }
  74. /*************************************************************************************
  75. 左移待显示数据调取函数
  76. *************************************************************************************/
  77. void loadoneline_L(void)
  78. {
  79. char s;               //此处不要用uchar定义s
  80. for(s=4;s>=0;s--)           //s值为屏数加1(16*16为一屏)
  81. {
  82. Zdate[2*s]=zzz[zimuo+32*s+2*h];
  83. Zdate[2*s+1]=zzz[zimuo+1+32*s+2*h];   //左移显示
  84. }
  85. }

  86. /**********************************************************************************
  87. 左移显示数据输出函数 : 为显示数据生成模块的h1、h2赋值并且输出合成后的新的h1、h2数据
  88. ***********************************************************************************/
  89. void sendoneline_L(void)
  90. {
  91. char s;char inc;
  92. if(yid<8)inc=0;else inc=1;
  93. for(s=0+inc;s<8+inc;s++)
  94. {   //左移显示:单屏s=1+,4屏s=7+,8屏s=15+;
  95. spi_transfer(two_onebyteL(Zdate[s],Zdate[s+1]));
  96. }
  97. }
  98. int uiAllData = sizeof(zzz)-128;  //定义显示字幕数据的长度 2048/32=64
  99. void setup ()
  100. {
  101.     pinMode(RowA, OUTPUT);
  102.     pinMode(RowB, OUTPUT);
  103.     pinMode(RowC, OUTPUT);
  104.     pinMode(RowD, OUTPUT); //138片选
  105.     pinMode(hc138en, OUTPUT); //138 使能
  106.     pinMode(R1, OUTPUT);//595 数据
  107.     pinMode(CLK, OUTPUT); //595 时钟
  108.     pinMode(STB, OUTPUT); //595 使能
  109.     pinMode(DATAIN, INPUT); //595 使能
  110.       //digitalWrite(hc138d, HIGH);
  111.   Serial.begin(19200);
  112. SPCR = (1<<SPE)|(1<<MSTR);
  113. delay(10);
  114. }
  115.   
  116. void loop ()
  117. {
  118. char i,d=10;
  119. yid=0;
  120. h=0;
  121. zimuo=0;                                                   
  122. while(1)
  123.   {
  124.        while(yid<16)                             //数据移位。
  125.        {
  126.             for(i=0;i<d;i++)                      //移动速度
  127.               {
  128.                for(h=0;h<16;h++)
  129.                 {   
  130.                 loadoneline_L();
  131.                 sendoneline_L();
  132.                
  133.                 digitalWrite(hc138en, 1);  //关闭显示
  134.                 digitalWrite(STB, 0);      //595刷新      
  135.                 digitalWrite(STB, 1);
  136.                 hc138sacn(h);            //换行   
  137.                 delayMicroseconds(50) ;   //节电用,
  138.                 digitalWrite(hc138en, 0);  //开启显示
  139.                 delayMicroseconds(500) ;  //刷新频率调,差不多60HZ,1/16间隔                        
  140.                 }                           
  141.                }
  142.              yid++;                        //移动一步  
  143.           }
  144.       yid=0;
  145.       zimuo=zimuo+32;                    //后移一个字,  
  146.       if(zimuo>= uiAllData )         //定义显示字幕数据的长度 2048/32=64 即显示完64个16*16大小的字符后 重新循环
  147.    zimuo=0;
  148.   }
  149. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-2-12 17:04:45 | 显示全部楼层
信息备份。
回复 支持 反对

使用道具 举报

发表于 2014-2-12 21:30:37 | 显示全部楼层
高手佩服,保持一下……
回复 支持 反对

使用道具 举报

发表于 2014-4-28 09:22:32 | 显示全部楼层
硬件部分是怎样连接的唉 !!!
回复 支持 反对

使用道具 举报

发表于 2014-7-16 00:02:43 | 显示全部楼层
ranqingfa 发表于 2013-6-29 17:21
其实我开始时候就是arduino控制的,2560 ,竟然忘了,后来改了stc,stc有点吃力,但是安装方便
http://v.y ...

你的很棒,请问你是怎么实现滚屏的?能否给个滚屏的源代码?或者教教我。谢谢
回复 支持 反对

使用道具 举报

发表于 2014-7-16 09:15:09 | 显示全部楼层
clumsybird 发表于 2014-7-16 00:02
你的很棒,请问你是怎么实现滚屏的?能否给个滚屏的源代码?或者教教我。谢谢

学生 ????
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 03:14 , Processed in 0.050576 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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