在本教程中,我们将使用Arduino Uno设计一个8x8 LED矩阵滚动显示,它将显示滚动字母。
8x8 LED矩阵包含64个以矩阵形式排列的LED(发光二极管),因此名称为LED矩阵。我们将通过将这64个LED焊接到穿孔板或DOT PCB上来制作此矩阵。LED可以是任何颜色,请选择随您可用的颜色。然后,我们将为Arduino编写一个程序来控制这64个LED矩阵。根据程序,UNO为适当的LED供电,以滚动方式显示字符。
所需组件:
- Arduino Uno
- 64个LED
- 穿孔板和其他焊接工具
- 1KΩ电阻器(8个)
- 电源(5v)
电路及工作说明:
矩阵排列有64个LED。因此,我们有8列8行。在那些行和列上,一行中的所有正极端子都聚集在一起。对于每一行,该行中的所有8个LED都有一个公共正极端子。如下图所示,
因此,对于8行,我们有8个公共正极端子。如图中所示,考虑第一行,从D57到D64的8个LED具有一个公共正极端子,并由“ POSITIVE0”表示。现在,如果我们要让矩阵的第一行中的一个或所有LED发光,那么我们应该给LED矩阵的PIN0供电。同样,如果我们要使任何ROW中的任何LED(或所有LED)发光,则需要给相应行的相应公共正极端子引脚供电。
这还没有结束,仅仅让MATRIX ROWS保持正供应就不会产生任何收益。我们需要将LED负极接地以使其发光。因此,在8x8 LED矩阵中,任何列中的LED的所有负极端子都聚集在一起以形成八个公共负极端子,就像第一列中的所有负极端子都连接到PIN-A1(NEGATIVE7)一样。如下图所示:
在焊接Perfboard上的LED时,应注意这些引脚。
现在,如果需要将第一列中的任何LED接地,则将MATRIX的PIN-A1(NEGATIVE7)接地,并将所有第一列中的LED接地。所有其他七个常见的负列均采用相同的过程。
从现在开始,您就知道“普通肯定”和“普通否定”如何工作。让我们将它们放在一起,看看它们是如何协同工作的,最终的8x8 LED滚动滚动矩阵显示如下所示:
使用多路复用驱动8x8 LED矩阵:
现在假设我们要打开LED57,然后需要给UNO的PIN0供电并将UNO的PIN-8接地。现在要同时打开LED57和LED50,我们需要给PIN0,PIN1上电,并将PIN8,PIN9接地。但是,这样做不仅会打开D57,D50,而且还会打开D49,D58。为了避免这种情况,我们使用一种称为Multiplexing的技术。我们已经详细讨论了8x8 LED矩阵中的多路复用技术。浏览该文章以获取详细说明。在这里,我们简单地解释复用。
人眼无法捕获超过30 HZ的频率。也就是说,如果LED以30HZ或更高的频率连续打开和关闭。眼睛看到LED持续亮着。但是事实并非如此,LED实际上会不断地打开和关闭。此技术称为多路复用。
举例来说,我们只想打开LED57和LED50,而不打开D49和D58。窍门是,我们将首先为第一行供电,以打开LED57并等待1mSEC,然后将其关闭。然后,我们将为第二行供电以打开LED50,并等待1mSEC,然后将其关闭。该周期随着高频持续进行,LED57和LED50将快速开启和关闭,并且两个LED在我们眼中似乎一直处于开启状态。意味着我们一次只为一行供电,从而消除了打开其他行中其他LED的机会。我们将使用这种技术来显示所有字符。
还有一个名为 LedControlMS.h 的库来处理所有这种复杂的复用,您只需要输入要在LED矩阵上打印的字符或数字,就可以查看带有MAX7219项目的Arduino LED矩阵以了解更多详细信息。
编程说明:
在我们的代码中,我们为每个字符编写了十进制值,并将这些值编程到Arduino中。该程序已编写为每0.2秒将这些值移至下一行,这将被视为向上滚动字符,这非常简单。
要更改要显示的字符,只需根据下面给出的字符值替换 char ALPHA 数组中的值,
24,60,102,126,102,102,102,0,0,0,// A 124,102,102,124,102,102,124,0,0,0,// B 60,102,96,96,96,102,60,0,0,0,// C 120,108,102,102,102,102,102,108,120,0,0,0 ,// D 126,96,96,120,96,96,126,0,0,0,// E 126,96,96,120,96,96,96,0,0,0,// F 60,102,96,110,102,102,60, 0,0,0,// G 102,102,102,126,102,102,102,0,0,0,// H 60,24,24,24,24,24,24,60,0,0,0,// I 30,12,12,12 ,12,108,56,0,0,0,// J 102,108,120,112,120,108,102,0,0,0,// K 96,96,96,96,96,96,126,0,0,0,// L 99,119,127,107,99, 99,99,0,0,0,// M 102,118,126,126,110,102,102,0,0,0,// N 60,102,102,102,102,102,102,60,0,0,0,// O 124,102,102,124,96,96,96,0,0,0 ,// P 60,102,102,102,102,60,14,0,0,0,// Q 124,102,102,124,120,108,102,0,0,0,// R 60,102,96,60,6,102,60,0,0,0,// S 126 ,24,24,24,24,24,24,24,0,0,0,// T 102,102,102,102,102,102,60,0,0,0,// U 102,102,102,102,102,60,24,0,0,0,// V 99,99,99,107,127,119,99,0,0,0,// W 102,102,60,24,60,102,102,0,0,0,// X 102,102,102,60,24,24,24,0,0,0,// Y 126,6,12 ,24,48,96,126,0,0,0,// Z
就像您要在LED矩阵上显示DAD一样,然后首先通过放置上面列表中的字符D,A和D的值来替换 char ALPHA 数组中的Characters值:
char ALPHA = {0,0,0,0,0,0,0,0,0,0,0,120,108,102,102,102,102,102,0,0,0,24,60,102,126,102,102,102,0,0,0,120,108,102,102,102,102,102,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0};
现在总值是5 * 10 = 50,所以
替换,for(int x = 0; x <142; x ++)// 150-8(停止溢出){……..用,for(int x = 0; x <42; x ++)// 50-8 (停止溢出){……..
因此,您只需要更改号码。
这样就完成了编程,现在您可以滚动8x8 LED矩阵上的任何文本,并通过演示视频检查下面的完整代码。