# Keyes 8x16 LED 点阵屏模块使用教程 (KS0357) ## 1. 产品简介 Keyes 8x16 LED 点阵屏模块(型号:KS0357)是一款非常实用的显示模块。该模块的正面排列了 128 个高亮 LED 灯,组成了一个 8行 x 16列 的点阵网络。模块的背面焊接了 **AIP1640 驱动芯片**,并提供了一个 4Pin 的防反插接口(包含 GND、VCC、SDA、SCL)。 该模块通过 **I2C 通信协议**与微控制器(如 Arduino)进行通信。通过编写代码控制 AIP1640 芯片,您可以轻松控制这 128 个 LED 灯的亮灭状态,从而在点阵屏上显示您想要的任何图像、字符或动画。此外,您还可以在代码中自由调节 LED 的显示亮度。 为了方便接线,产品附带了一根 HX-2.54 4Pin 连接线。 **产品清单:** * 1 x 8x16 LED 点阵屏模块 (间距 4mm) * 1 x HX-2.54 4Pin 连接线 ## 2. 产品特点 * 正面:LED 呈 8x16 矩阵排列。 * 背面:集成 AIP1640 驱动芯片。 * 接口:自带 4Pin I2C 通信接口。 * 安装:带有四个 2.2mm 固定孔,方便将其安装在其他设备或结构上。 ![产品外观正面和背面示意图](./images/KS0357-1.png) ## 3. 技术规格参数 在进行项目开发前,请务必了解该模块的技术参数,以确保安全和稳定运行: | 参数名称 | 规格值 | | :--- | :--- | | **工作电压** | DC 3.3V - 5V | | **功耗** | 400mW | | **振荡频率** | 450KHz | | **驱动电流** | 200mA | | **工作温度范围** | -40°C ~ 80°C | | **通信方式** | I2C 通信 | | **模块重量 (含线)** | 12.2g | | **产品尺寸** | 72mm x 32mm x 8mm | ## 4. 产品尺寸图 您可以参考以下尺寸图进行外壳设计或安装规划: ![产品尺寸图](./images/KS0357-2.png) ## 5. 硬件连接说明 您可以使用 Arduino UNO 开发板来测试此点阵屏模块。使用附带的 HX-2.54 4Pin 连接线可以非常方便地完成接线。 **接线对应关系:** * **GND** (点阵屏) -> **GND** (Arduino UNO) * **VCC** (点阵屏) -> **5V** (Arduino UNO) * **SDA** (点阵屏) -> **A4** (Arduino UNO) * **SCL** (点阵屏) -> **A5** (Arduino UNO) **接线示意图:** ![接线示意图](./images/KS0357-3.png) **背面接口特写:** ![背面接口特写](./images/KS0357-4.png) ## 6. 上传测试代码 接线完成后,您可以将以下示例代码复制并粘贴到 Arduino IDE 中进行上传测试。该代码将演示如何在点阵屏上显示不同的图案。 ```cpp // 数据显示方向:从右到左,从下到上,高电平点亮。 #define IIC_SCL A5 #define IIC_SDA A4 unsigned char data_line = 0; unsigned char delay_count = 0; void IIC_start(); void IIC_send(unsigned char send_data); void IIC_end(); // 定义要显示的4个图像数据 unsigned char table[4][16] = { {0x00,0x00,0x00,0x00,0x26,0x41,0x86,0x80,0x80,0x80,0x86,0x41,0x26,0x00,0x00,0x00}, // 图像 1 {0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x42,0x84,0x42,0x22,0x1C,0x00,0x00,0x00,0x00}, // 图像 2:心形 {0x00,0x00,0x00,0x00,0x20,0x44,0x42,0x84,0x80,0x84,0x42,0x44,0x20,0x00,0x00,0x00}, // 图像 3:笑脸 {0x00,0x00,0x00,0x00,0xC0,0x40,0xF8,0xD8,0x7E,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00} // 图像 4 }; void setup() { pinMode(IIC_SCL,OUTPUT); pinMode(IIC_SDA,OUTPUT); digitalWrite(IIC_SCL,LOW); digitalWrite(IIC_SDA,LOW); } void loop() { /************** 设置地址自动加1 ***************/ IIC_start(); IIC_send(0x40); IIC_end(); /************ 设置数据显示 *****************/ IIC_start(); IIC_send(0xc0); // 设置初始地址为 0 for(char i = 0; i < 16; i++) { IIC_send(table[data_line][i]); // 发送显示数据 } // 切换显示的图像 if(++delay_count >= 10) { delay_count = 0; data_line++; if(data_line >= 4) { data_line = 0; } } IIC_end(); /************* 设置亮度显示 ***************/ IIC_start(); IIC_send(0x8A); // 设置亮度 IIC_end(); delay(100); } /*---------------- I2C 通信底层函数 ----------------*/ void IIC_start() { digitalWrite(IIC_SCL,LOW); delayMicroseconds(3); digitalWrite(IIC_SDA,HIGH); delayMicroseconds(3); digitalWrite(IIC_SCL,HIGH); delayMicroseconds(3); digitalWrite(IIC_SDA,LOW); delayMicroseconds(3); } void IIC_send(unsigned char send_data) { for(char i = 0; i < 8; i++) { digitalWrite(IIC_SCL,LOW); delayMicroseconds(3); if(send_data & 0x01) { digitalWrite(IIC_SDA,HIGH); } else { digitalWrite(IIC_SDA,LOW); } delayMicroseconds(3); digitalWrite(IIC_SCL,HIGH); delayMicroseconds(3); send_data = send_data >> 1; } } void IIC_end() { digitalWrite(IIC_SCL,LOW); delayMicroseconds(3); digitalWrite(IIC_SDA,LOW); delayMicroseconds(3); digitalWrite(IIC_SCL,HIGH); delayMicroseconds(3); digitalWrite(IIC_SDA,HIGH); delayMicroseconds(3); } ``` ## 7. 预期显示效果 成功上传代码后,您应该会看到 LED 点阵屏上交替显示不同的图案,例如心形和笑脸。 ![心形图案显示效果](./images/KS0357-5.png) ![笑脸图案显示效果](./images/0357-10.png) ## 8. 工作原理与图像数据生成 您可能会好奇代码中的十六进制数据是如何变成图案的。让我们详细了解一下图像的设置原理。 在代码中,我们定义了一个二维数组 `table[4][16]` 来存储 4 个图像的数据。以第二个图像(心形)为例: ```c {0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x42,0x84,0x42,0x22,0x1C,0x00,0x00,0x00,0x00} ``` 请按照下图的方式放置您的点阵屏模块(注意引脚方向): ![点阵屏放置方向示意图](./images/0357-11.png) 点阵屏有 16 列,数组中的 16 个十六进制数分别对应这 16 列。我们需要将这些十六进制数转换为 8 位的二进制数: * 第 1 列: `0x00` -> `0 0 0 0 0 0 0 0` * 第 2 列: `0x00` -> `0 0 0 0 0 0 0 0` * 第 3 列: `0x00` -> `0 0 0 0 0 0 0 0` * 第 4 列: `0x00` -> `0 0 0 0 0 0 0 0` * 第 5 列: `0x00` -> `0 0 0 0 0 0 0 0` * 第 6 列: `0x1C` -> `0 0 0 1 1 1 0 0` * 第 7 列: `0x22` -> `0 0 1 0 0 0 1 0` * 第 8 列: `0x42` -> `0 1 0 0 0 0 1 0` * 第 9 列: `0x84` -> `1 0 0 0 0 1 0 0` * 第 10列: `0x42` -> `0 1 0 0 0 0 1 0` * 第 11列: `0x22` -> `0 0 1 0 0 0 1 0` * 第 12列: `0x1C` -> `0 0 0 1 1 1 0 0` * 第 13列: `0x00` -> `0 0 0 0 0 0 0 0` * 第 14列: `0x00` -> `0 0 0 0 0 0 0 0` * 第 15列: `0x00` -> `0 0 0 0 0 0 0 0` * 第 16列: `0x00` -> `0 0 0 0 0 0 0 0` **转换规则:** * 第一个十六进制数控制第一列的 LED 灯,第二个数据控制第二列,以此类推。 * 在 8 位二进制数中,**数字 `1` 表示 LED 点亮,数字 `0` 表示 LED 熄灭**。 * 对于每一列的 8 位二进制数,最低位(最右边)控制最下面一行(第8行)的 LED,最高位(最左边)控制最上面一行(第1行)的 LED。 ![二进制数据与LED点阵对应关系示意图](./images/0357-12.png) 通过这种方式,您可以自己在图纸上画出想要的图案,然后逐列计算出对应的十六进制数据,替换到代码的数组中即可。 *注:通常我们也可以使用一些取模软件来自动生成这些数据,从而大大简化图像设计的过程。*