Arduino 驱动 8×8 LED点阵屏

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

Arduino 驱动 8×8 LED点阵屏

将8个LED发光二极管封装在一起就组成了数码管,将更多的LED组合在一起就组成了点阵屏。本篇我们来认识点阵屏,通过Arduino的IO口直接驱动点阵屏来了解其驱动方式。

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

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

Arduino 驱动 8×8 LED点阵屏

不同点阵屏封装不同,8×8点阵屏由8行8列共64个LED灯组成,其内部结构如下图:

Arduino 驱动 8×8 LED点阵屏

每个LED放置在行线和列线的交叉点上,当对应的某一行电平拉高,某一列电拉低,则对应交叉点的LED就会点亮。

8×8点阵屏有16个管脚,将有丝印的一边朝下,逆时针编号为1.8,9.16。

Arduino 驱动 8×8 LED点阵屏

其对应内部管脚定义如下如所示:

Arduino 驱动 8×8 LED点阵屏

比如我们要点亮第一行第一列LED灯,则对应将点阵屏的第9脚拉高,第13脚拉低,其他LED控制以此类推即可。

二.实验材料
Uno R3开发板
配套USB数据线
面包板及配套连接线
8*8点阵屏

三.实验步骤

1.根据原理图搭建电路。
根据点阵屏管脚定义,点阵屏的[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。

实验原理图如下图所示:

Arduino 驱动 8×8 LED点阵屏

实物连接图如下图所示:

Arduino 驱动 8×8 LED点阵屏

2.新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

/*
 * Matrix
 * 点阵屏显示驱动
 */
 
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(); //行扫描 
}

3.连接开发板,设置好对应端口号和开发板类型,进行程序下载。

Arduino 驱动 8×8 LED点阵屏

四.实验现象
LED点阵屏点亮然后熄灭,然后逐列点亮,逐行点亮。

Arduino 驱动 8×8 LED点阵屏

五.实验分析
LED点阵屏不过是多个LED组合在一起来驱动,基本的驱动方式是逐行扫描或者逐列扫描。通过两个for循环嵌套来进行操作,外部循环控制列,内部循环遍历行,或者外部循环控制行,内部循环遍历列,相对操作还是非常简单的。当逐行或者逐列扫描足够快的时候,人眼就会因为视觉暂存而看到同时点亮的效果。

当对多块点阵屏进行操作时,使用IO引脚直接驱动的方式就显得不切实际了,一方面这需要占用很多的IO口,另一方面IO驱动能力毕竟有限,所以点阵屏还有专门的驱动电路和IC芯片来满足更高的应用要求。

原文:blog.csdn.net/TonyIOT/article/details/82696645

- 本文内容来自网络,如有侵权,请联系本站处理。

2024-06   阅读(1)   评论(0)
 标签: maker Arduino LED点阵屏

涨知识
IMU

IMU(Inertial Measurement Unit),即惯性测量单元,用于测量物体三轴姿态角(或角速率)以及加速度。

评论:
相关文章

ESP32 使用DAC模拟输出完成两路呼吸灯

ESP32的DAC函数可以实现真正的模拟输出。


在 ESP32 上使用 LEDC (PWM)

ESP32 没有Arduino输出 PWM 的 analogWrite(pin, value) 方法,取而代之的 ESP32 有一个 LEDC 来实现PWM功能。


《米思齐实战手册:Arduino图形化编程指南》

本书由少年创学院联合创始人兼院长、知名创客程晨撰写,以Arduino作为硬件平台,介绍了使用米思齐(Mixly)软件进行程序开发的方法。


Arduino UNO R4 WiFi 官方介绍文档

本文档作为UNO R4 WiFi的技术概览,您将找到一系列资源和指南链接,帮助您开始下一个项目。


OneButton: 用于使用单个按钮进行多用途输入的Arduino库

Arduino OneButton库是一个用于简化按钮操作的库,它可以轻松地处理按钮的单击、双击和长按等操作。适用于Arduino开发板以及ESP32等其他基于Arduino的开发板。


Arduino Bootloader

本文从Arduino Uno入手,看看怎样在这个"简单"的8bit单片机搭建一个属于自己的bootloader


Arduino IDE第三方开发包的制作

许多硬件厂商都希望自己的开发板能被Arduino IDE集成开发环境所支持。这里就以小脚丫开发板所使用的开发包为例,介绍一下第三方开发包的制作方法。


ESP32 SD卡读写

ESP32 可以通过 SDMMC 和 SPI 两种方式读取SD/TF卡数据。


搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。