极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: zzz

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

  [复制链接]
发表于 2015-5-9 16:03:35 | 显示全部楼层
08接口1/4扫描的程序怎样改?
回复 支持 反对

使用道具 举报

发表于 2015-5-22 14:07:07 | 显示全部楼层
这个厉害,马克
回复 支持 反对

使用道具 举报

发表于 2015-10-23 17:58:56 | 显示全部楼层
对楼上所有的楼主和访客表示感谢,提供了很多有用的资料。
我在此基础上实现了64*32LED阵列的显示,但是问题是用软件SPI刷新速度跟不上,屏幕呈闪烁状态。顾想通过软硬SPI一起执行,提高速率。但是失败了。用了硬件SPI就没法用软件SPI,用了软件SPI就没法用硬件SPI。(我对SPI通信不是很懂)望各位能不能提供好的方法提高刷新速度。

PS:刷 64 * 16 还算可以,可是64 * 32 就 不行了。

附上代码:
  1. int R1=11;
  2. int R2=9;
  3. int STR=10;
  4. int CLK=13;
  5. int EN=6;


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

  11. unsigned char jj,j;

  12. int down = 0;
  13. int row_ = 0;
  14. void setup()
  15. {
  16.   pinMode(R1,OUTPUT);
  17.    pinMode(R2,OUTPUT);
  18.   pinMode(STR,OUTPUT);
  19.   pinMode(CLK,OUTPUT);
  20.   pinMode(EN,OUTPUT);
  21.   pinMode(dig0,OUTPUT);
  22.   pinMode(dig2,OUTPUT);
  23.   pinMode(dig4,OUTPUT);
  24.   pinMode(dig8,OUTPUT);

  25. //Serial.begin(19200);

  26. //SPCR = (1<<SPE)|(1<<MSTR);
  27. //delay(10);

  28. }

  29. unsigned char zi[]={
  30. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  31. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  32. 0xFD,0xFE,0x1E,0x01,0xBF,0x7F,0x7F,0x7F,0xFD,0xFD,0xEF,0xFD,0xBE,0xFF,0x7F,0x7F,
  33. 0xF9,0xFB,0xF7,0xFB,0xBD,0xFF,0x7F,0x7F,0xFA,0xFB,0xFF,0xF7,0xBB,0xFF,0x6F,0x7B,
  34. 0x87,0x0D,0xFF,0xEF,0xB7,0xFF,0x70,0x07,0xEF,0xBE,0x1F,0xDF,0xAB,0xFF,0x7C,0x1F,
  35. 0xF7,0x7F,0xEF,0xDF,0x9D,0xFF,0x7E,0x3F,0xF7,0x7F,0xF7,0xBF,0xBD,0xFF,0x7C,0x1F,
  36. 0xF0,0x7B,0xF7,0x7F,0xBE,0xEF,0x7D,0xDF,0xF7,0x7D,0xEE,0xFF,0xBF,0x6F,0x7B,0xEF,
  37. 0xEF,0xBE,0x1E,0x01,0xBF,0xB0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  38. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  39. 0xED,0xB7,0xFE,0xFF,0xFD,0xFF,0x90,0x07,0xE5,0x37,0xFF,0x7F,0xFE,0xFF,0xDF,0xF7,
  40. 0xF5,0xE0,0x40,0x01,0x80,0x03,0xFF,0xF7,0xC8,0x2F,0xDF,0xFD,0xBF,0xFB,0x60,0x37,
  41. 0xF1,0xCE,0xF8,0x07,0xF3,0x3F,0x6F,0xB7,0xCC,0x4E,0xFF,0xCF,0xE7,0xCF,0x6F,0xB7,
  42. 0xFB,0xF5,0xFF,0xBF,0x9F,0xE3,0x60,0x37,0xC0,0x75,0xFF,0x7F,0x3F,0xF9,0x6F,0xB7,
  43. 0xEE,0xF9,0x80,0x00,0xC0,0x07,0x6F,0xB7,0xEE,0xFB,0xFF,0x7F,0xFE,0xFF,0x60,0x37,
  44. 0xF1,0xF5,0xFF,0x7F,0xFE,0xFF,0x6F,0xF7,0xF0,0x4C,0xFF,0x7F,0xFE,0xFF,0x7F,0xF7,
  45. 0xCE,0x9F,0x78,0x7F,0x80,0x03,0x7F,0x87,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
  46. };

  47. void row1(int i)
  48. {
  49.         digitalWrite(dig0,(i&0x01));
  50.         digitalWrite(dig2,(i&0x02));
  51.         digitalWrite(dig4,(i&0x04));
  52.         digitalWrite(dig8,(i&0x08));
  53. }


  54. void spi_transfer(volatile char data)
  55. {
  56.   SPDR = data;                    // Start the transmission
  57.   while (!(SPSR & (1<<SPIF)))     // Wait the end of the transmission
  58.   {
  59.   };
  60.   //return SPDR;                    // return the received byte
  61. }

  62. void sendbyte(byte bbyte1){// 高位在前 反相(1亮0灭)
  63. for (byte i=0; i<8;i++) {
  64. digitalWrite(CLK,0);
  65. if ( bbyte1 & 0x80) {
  66. digitalWrite(R1, 1);
  67. } else {
  68. digitalWrite(R1, 0);
  69. }
  70. bbyte1= bbyte1<<1;
  71. digitalWrite(CLK,1);
  72. }

  73. }

  74. void sendbyte2(byte bbyte1){// 高位在前 反相(1亮0灭)
  75. for (byte i=0; i<8;i++) {
  76. digitalWrite(CLK,0);
  77. if ( bbyte1 & 0x80) {
  78. digitalWrite(R2, 1);
  79. } else {
  80. digitalWrite(R2, 0);
  81. }
  82. bbyte1= bbyte1<<1;
  83. digitalWrite(CLK,1);
  84. }

  85. }




  86. void loop()
  87. {
  88.         unsigned char row,m,k;
  89.        for(row=0;row<16;row++){
  90.          
  91.             for (int i=0;i<8;i++){
  92.                sendbyte(zi[i+down*8]);
  93.            }

  94. //          for(row=0;row<16;row++){
  95. //           
  96. //                for (int i=0;i<8;i++){   
  97. //                   //spi_transfer((zi[i+down*8]));
  98. //                }
  99.                
  100.               down++;
  101.                 digitalWrite(EN,1);
  102.                 row1(row);
  103.                 digitalWrite(STR,0);
  104.                 digitalWrite(STR,1);
  105.                 delayMicroseconds(0);
  106.                 digitalWrite(EN,0);
  107.                 delayMicroseconds(0);
  108.         }
  109.         
  110.          for(row=0;row<16;row++){
  111.          
  112.             for (int i=0;i<8;i++){
  113.                 sendbyte2(zi[i+down*8]);
  114.            }
  115.               down++;
  116.                 digitalWrite(EN,1);
  117.                 row1(row);
  118.                 digitalWrite(STR,0);
  119.                 digitalWrite(STR,1);
  120.                 delayMicroseconds(0);
  121.                 digitalWrite(EN,0);
  122.                 delayMicroseconds(0);
  123.         }
  124.         down = 0;
  125. }
复制代码
回复 支持 1 反对 0

使用道具 举报

发表于 2015-11-15 00:31:59 | 显示全部楼层

Z大侠:请问我用淘宝上常见的T1接口的16x32广告屏,但是不能正常显示,都是138和595控制的,不知道为什么不对?
回复 支持 反对

使用道具 举报

发表于 2016-1-6 16:40:53 | 显示全部楼层
很好,哦,就是没接线图
回复 支持 反对

使用道具 举报

发表于 2016-7-17 14:13:07 | 显示全部楼层
set uo 中的 SPCR = (1<<SPE)|(1<<MSTR);是什么意思
回复 支持 反对

使用道具 举报

发表于 2016-8-3 23:34:57 | 显示全部楼层
请问,怎么让 点阵显示时间呀!  获取 DS1302输出的时间,然后显示!
回复 支持 反对

使用道具 举报

发表于 2017-1-7 22:54:37 | 显示全部楼层
谢谢分享,学习了!
回复 支持 反对

使用道具 举报

发表于 2017-11-8 10:57:51 | 显示全部楼层
楼主你好我照你的刷进去怎么是反显示?字没显示,背景亮了,应该怎么改,能不能帮忙一下,谢谢
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 12:50 , Processed in 0.045180 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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