48 x 8 滚动 LED 矩阵使用 Arduino。
组件和用品
| × | 1 | ||||
| × | 7 | ||||
| × | 56 | ||||
| × | 2 | ||||
| × | 21 | ||||
| × | 4 | ||||
| × | 6 | ||||
| × | 1 |
必要的工具和机器
| ||||
| ||||
|
应用和在线服务
|
关于这个项目
大家好!
该项目是关于使用 Arduino UNO 和 74HC595 移位寄存器制作 48x8 可编程滚动 LED 矩阵。
这是我第一个使用 Arduino 开发板的项目。尝试建造一个是我的老师给我的挑战。所以在接受这个挑战的时候,我什至不知道如何使用 arduino 使 LED 闪烁。所以,我认为即使是初学者也可以通过一点耐心和理解来做到这一点。我在网上找到了电路图,这是我构建这个项目的唯一参考。我开始对 arduino 中的移位寄存器和多路复用进行了一些研究。
电路
收集组件
我收集了来自不同来源的所有组件。我从在线网站上得到了这个 5mm 8x8 共阴极 LED 矩阵显示器。
构建原型
电路中可以看出,8行用一个移位寄存器来控制,列的控制我们每8列用一个移位寄存器。
因此,如果您能够制作一个简单的 8x8 矩阵,您只需复制用于列控制的电路部分并将矩阵扩展到任意数量的列即可。您只需为添加到电路中的每 8 列(一个 8x8 模块)添加一个 74hc595。牢记这一点,我制作了我的 8x8 原型。
焊接阶段
我拿了单独的点板来制作行和列控件以及将它们连接在一起的延长线和接头。
一旦你成功制作了一个 8x8 矩阵,你只需要菊花链更多的带有公共时钟的移位寄存器来驱动列。它只需要一个 74hc595 来驱动所有行。所以根据列数,可以添加更多的移位寄存器,可以添加的列数没有限制。
打造下半场
图> 图> 图>由于当时没有机会接触3D打印,我找了当地的木匠制作了一个案例。
他制作的箱子比我预期的要大得多,最好使用 Fusion 360 或任何其他设计软件设计一个较小的箱子并 3D 打印箱子。外壳上有孔以连接电源线和USB线。
代码
代码可在本项目的附件中找到。
在这里,我们将扫描行并为列线提供适当的逻辑电平。该代码将确定滚动消息的速度以及我们将要显示的消息。代码中默认滚动的方向是从右到左,但稍加修改,其他方向也可以实现。
结果
谢谢! :)
代码
- 48x8 LED 矩阵的 Arduino 代码
48x8 LED 矩阵的 Arduino 代码C/C++
48x8 LED 矩阵的 Aduino 代码。连接和代码在代码本身中作为注释进行了解释。/*///////////////////////////// ///////////////////////////////////////////////// *在 6 个或更多 8x8 LED 矩阵上显示滚动字符的 Arduino 代码。 * * 矩阵的编号可以通过对代码进行少量更改来增加。 * * 每条语句中都给出了注释以供编辑。 * * 由 Prasanth KS 编码 * * 联系方式:[email protected] */*////////////////////////////// //////////////////////////////////////////////////////////////////////////// [] ="WELCOME WIZ";//此处更改文字int scrollspeed=5;//设置滚动速度(lower=faster)int x;int y;//Columnsint clockPin1 =2; //Arduino 引脚连接到 74HC595int latchPin1 =3 的时钟引脚 11; //Arduino引脚连接到74HC595int dataPin1 =4的Latch Pin 12; //Arduino 引脚连接到 74HC595 的数据引脚 14 //Rowsint clockPin2 =5; //Arduino 引脚连接到 74HC595int latchPin2 =6 的时钟引脚 11; //Arduino引脚连接到74HC595int dataPin2 =7的Latch Pin 12; //Arduino 引脚连接到 74HC595 的数据引脚 14//BITMAP//此数组中的位表示矩阵的一个 LED//8 是行数,6 是 LED 矩阵字节位图的#[8][7]; int numZones =sizeof(位图)/8; // 一个区域指的是一个 8 x 8 矩阵(一组 8 列)int maxZoneIndex =numZones-1;int numCols =numZones * 8;//FONT DEFENITIONbytealphabets[][8] ={ {0,0,0, 0,0},//@ 作为空格 //{8,28,54,99,65},//<<{31, 36, 68, 36, 31},//A {127, 73, 73, 73, 54},//B {62, 65, 65, 65, 34},//C {127, 65, 65, 34, 28},//D {127, 73, 73, 65, 65}, //E {127, 72, 72, 72, 64},//F {62, 65, 65, 69, 38},//G {127, 8, 8, 8, 127},//H {0 , 65, 127, 65, 0},//I {2, 1, 1, 1, 126},//J {127, 8, 20, 34, 65},//K {127, 1, 1, 1, 1},//L {127, 32, 16, 32, 127},//M {127, 32, 16, 8, 127},//N {62, 65, 65, 65, 62}, //O {127, 72, 72, 72, 48},//P {62, 65, 69, 66, 61},//Q {127, 72, 76, 74, 49},//R {50 , 73, 73, 73, 38},//S {64, 64, 127, 64, 64},//T {126, 1, 1, 1, 126},//U {124, 2, 1, 2, 124},//V {126, 1, 6, 1, 126},//W {99, 20, 8, 20, 99},//X {96, 16, 15, 16, 96}, //Y {67, 69, 73, 81, 97},//Z};void setup() { pinMode(latchPin1, OUTPUT); pinMode(clockPin1, 输出); pinMode(dataPin1, 输出); pinMode(latchPin2, 输出); pinMode(clockPin2,输出); pinMode(dataPin2, 输出); //清除位图 for (int row =0; row <8; row++) { for (int zone =0; zone <=maxZoneIndex; zone++) { bitmap[row][zone] =0; } }}//FUNCTIONS//在矩阵中显示位图数组void RefreshDisplay(){ for (int row =0; row <8; row++) { int rowbit =1 <=0; zone--) { shiftOut (dataPin1, clockPin1, MSBFIRST, bitmap[row][zone]); } //同时翻转两个锁存器以消除闪烁 digitalWrite(latchPin1, HIGH);//将锁存器引脚 1 返回高电平以向芯片发送信号 digitalWrite(latchPin2, HIGH);//将锁存器引脚 2 返回到高电平以向芯片发送信号 // 等待延迟微秒(300); }}// 将行和列转换为位图位并将其关闭/onvoid Plot(int col, int row, bool isOn){ int zone =col / 8; int colBitIndex =x % 8;字节 colBit =1 <
> 1; // 将下一个区域的最低位移到该区域的最高位。 if (zone
示意图
仅供参考。关于引脚连接,请参考代码中的注释。制造工艺