8*8点阵屏

作者:hardihuang   hardihuang   
Arduino接口接口MAX7219-LED显示模块

迟早,Arduino发烧友总是会遇到点矩阵显示。它是二维图案化的LED阵列,用于表示字符,符号和图像。几乎所有现代户外LED显示器都使用点矩阵。

而且,没有什么比MAX7219 IC更好的选择了。这是控制单个矩阵的简单且有点便宜的方式。此外,它们可以链接在一起,以控​​制较大项目中的两个或多个点矩阵。

总体而言,它们很有趣,也非常有用,所以让我们开始吧。

MAX7219模块概述 #

MAX7219分支板有几种,其中两种更为流行-一种是通用模块,另一种是FC-16模块。

max7219模块变体

典型的MAX7219模块包含一个8×8点矩阵显示器和一个MAX7219 LED显示驱动器。让我们一一了解他们。

点矩阵显示

8x8点阵显示

典型的单色8×8点矩阵单元具有16个引脚,每行8个针脚,每列8个针脚。所有行和列都连接在一起的原因是为了减少所需的引脚数。如果不是这种情况,那么一个8×8点矩阵单元将需要65个引脚,每个LED一个,一个公共阳极或阴极连接器。通过将行和列连接在一起,仅需要16个引脚。这种用较少的引脚控制大量LED的技术称为多路复用(Multiplexing)

8x8点阵内部结构复用

在这种技术中,每一列都在很短的时间内被激活,并且同时通过寻址相应的行来点亮该列上的LED。列的切换速度非常快(每秒几百或数千次),以至于人眼的余辉感知到显示屏已完全点亮。因此,一次最多只能点亮八个LED。

led矩阵显示工作动画视觉的持久性

MAX7219芯片

关于多路复用的烦人的事情是,您需要使用8个功率晶体管,并且必须不断刷新显示以保持图像稳定。

输入功能强大的MAX7219芯片,它可以为您完成所有控制和刷新工作。您所要做的就是通过4引脚SPI接口发送串行命令,它将自动处理其余的工作。

MAX7219 IC

它可以完全控制64个单独的LED,包括保持相同的亮度,并允许您使用硬件或软件(或两者)来调整LED的亮度。一旦显示由微控制器更新,MAX7219便负责以800 Hz刷新显示的所有工作。从而消除了微控制器的开销,而这可能会做其他重要的事情。

您甚至可以在节电模式下关闭显示屏,并且在显示屏关闭时仍可以发送数据。另一个好处是,开机时,它会保持LED熄灭,因此在操作的最初几秒钟内不会出现古怪的显示。

MAX7219芯片通过SPI接口进行通信,因此只需3个数据引脚即可连接至微控制器,此外,我们可以使用相同的3根线将多个模块菊花链在一起,以进行更大的显示。

设置最大电流和亮度 #

MAX7219芯片允许您使用硬件或软件(或两者)来调节显示器的亮度。为了在硬件水平上调节亮度,MAX7219转接板带有一个电阻(RSet)。

MAX7219 RSET电阻,用于设置亮度

该电阻器负责设置流入LED的电流的上限,从而设置显示器的整体亮度。

下表显示了根据LED矩阵的电压和正向电流应使用的电阻器值。例如,如果您有一个2V 20 mA LED,则您的电阻值将为28kΩ(该值以kΩ为单位)。

SEG(mA)LED(V)
1.52.02.53.03.5
4012.211.811.010.69.69
3017.817.115.815.014.0
2029.828.025.924.522.6
1066.763.759.355.451.2

本教程后面将介绍通过软件调整亮度。

MAX7219模块引脚排列 #

无论选择哪种模块版本,该模块上都会有两个连接器。

MAX7219点矩阵LED显示模块引脚排列

输入接头

模块一端的中断引脚用于与微控制器通信。

VCC连接到5V。由于显示器的高电流消耗(如果亮度一直升高,最高可达1A),建议直接从外部电源运行,而不是从Arduino的5V电源运行。否则,请确保将亮度保持在50%以下,以使Arduino的稳压器不会过热。

地线 连接到共同点。

DIN标准是数据输入。将其连接到微控制器的任何数字引脚。

CS /负载是片选(有时标记为LOAD)。将其连接到微控制器的任何数字引脚。

时钟是时钟引脚。将其连接到微控制器的任何数字引脚。

输出接头

当您想以菊花链方式连接显示器时,可以使用模块另一端的分断销。

VCC 连接到下一个模块上的5V。

地线 连接到下一个模块的GND。

DOUT 是数据输出,并连接到下一个模块的DIN引脚。

CS /负载 连接到下一个模块上的CS / LOAD。

