“8*8点阵模块”的版本间的差异
来自YFRobotwiki
第183行: | 第183行: | ||
[[File:囧脸.png]][[File:笑脸.png]] | [[File:囧脸.png]][[File:笑脸.png]] | ||
+ | <br> | ||
<br> | <br> | ||
<font color="seagreen">'''face.h'''</font>文件通过[[点阵取模软件获得]]: | <font color="seagreen">'''face.h'''</font>文件通过[[点阵取模软件获得]]: | ||
+ | <br> | ||
+ | <br> | ||
[[File:点阵取模软件演示1.png]][[File:点阵取模软件演示2.png]] | [[File:点阵取模软件演示1.png]][[File:点阵取模软件演示2.png]] | ||
− | + | <br> | |
<!-- | <!-- |
2015年10月15日 (四) 15:04的版本
生成缩略图出错:文件可能丢失:
产品简介
8*8点阵模块是采用2片74HC595芯片驱动红色8X8点阵管,只需要使用控制器3路IO口,根据点阵管动态扫描原理进行显示,可以显示多种图案。
规格参数
- 供电电压:DC5V
- 使用芯片:74HC595
- 模块尺寸:32.5*32.5*14.7MM(长*宽*高)
- 模块重量:10.6g
引脚说明
- 1. VCC -- Vcc(电源+5V)
- 2. GND -- Gnd(地)
- 3. SER -- 串行移位输入
- 4. RCK -- 存储寄存器的时序输入
- 5. SRCK -- 移位寄存器的时序输入
应用示例
电路连接示意图
点阵模块 | Arduino UNO |
VCC | +5V |
GND | GND |
SER | D10 |
RCK | D11 |
SRCK | D12 |
示例代码
示例一:基本显示
Face.ino:
/************************************************** * Face * ( 8x8 Led Dot Matrix with two 74HC595 on Arduino) * * by YFROBOT ***************************************************/ #include "TimerOne.h" #include "face.h" #define ROW_DATA ((row[0]<<7)|(row[1]<<6)|(row[2]<<5)|(row[3]<<4)|(row[4]<<3)|(row[5]<<2)|(row[6]<<1)|(row[7]<<0)) #define COL_DATA ((col[0]<<7)|(col[1]<<6)|(col[2]<<5)|(col[3]<<4)|(col[4]<<3)|(col[5]<<2)|(col[6]<<1)|(col[7]<<0)) //Pin connected to DS of 74HC595 int SER = 10; //Pin connected to ST_CP of 74HC595 int RCK = 11; //Pin connected to SH_CP of 74HC595 int SRCK = 12; int row[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; int col[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; byte screen[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; volatile byte screenRow = 0; volatile byte screenCol = 0; // A counter to know what frame we're showing int animationIndex = 0; // 8x8 Point temporary array byte brightnesses[64]; void setup() { Timer1.initialize(100); pinMode(RCK, OUTPUT); pinMode(SRCK, OUTPUT); pinMode(SER, OUTPUT); Timer1.attachInterrupt(doubleBuffer); Serial.begin(9600); } void doubleBuffer() { row[screenRow] = 0; col[screenCol] = 1; screenCol++; if (screenCol >= 8) { screenCol = 0; screenRow++; if (screenRow >= 8) { screenRow = 0; } } if ((screen[screenRow] >> screenCol) & B1 == B1) { row[screenRow] = 1; col[screenCol] = 0; digitalWrite(RCK, LOW); shiftOut(SER, SRCK, MSBFIRST, COL_DATA); //先选择列 shiftOut(SER, SRCK, MSBFIRST, ROW_DATA); //再送行数据 digitalWrite(RCK, HIGH); } } void allOFF() { for (int i = 0; i < 8; i++) screen[i] = B0; } void allON() { for (int i = 0; i < 8; i++) screen[i] = B11111111; } void loop() { UpdataDate(); allOFF(); } void UpdataDate() { if (animationIndex < animationFrames) { for (int i = 0; i < 64; i++) { brightnesses[i] = (animation[animationIndex][i / 4] >> (i % 4 * 2)) & B1; screen[7-i / 8] |= (brightnesses[i] << (i % 8)) ; } delay(animationDelays[animationIndex]); animationIndex ++; if (animationIndex >= animationFrames) { //restart animation index animationIndex = 0; } } }
face.h:
int animationFrames = 2; int animationDelays[] = { 1000, 1000 }; // Animation is designed for 8x8 pixels uint8_t animation[][16] = { { 0x55, 0x55, 0x11, 0x44, 0x5, 0x50, 0x1, 0x40, 0x51, 0x45, 0x11, 0x44, 0x11, 0x44, 0x55, 0x55 }, { 0x5, 0x50, 0x5, 0x50, 0x0, 0x0, 0x40, 0x1, 0x40, 0x1, 0x0, 0x0, 0x4, 0x10, 0x50, 0x5 } };
程序下载地址:Face
程序运行结果:点阵模块显示笑脸和囧脸~
face.h文件通过点阵取模软件获得:
点阵模块配合按键模块,做打乒乓游戏!请移步下面网址查看:Arduino驱动8*8点阵模块 附原理图及一个打乒乓球的游戏代码
参考资料
更多建议和问题欢迎反馈至 YFRobot论坛
购买方式:YFRobot 电子工作室