无需驱动程序和库即可控制 8x8 LED 矩阵
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
本视频是关于如何在不使用任何驱动芯片如MAX7219和相应库的情况下控制1088AS共阴极8x8 LED矩阵的教程。
我很快将创建控制相同矩阵的第二个教程,但这次使用 MAX7219 并比较结果。
完整的教程可以在这里找到:
如果您喜欢此内容并希望支持我创建类似视频,请访问我的 Patreon 网页
https://www.patreon.com/MariosIdeas
或者
https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7PD67JWZ9S3EJ&source=url
代码
- 测试 8x8 LED 矩阵的所有 64 个 LED
- 在 8x8 LED 矩阵上显示猫图像(多路复用)
- 在 8x8 LED 矩阵上滚动文本(多路复用)
测试 8x8 LED 矩阵的所有 64 个 LEDArduino
// Mario's Ideas// 通过一个一个点亮它们来测试 8x8 LED 矩阵中的所有 64 个 LED// Raws #define R1 2#define R2 3#define R3 4#define R4 5#define R5 6#define R6 7#define R7 8#define R8 9//Columns#define C1 10#define C2 11#define C3 12#define C4 13#define C5 A0#define C6 A1#define C7 A2#define C8 A3void setup() { pinMode( R1,输出); pinMode(R2,输出); pinMode(R3,输出); pinMode(R4,输出); pinMode(R5,输出); pinMode(R6,输出); pinMode(R7,输出); pinMode(R8,输出); pinMode(C1,输出); pinMode(C2,输出); pinMode(C3,输出); pinMode(C4,输出); pinMode(C5,输出); pinMode(C6,输出); pinMode(C7,输出); pinMode(C8, OUTPUT);// 在草图开始时关闭所有 LED digitalWrite(R1,HIGH);数字写入(R2,高);数字写入(R3,高);数字写入(R4,高);数字写入(R5,高);数字写入(R6,高);数字写入(R7,高);数字写入(R8,高);数字写入(C1,低);数字写入(C2,低);数字写入(C3,低);数字写入(C4,低);数字写入(C5,低);数字写入(C6,低);数字写入(C7,低); digitalWrite(C8,LOW);}void SelectRow(int row){ if (row==1) digitalWrite(R1,LOW);否则数字写入(R1,高); if (row==2) digitalWrite(R2,LOW);否则数字写入(R2,高); if (row==3) digitalWrite(R3,LOW);否则 digitalWrite(R3,HIGH); if (row==4) digitalWrite(R4,LOW);否则数字写入(R4,高); if (row==5) digitalWrite(R5,LOW);否则数字写入(R5,高); if (row==6) digitalWrite(R6,LOW);否则数字写入(R6,高); if (row==7) digitalWrite(R7,LOW);否则数字写入(R7,高); if (row==8) digitalWrite(R8,LOW); else digitalWrite(R8,HIGH);}void SelectColumn(int column){ if (column==1) digitalWrite(C1,HIGH);否则数字写入(C1,低); if (column==2) digitalWrite(C2,HIGH);否则数字写入(C2,低); if (column==3) digitalWrite(C3,HIGH);否则数字写入(C3,低); if (column==4) digitalWrite(C4,HIGH);否则数字写入(C4,低); if (column==5) digitalWrite(C5,HIGH);否则数字写入(C5,低); if (column==6) digitalWrite(C6,HIGH);否则数字写入(C6,低); if (column==7) digitalWrite(C7,HIGH);否则数字写入(C7,低); if (column==8) digitalWrite(C8,HIGH); else digitalWrite(C8,LOW);}void loop() { for (int i=1;i<9;i++) { for (int j=1;j<9;j++){ SelectRow(i);选择列(j);延迟(100); } }}
在 8x8 LED 矩阵上显示猫图像(多路复用)Arduino
// Mario 的想法// 在 8x8 LED 矩阵上显示猫图像(多路复用)// Raws #define R1 2#define R2 3#define R3 4#define R4 5#define R5 6#define R6 7#define R7 8 #define R8 9//Columns#define C1 10#define C2 11#define C3 12#define C4 13#define C5 A0#define C6 A1#define C7 A2#define C8 A3int pause=300; int Cat [8] [8] ={ {1,0,0,0,1,0,0,0}, {1,1,1,1,1,0,0,0}, {1,0 ,1,0,1,0,0,0}, {0,1,1,1,0,0,0,1}, {0,0,1,0,0,0,0,1}, {0,1,1,1,1,0,0,1}, {0,1,1,1,1,1,0,1}, {1,0,1,1,1,1,1 ,0}, };void setup() { pinMode(R1, OUTPUT); pinMode(R2,输出); pinMode(R3,输出); pinMode(R4,输出); pinMode(R5,输出); pinMode(R6,输出); pinMode(R7,输出); pinMode(R8,输出); pinMode(C1,输出); pinMode(C2,输出); pinMode(C3,输出); pinMode(C4,输出); pinMode(C5,输出); pinMode(C6,输出); pinMode(C7,输出); pinMode(C8,输出);数字写入(R1,高);数字写入(R2,高);数字写入(R3,高);数字写入(R4,高);数字写入(R5,高);数字写入(R6,高);数字写入(R7,高);数字写入(R8,高);数字写入(C1,低);数字写入(C2,低);数字写入(C3,低);数字写入(C4,低);数字写入(C5,低);数字写入(C6,低);数字写入(C7,低); digitalWrite(C8,LOW);}void SelectRow(int row){ if (row==1) digitalWrite(R1,LOW);否则数字写入(R1,高); if (row==2) digitalWrite(R2,LOW);否则数字写入(R2,高); if (row==3) digitalWrite(R3,LOW);否则 digitalWrite(R3,HIGH); if (row==4) digitalWrite(R4,LOW);否则数字写入(R4,高); if (row==5) digitalWrite(R5,LOW);否则数字写入(R5,高); if (row==6) digitalWrite(R6,LOW);否则数字写入(R6,高); if (row==7) digitalWrite(R7,LOW);否则数字写入(R7,高); if (row==8) digitalWrite(R8,LOW); else digitalWrite(R8,HIGH);}void Set_LED_in_Active_Row(int column, int state){ if (column==1) digitalWrite(C1,state); if (column==2) digitalWrite(C2,state); if (column==3) digitalWrite(C3,state); if (column==4) digitalWrite(C4,state); if (column==5) digitalWrite(C5,state); if (column==6) digitalWrite(C6,state); if (column==7) digitalWrite(C7,state); if (column==8) digitalWrite(C8,state); }void loop() { for (int j=0;j<8;j++){ SelectRow(j+1); for (int i=0;i<8;i++){ Set_LED_in_Active_Row(i+1 ,Cat[j][i]); } 延迟(2+暂停); }if(pause!=0 and pause>100)pause=pause-100;if(pause!=0 and pause<=100)pause=pause-10;}
在 8x8 LED 矩阵上滚动文本(多路复用)Arduino
// Mario's Ideas// 在 8x8 LED 矩阵上滚动文本(多路复用)// Raws #define R1 2#define R2 3#define R3 4#define R4 5#define R5 6#define R6 7#define R7 8# define R8 9//Columns#define C1 10#define C2 11#define C3 12#define C4 13#define C5 A0#define C6 A1#define C7 A2#define C8 A3int position=0; int Marios_ideas [8] [54] ={ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 ,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0}, {0,1,0,0,0,1,0,0,1,1,0,0,1,1,1 ,0,0,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,0,1,1 ,1,0,0,1,1,0,0,0,1,1,0,0,0,0}, {0,1,1,0,1,1,0,1,0,0 ,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,1,0,1,0 ,0,1,0,1,0,0,0,1,0,0,1,0,1,0,0,1,0,0,0}, {0,1,0,1,0 ,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,0 ,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0}, {0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,0,0,1,0,1,0,0,1,0,0 ,1,1,0,0,0,0,1,0,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,1,1 ,0,0,0,0}, {0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1 ,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0 ,1,0,0,0,0,1,0,0,0}, {0,1,0,0,0,1,0,1,0,0,1,0,1,0,0 ,1,0,1,0,0,1,1,0,0,1,0,0, 1,0,0,0,1,0,1,1,1,0,0,1,0 ,0,0,1,0,0,1,0,1,0,0,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0 ,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0} };void setup() { pinMode(R1,输出); pinMode(R2,输出); pinMode(R3,输出); pinMode(R4,输出); pinMode(R5,输出); pinMode(R6,输出); pinMode(R7,输出); pinMode(R8,输出); pinMode(C1,输出); pinMode(C2,输出); pinMode(C3,输出); pinMode(C4,输出); pinMode(C5,输出); pinMode(C6,输出); pinMode(C7,输出); pinMode(C8,输出);数字写入(R1,高);数字写入(R2,高);数字写入(R3,高);数字写入(R4,高);数字写入(R5,高);数字写入(R6,高);数字写入(R7,高);数字写入(R8,高);数字写入(C1,低);数字写入(C2,低);数字写入(C3,低);数字写入(C4,低);数字写入(C5,低);数字写入(C6,低);数字写入(C7,低); digitalWrite(C8,LOW);}void SelectRow(int row){ if (row==1) digitalWrite(R1,LOW);否则数字写入(R1,高); if (row==2) digitalWrite(R2,LOW);否则数字写入(R2,高); if (row==3) digitalWrite(R3,LOW);否则 digitalWrite(R3,HIGH); if (row==4) digitalWrite(R4,LOW);否则数字写入(R4,高); if (row==5) digitalWrite(R5,LOW);否则数字写入(R5,高); if (row==6) digitalWrite(R6,LOW);否则数字写入(R6,高); if (row==7) digitalWrite(R7,LOW);否则数字写入(R7,高); if (row==8) digitalWrite(R8,LOW); else digitalWrite(R8,HIGH);}void Set_LED_in_Active_Row(int column, int state){ if (column==1) digitalWrite(C1,state); if (column==2) digitalWrite(C2,state); if (column==3) digitalWrite(C3,state); if (column==4) digitalWrite(C4,state); if (column==5) digitalWrite(C5,state); if (column==6) digitalWrite(C6,state); if (column==7) digitalWrite(C7,state); if (column==8) digitalWrite(C8,state); }void loop() { for (int x=0; x<5;x++){ for (int j=0;j<8;j++){ SelectRow(j+1); for (int i=0;i<8;i++){ Set_LED_in_Active_Row(i+1,Marios_ideas[j][(i+position)-abs((i+position)/54)*54]); } 延迟(2); } } 位置=位置+1;}
定制零件和外壳
示意图
制造工艺