8×8点阵屏的探索日记

正文索引 [隐藏]

↑8×8点阵屏大概长这个样子,强迫症福利.jpg 观察

点阵屏是个啥?

简单点说….就是把N个发光二极管封装在一起就组成了数码管,将更多的LED组合在一起就组成了点阵屏。

从网上搜的一些介绍…

LED点阵屏由LED发光二极管组成,通过控制LED亮灭来显示文字、图片、动画、视频等,被广泛应用于公共场合做信息展示,如广告屏、公告牌等。

LED点阵屏按照LED发光颜色可分为单色、双色、三色灯等,可显示红、黄、绿甚至是真彩色。根据LED的数量又分为4×4、8×8、16×16等不同类型。多色点阵屏工艺要求相对较高,需要考虑多种颜色混合时对色彩的影响。这里我们通过单色8×8点阵屏来了解其原理。

↑目前手头上有的两种型号…没在学校就从网上找了个图

手头上在用的型号是 HL-M1588BR

相关资料

从百度找的电路图…

凑合看看吧…一个大胆的猜想…有数字那一面从左到右为1-8

根据点阵屏管脚定义,点阵屏的[9, 14, 8, 12, 1, 7, 2, 5]分别连接开发板的[6,11, 5, 9, 14, 4, 15, 2],这8个引脚为LED的正极;

点阵屏的[13, 3, 4, 10, 6, 11, 15, 16]分别连接开发板的[10,16, 17, 7, 3, 8, 12, 13],这8个引脚为LED的负极。

这里需要注意,Uno R3开发板的A0A5也可以做普通GPIO使用,编号分别为1419。

一个测试代码

/*
 * 点阵屏显示驱动
 */

int leds[8] = {6, 11, 5, 9, 14, 4, 15, 2}; //点阵屏正极引脚
int gnds[8] = {10, 16, 17, 7, 3, 8, 12, 13}; //点阵屏负极引脚

void setup() {
  for (int i = 0; i < 8; i++)
  {
    pinMode(leds[i], OUTPUT);
    pinMode(gnds[i], OUTPUT);
    digitalWrite(gnds[i], HIGH); //负极引脚拉高,熄灭所有LED
  }
}

void ledopen()
{
  for (int i = 0; i < 8; i++)//将点阵屏正极拉高,负极拉低,开启显示
  {
    digitalWrite(leds[i], HIGH);
    digitalWrite(gnds[i], LOW);
  }
}

void ledclean()
{
  for (int i = 0; i < 8; i++)//将点阵屏正极ladies,负极拉高,关断显示
  {
    digitalWrite(leds[i], LOW); 
    digitalWrite(gnds[i], HIGH);
  }
}

//逐列扫描
void ledCol()
{
  for (int i = 0 ; i < 8; i++)
  {
    digitalWrite(gnds[i], LOW); 
    for (int j = 0; j < 8; j++)
    {
      digitalWrite(leds[j], HIGH);
      delay(40);
    }
    digitalWrite(gnds[i], HIGH);
    ledclean();
  }
}

//逐行扫描
void ledRow()
{
  for (int i = 0 ; i < 8; i++)
  {
    digitalWrite(leds[i], HIGH);
    for (int j = 0; j < 8; j++)
    {
      digitalWrite(gnds[j], LOW);
      delay(40);
    }
    digitalWrite(leds[i], LOW);
    ledclean();
  }
}

void loop() {

  ledopen(); //全部打开
  delay(500);
  ledclean(); //全部关闭
  delay(500);
  ledCol(); //列扫描
  ledRow(); //行扫描

}