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 固定孔,方便将其安装在其他设备或结构上。

产品外观正面和背面示意图

3. 技术规格参数

在进行项目开发前,请务必了解该模块的技术参数,以确保安全和稳定运行:

参数名称

规格值

工作电压

DC 3.3V - 5V

功耗

400mW

振荡频率

450KHz

驱动电流

200mA

工作温度范围

-40°C ~ 80°C

通信方式

I2C 通信

模块重量 (含线)

12.2g

产品尺寸

72mm x 32mm x 8mm

4. 产品尺寸图

您可以参考以下尺寸图进行外壳设计或安装规划:

产品尺寸图

5. 硬件连接说明

您可以使用 Arduino UNO 开发板来测试此点阵屏模块。使用附带的 HX-2.54 4Pin 连接线可以非常方便地完成接线。

接线对应关系:

  • GND (点阵屏) -> GND (Arduino UNO)

  • VCC (点阵屏) -> 5V (Arduino UNO)

  • SDA (点阵屏) -> A4 (Arduino UNO)

  • SCL (点阵屏) -> A5 (Arduino UNO)

接线示意图:

接线示意图

背面接口特写:

背面接口特写

6. 上传测试代码

接线完成后,您可以将以下示例代码复制并粘贴到 Arduino IDE 中进行上传测试。该代码将演示如何在点阵屏上显示不同的图案。

// 数据显示方向:从右到左,从下到上,高电平点亮。
#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 点阵屏上交替显示不同的图案,例如心形和笑脸。

心形图案显示效果

笑脸图案显示效果

8. 工作原理与图像数据生成

您可能会好奇代码中的十六进制数据是如何变成图案的。让我们详细了解一下图像的设置原理。

在代码中,我们定义了一个二维数组 table[4][16] 来存储 4 个图像的数据。以第二个图像(心形)为例:

{0x00,0x00,0x00,0x00,0x00,0x1C,0x22,0x42,0x84,0x42,0x22,0x1C,0x00,0x00,0x00,0x00}

请按照下图的方式放置您的点阵屏模块(注意引脚方向):

点阵屏放置方向示意图

点阵屏有 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点阵对应关系示意图

通过这种方式,您可以自己在图纸上画出想要的图案,然后逐列计算出对应的十六进制数据,替换到代码的数组中即可。

注:通常我们也可以使用一些取模软件来自动生成这些数据,从而大大简化图像设计的过程。