时钟 连接到下一个模块上的CLK。

用Arduino UNO接线MAX7219模块 #

既然我们了解了有关模块的所有知识,就可以开始将其连接到Arduino了!

首先,为模块供电。因为显示屏消耗大量电流,所以我们将通过外部电源而不是Arduino板的5V电源运行模块。如果要使用单个MAX7219模块,则可以直接从Arduino给模块供电,但是如果可以的话,请避免使用它。

现在,我们只剩下用于SPI通信的引脚了。由于MAX7219模块需要大量数据传输,因此当连接至微控制器上的硬件SPI引脚时,它将提供最佳性能。硬件SPI引脚比软件SPI快得多。

请注意,每个Arduino开发板都有不同的SPI引脚,应相应连接。对于诸如UNO / Nano V3.0之类的Arduino板,这些引脚为数字13(SCK),12(MISO),11(MOSI)和10(SS)。

如果您使用其他Arduino板,建议在继续之前检查有关“ SPI引脚位置”的官方文档。

以下是通用MAX7219模块的实验连接:

接线通用MAX7219 LED显示模块和Arduino

以下是FC-16 MAX7219模块的连接:

接线带有Arduino的FC16 MAX7219 LED显示模块

如果要以菊花链方式连接多个显示器以创建更大的显示器,请将第一个显示器的DOUT连接到下一个显示器的DIN。VCC,GND,CLK和CS将在显示器之间共享。

一旦您的模块连接到Arduino,就该编写一些代码了!

库安装 #

控制MAX7219模块需要大量工作。幸运的是,编写了MD_Parola库来隐藏MAX7219的复杂性,以便我们可以发出简单的命令来控制显示。

要安装库,请导航至“草图”>“包含库”>“管理库…”,等待库管理器下载库索引并更新已安装库的列表。

Arduino库安装-在Arduino IDE中选择管理库

输入“ max72xx ”过滤搜索。应该有几个条目。寻找MajicDesignsMD_MAX72XX。单击该条目,然后选择“安装”。

md_max72xx库安装

该MD_MAX72XX库是特定于硬件的库,用于处理较低级别的功能。它需要与MD_Parola库配对才能创建许多不同的文本动画,例如滚动和精灵文本效果。也安装此库。

md_parola库安装

基本的Arduino代码–打印文本 #

对于我们的第一个实验,我们将在显示器上打印一个没有任何动画的简单文本。

但是在继续上载草图之前,您需要进行一些更改以使其适合您。您必须修改以下两个变量。

做出改变

第一个变量HARDWARE_TYPE告诉arduino您正在使用哪个版本的模块。

  • 如果使用的模块通常带有绿色PCB和通孔MAX7219 IC,则将设置HARDWARE_TYPEGENERIC_HW,如下所示。max7219通用模块
  • 如果使用的模块通常带有蓝色PCB和SMD MAX7219 IC,则将设置HARDWARE_TYPEFC16_HW,如下所示。MAX7219 FC 16模块

使用第二个变量,MAX_DEVICES设置要使用的8×8点矩阵显示的数量。8×8矩阵计为1个设备,因此,如果要控制8×32模块,必须将其设置MAX_DEVICES为4(8×32显示屏包含4个MAX7219 IC)。

完成后,继续尝试草图,然后我们将对其进行详细剖析。

// Including the required Arduino libraries
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

// Uncomment according to your hardware type
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW

// Defining size, and output pins
#define MAX_DEVICES 4
#define CS_PIN 3

// Create a new instance of the MD_Parola class with hardware SPI connection
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

void setup() {
	// Intialize the object
	myDisplay.begin();

	// Set the intensity (brightness) of the display (0-15)
	myDisplay.setIntensity(0);

	// Clear the display
	myDisplay.displayClear();
}

void loop() {
	myDisplay.setTextAlignment(PA_LEFT);
	myDisplay.print("Left");
	delay(2000);
	
	myDisplay.setTextAlignment(PA_CENTER);
	myDisplay.print("Center");
	delay(2000);

	myDisplay.setTextAlignment(PA_RIGHT);
	myDisplay.print("Right");
	delay(2000);

	myDisplay.setTextAlignment(PA_CENTER);
	myDisplay.setInvert(true);
	myDisplay.print("Invert");
	delay(2000);

	myDisplay.setInvert(false);
	myDisplay.print(1234);
	delay(2000);
}

输出

上载草图后,必须正确调整显示的方向才能看到输出。如果您使用的是通用模块,请调整其方向,使MAX7219 IC位于顶部。如果您使用的是FC-16模块,请调整其方向,以使DIN侧保持在右侧。

如果一切顺利,您将看到以下输出。

