本帖最后由 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几个数字的变化,并伴有一个刷新的效果
程序代码如下:
- #include <SPI.h>
- #define DI 0 // D0, pin 5 Data In
- #define DO 1 // D1, pin 6 Data Out (this is *not* MOSI)
- #define USCK 2 // D2, pin 7 Universal Serial Interface clock
- #define SS 3 // D3, pin 2 Slave Select
- /*
- * 16进制表示法,也可以写成二进制,例如B00111100(0x3c)
- * 下为0-9的16进制显示
- */
- byte numbers[11][8]=
- {
- {0x3c,0×42,0×42,0×42,0×42,0×42,0×42,0x3c},
- {0×08,0×18,0×28,0×08,0×08,0×08,0×08,0x7e},
- {0x7e,0×02,0×02,0x7e,0×40,0×40,0×40,0x7e},
- {0x7e,0×02,0×02,0x7e,0×02,0×02,0×02,0x7e},
- {0×08,0×18,0×28,0×48,0xfe,0×08,0×08,0x1c},
- {0x7e,0×40,0×40,0x7e,0×02,0×02,0×02,0x7e},
- {0x7e,0×40,0×40,0x7e,0×42,0×42,0×42,0x7e},
- {0x7e,0×02,0×04,0×08,0×10,0×10,0×10,0×10},
- {0x7e,0×42,0×42,0x7e,0×42,0×42,0×42,0x7e},
- {0x7e,0×42,0×42,0x7e,0×02,0×02,0×02,0x7e},
- {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
- };
- /**
- * Matrix寄存器地址常量
- */
- const byte NOOP=0×0; //不运行
- const byte DECODEMODE=0×9; //译码模式
- const byte INTENSITY=0xA; //显示强度
- const byte SCANLIMIT=0xB; //扫描限制
- const byte SHUTDOWN=0xC; //停机
- const byte DISPLAYTEST=0xF; //显示器检测
- void max7219(byte reg,byte data)
- {
- digitalWrite(SS,LOW);
- SPI.transfer(reg);
- SPI.transfer(data);
- digitalWrite(SS,HIGH);
- delay(200);
- }
- void setup()
- {
- pinMode(SS,OUTPUT);
- digitalWrite(SS,HIGH);
- SPI.begin();
- initMax();
- }
- void initMax()
- {
- ////清屏代码,暂不使用
- /*for(byte i=0;i<sizeof(numbers[0]);i++){
- max7219(i+1,0);
- }*/
- max7219(SCANLIMIT,7);
- max7219(DECODEMODE,0);
- max7219(INTENSITY,1);
- max7219(DISPLAYTEST,0);
- max7219(SHUTDOWN,1);
- }
- byte i,j;
- void loop()
- {
- for(i=0;i<11;i++){
- for(j=0;j<8;j++)
- max7219(j+1,numbers[i][j]);
- delay(1200);
- }
- }
复制代码
AtTiny85是不能直接使用Arduino的SPI库的,这个问题困扰了我很长时间,最后在谷歌找到了答案,并且在github找到了这个类库。
然后分享一下用到的取模软件:LED Matrix Animator,感谢geek-workshop@幻生幻灭,虽然使用的板子不一样 :–)
最后看下动画效果:
原文来自:
Arduino AtTiny85 使用SPI点亮LED点阵
http://lisonliou.gicp.net:10001/?p=271 |