极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15473|回复: 3

分享Arduino AtTiny85 使用SPI驱动8*8LED点阵

[复制链接]
发表于 2015-2-8 15:57:12 | 显示全部楼层 |阅读模式
本帖最后由 lison 于 2015-2-8 16:01 编辑

上次分享了《用Arduino IDE USB 驱动 AtTiny 85》,这次记录一下使用Tiny85点亮LED点阵。
准备材料:
1. AtTiny 85芯片一只
2.8*8 LED Matrix一块
3.USB数据线一条
先说接线方式:
VCC——5V
GND——GNDDIN——PB1 MISO ( Master in Slave Out )
CS——PB3
CLK——PB2 SCK/ADC1
接线方式困扰我的是DIN针,之前一直是接在MOSI口上,想当然的理解为主机输出(哎,半路和尚老被欺负),外设输入,却怎么也显示不对;后来换过来试了一下,才正确输出,看来是自己理解的有错误:应该理解为主机(M)负责输出,外设(S)负责接收来自M的输出,不知道这样理解是否正确。
来个接线的图:







如果照着上图接的话,注意对应好颜色就可以了。

再来张运行中的:



目前只是实现了0-9几个数字的变化,并伴有一个刷新的效果
程序代码如下:

  1. #include <SPI.h>
  2. #define DI   0  // D0, pin 5  Data In
  3. #define DO   1  // D1, pin 6  Data Out (this is *not* MOSI)
  4. #define USCK 2  // D2, pin 7  Universal Serial Interface clock
  5. #define SS   3  // D3, pin 2  Slave Select

  6. /*
  7. *    16进制表示法,也可以写成二进制,例如B00111100(0x3c)
  8. *    下为0-9的16进制显示
  9. */
  10. byte numbers[11][8]=
  11. {
  12. {0x3c,0×42,0×42,0×42,0×42,0×42,0×42,0x3c},
  13. {0×08,0×18,0×28,0×08,0×08,0×08,0×08,0x7e},
  14. {0x7e,0×02,0×02,0x7e,0×40,0×40,0×40,0x7e},
  15. {0x7e,0×02,0×02,0x7e,0×02,0×02,0×02,0x7e},
  16. {0×08,0×18,0×28,0×48,0xfe,0×08,0×08,0x1c},
  17. {0x7e,0×40,0×40,0x7e,0×02,0×02,0×02,0x7e},
  18. {0x7e,0×40,0×40,0x7e,0×42,0×42,0×42,0x7e},
  19. {0x7e,0×02,0×04,0×08,0×10,0×10,0×10,0×10},
  20. {0x7e,0×42,0×42,0x7e,0×42,0×42,0×42,0x7e},
  21. {0x7e,0×42,0×42,0x7e,0×02,0×02,0×02,0x7e},
  22. {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
  23. };

  24. /**
  25. *    Matrix寄存器地址常量
  26. */
  27. const byte NOOP=0×0;        //不运行
  28. const byte DECODEMODE=0×9;    //译码模式
  29. const byte INTENSITY=0xA;    //显示强度
  30. const byte SCANLIMIT=0xB;    //扫描限制
  31. const byte SHUTDOWN=0xC;    //停机
  32. const byte DISPLAYTEST=0xF;    //显示器检测

  33. void max7219(byte reg,byte data)
  34. {
  35. digitalWrite(SS,LOW);
  36. SPI.transfer(reg);
  37. SPI.transfer(data);
  38. digitalWrite(SS,HIGH);
  39. delay(200);
  40. }

  41. void setup()
  42. {
  43. pinMode(SS,OUTPUT);
  44. digitalWrite(SS,HIGH);

  45. SPI.begin();
  46. initMax();
  47. }

  48. void initMax()
  49. {
  50. ////清屏代码,暂不使用
  51. /*for(byte i=0;i<sizeof(numbers[0]);i++){
  52. max7219(i+1,0);
  53. }*/

  54. max7219(SCANLIMIT,7);
  55. max7219(DECODEMODE,0);
  56. max7219(INTENSITY,1);
  57. max7219(DISPLAYTEST,0);
  58. max7219(SHUTDOWN,1);
  59. }

  60. byte i,j;
  61. void loop()
  62. {
  63. for(i=0;i<11;i++){
  64. for(j=0;j<8;j++)
  65. max7219(j+1,numbers[i][j]);

  66. delay(1200);
  67. }
  68. }
复制代码


AtTiny85是不能直接使用Arduino的SPI库的,这个问题困扰了我很长时间,最后在谷歌找到了答案,并且在github找到了这个类库。

然后分享一下用到的取模软件:LED Matrix Animator,感谢geek-workshop@幻生幻灭,虽然使用的板子不一样 :–)

最后看下动画效果:



原文来自:
Arduino AtTiny85 使用SPI点亮LED点阵
http://lisonliou.gicp.net:10001/?p=271

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2016-3-5 01:22:47 | 显示全部楼层
麻烦提供一下你用的SPI库,谢谢
回复 支持 反对

使用道具 举报

发表于 2016-3-5 12:56:11 | 显示全部楼层
不客气,其实那个软件也是找老外的资源
回复 支持 反对

使用道具 举报

发表于 2016-3-5 22:57:15 | 显示全部楼层
幻生幻灭 发表于 2016-3-5 12:56
不客气,其实那个软件也是找老外的资源

我也找到了一个库,捣鼓了半天,能编译通过了,但是驱动st7585的9664lcd不成功。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 09:28 , Processed in 0.040382 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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