MAX7219 LED显示屏Arduino文本输出

代码说明

第一步是包括所有必需的Arduino库。如前所述,MD_MAX72XX库实现LED矩阵的硬件特定功能,而MD_Parola库实现文本效果。您还必须包括SPI库,该库已预先安装在Arduino IDE中。该库用于通过SPI在显示器和Arduino之间进行通信。

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

接下来,我们需要指定正在使用的硬件。由于我们在实验中使用的是FC-16模块,因此HARDWARE_TYPE将设置为FC16_HW。我们使用的MAX7219 IC数量为4,因此MAX_DEVICES设置为4。最后,定义了显示器的CS引脚所连接的引脚。

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CS_PIN 3

接下来,使用函数创建MD_Parola类的新实例MD_Parola()。此功能需要三个参数,第一个是硬件类型,第二个是CS引脚,第三个是最大连接设备数。

MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

在代码的设置部分,我们首先使用函数初始化对象begin()。显示屏的亮度可以通过功能进行设置setIntensity()。您可以输入介于0(最小亮度)和15(最大亮度)之间的值。该功能displayClear()清除显示。

void setup() {
  myDisplay.begin();
  myDisplay.setIntensity(0);
  myDisplay.displayClear();
}

在代码的循环部分中,我们首先使用函数设置要打印的文本的对齐方式setTextAlignment()。您可以左,中,右对齐文本用PA_LEFTPA_CENTERPA_RIGHT分别。

接下来,字符串’Left’印有myDisplay.print("Left")。请注意," "由于我们正在打印文本字符串,因此需要在文本周围加上引号。当您要打印数字时,不需要引号。举个例子myDisplay.print(1234)。您也可以使用功能反转显示setInvert()

void loop() {
	myDisplay.setTextAlignment(PA_LEFT);
	myDisplay.print("Left");
	delay(2000);
	
	myDisplay.setTextAlignment(PA_CENTER);
	myDisplay.print("Center");
	delay(2000);

	myDisplay.setTextAlignment(PA_RIGHT);
	myDisplay.print("Right");
	delay(2000);

	myDisplay.setTextAlignment(PA_CENTER);
	myDisplay.setInvert(true);
	myDisplay.print("Invert");
	delay(2000);

	myDisplay.setInvert(false);
	myDisplay.print(1234);
	delay(2000);
}

Arduino代码–滚动文本 #

当您想在点矩阵显示器上打印消息时,通常会发现该显示器太小而无法容纳整个消息。解决方案是使用滚动文本效果。以下示例显示了如何滚动消息。

// Including the required Arduino libraries
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

// Uncomment according to your hardware type
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW

// Defining size, and output pins
#define MAX_DEVICES 4
#define CS_PIN 3

// Create a new instance of the MD_Parola class with hardware SPI connection
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

void setup() {
	// Intialize the object
	myDisplay.begin();

	// Set the intensity (brightness) of the display (0-15)
	myDisplay.setIntensity(0);

	// Clear the display
	myDisplay.displayClear();

	myDisplay.displayScroll("Hello", PA_CENTER, PA_SCROLL_LEFT, 100);
}

void loop() {
	if (myDisplay.displayAnimate()) {
		myDisplay.displayReset();
	}
}

如果一切正常,您将看到以下输出。

MAX7219 LED显示屏arduino滚动输出

代码说明

您会注意到,设置部分末尾的代码的第一部分与前面的示例完全相同。在设置部分的末尾,将displayScroll()使用该功能。

myDisplay.displayScroll("Hello", PA_CENTER, PA_SCROLL_LEFT, 100);

如您所见,此函数采用四个参数:displayScroll(pText,align,textEffect,speed)

  • pText–是文本字符串。您的留言在这里。
  • align–设置可选暂停期间的文本对齐方式。您可以使用与上一个示例相同的对齐选项,例如PA_CENTER,PA_LEFT或PA_RIGHT。
  • textEffect–指定滚动效果。将其设置为PA_SCROLL_LEFT将向左滚动文本。
  • speed-确定动画的速度。速度是动画帧之间的时间(以毫秒为单位)。时间短可加快动画播放速度。

除此之外,在循环部分中,仅使用两个函数来创建滚动文本。首先,我们displayAnimate()if语句中使用该函数。此函数滚动文本,并在滚动完成后返回true。滚动完成后,我们使用功能重置显示displayReset(),以便我们连续滚动。

void loop() {
	if (myDisplay.displayAnimate()) {
		myDisplay.displayReset();
	}
}

有关其他文本效果,请访问github上的MD_Parola库参考

rreference:

Interfacing MAX7219 LED Dot Matrix Display with Arduino

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注