Arduino 第十四章:led点阵

Arduino 第十三章:LED 点阵

一、LED 点阵概述

LED 点阵是由多个发光二极管(LED)按照矩阵形式排列组成的显示设备,常见的有 8x8、16x16 等规格。它可以用来显示字符、数字、简单图形以及动画等信息,在信息展示、广告屏、电子时钟等领域应用广泛。通过控制每个 LED 的亮灭状态,就能组合出各种不同的显示效果。

二、工作原理

(一)结构组成

LED 点阵通常由行线和列线组成,每个 LED 位于行线和列线的交叉点上。当对应的行线和列线加上合适的电压时,该交叉点的 LED 就会点亮。例如,在一个 8x8 的 LED 点阵中,有 8 条行线和 8 条列线,总共 64 个 LED。

(二)驱动方式

LED 点阵的驱动方式主要有静态驱动和动态扫描驱动两种。

  • 静态驱动:给每个 LED 提供独立的驱动电路,使其持续发光。这种方式的优点是显示稳定、亮度高,但需要大量的驱动电路,成本较高,适用于小规模的点阵显示。
  • 动态扫描驱动:逐行或逐列地依次点亮 LED,利用人眼的视觉暂留效应,让人感觉整个点阵都在同时发光。这种方式可以减少驱动电路的数量,降低成本,是最常用的驱动方式。

三、硬件连接

(一)所需材料

  • Arduino 开发板(如 Arduino Uno)
  • 8x8 LED 点阵模块
  • 杜邦线若干

(二)引脚说明

8x8 LED 点阵模块一般有 16 个引脚,8 个行引脚和 8 个列引脚。不同模块的引脚排列可能不同,需要参考模块的说明书来确定。

(三)连接方式

以动态扫描驱动为例,将 8 个行引脚分别连接到 Arduino 的 8 个数字引脚(如引脚 2 - 9),8 个列引脚分别连接到 Arduino 的另外 8 个数字引脚(如引脚 10 - 17)。

(四)连接图

          +5V (Arduino)
           |
           |
       [VCC] (LED Matrix)
       [Row 1] ---- Digital Pin 2 (Arduino)
       [Row 2] ---- Digital Pin 3 (Arduino)
       [Row 3] ---- Digital Pin 4 (Arduino)
       [Row 4] ---- Digital Pin 5 (Arduino)
       [Row 5] ---- Digital Pin 6 (Arduino)
       [Row 6] ---- Digital Pin 7 (Arduino)
       [Row 7] ---- Digital Pin 8 (Arduino)
       [Row 8] ---- Digital Pin 9 (Arduino)
       [Col 1] ---- Digital Pin 10 (Arduino)
       [Col 2] ---- Digital Pin 11 (Arduino)
       [Col 3] ---- Digital Pin 12 (Arduino)
       [Col 4] ---- Digital Pin 13 (Arduino)
       [Col 5] ---- Digital Pin A0 (Arduino)
       [Col 6] ---- Digital Pin A1 (Arduino)
       [Col 7] ---- Digital Pin A2 (Arduino)
       [Col 8] ---- Digital Pin A3 (Arduino)
       [GND] ---- GND (Arduino)

四、代码实现

(一)显示静态字符示例

// 定义行引脚
const int rowPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};
// 定义列引脚
const int colPins[8] = {10, 11, 12, 13, A0, A1, A2, A3};

// 字符 'A' 的点阵数据
byte letterA[8] = {
  B00111100,
  B01000010,
  B01000010,
  B01111110,
  B01000010,
  B01000010,
  B01000010,
  B00000000
};

void setup() {
  // 设置行引脚为输出模式
  for (int i = 0; i < 8; i++) {
    pinMode(rowPins[i], OUTPUT);
  }
  // 设置列引脚为输出模式
  for (int i = 0; i < 8; i++) {
    pinMode(colPins[i], OUTPUT);
  }
}

void loop() {
  // 逐列扫描显示字符
  for (int col = 0; col < 8; col++) {
    // 选通当前列
    digitalWrite(colPins[col], LOW);
    for (int row = 0; row < 8; row++) {
      // 根据点阵数据设置行引脚状态
      if (bitRead(letterA[row], col)) {
        digitalWrite(rowPins[row], HIGH);
      } else {
        digitalWrite(rowPins[row], LOW);
      }
    }
    // 短暂延时
    delay(1);
    // 关闭当前列
    digitalWrite(colPins[col], HIGH);
  }
}

(二)代码解释

  1. 引脚定义
    • const int rowPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};:定义 8 个行引脚连接到 Arduino 的数字引脚 2 - 9。
    • const int colPins[8] = {10, 11, 12, 13, A0, A1, A2, A3};:定义 8 个列引脚连接到 Arduino 的数字引脚 10 - 13 和模拟引脚 A0 - A3。
  2. 点阵数据
    • byte letterA[8]:定义字符 ‘A’ 的点阵数据,每个字节代表一行的 LED 状态,1 表示点亮,0 表示熄灭。
  3. setup() 函数
    • 通过 pinMode() 函数将行引脚和列引脚都设置为输出模式。
  4. loop() 函数
    • 使用 for 循环逐列扫描显示字符。
    • digitalWrite(colPins[col], LOW);:选通当前列。
    • 通过 bitRead() 函数读取点阵数据中对应位的值,根据该值设置行引脚的状态。
    • delay(1);:短暂延时,利用视觉暂留效应。
    • digitalWrite(colPins[col], HIGH);:关闭当前列。

五、注意事项

  • 电源供应:LED 点阵在点亮多个 LED 时需要较大的电流,要确保 Arduino 能够提供足够的电源,必要时可以使用外部电源。
  • 扫描速度:动态扫描驱动时,扫描速度要合适。速度过快可能导致显示亮度不足,速度过慢则会出现闪烁现象。
  • 引脚电平:不同的 LED 点阵模块可能对行引脚和列引脚的电平要求不同,需要根据实际情况调整代码中的高低电平设置。

六、应用拓展

  • 滚动显示:通过不断更新显示的点阵数据,可以实现字符或图形的滚动显示效果。
  • 动画展示:将多个不同的点阵数据按顺序显示,就能实现简单的动画效果。
  • 与传感器结合:结合传感器(如温度传感器、光线传感器等),根据传感器的数据动态改变 LED 点阵的显示内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967837.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从Word里面用VBA调用NVIDIA的免费DeepSeekR1

看上去能用而已。 选中的文字作为输入&#xff0c;运行对应的宏即可&#xff1b;会先MSGBOX提示一下&#xff0c;然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…

高通android WIFI debug

参考高通文档&#xff1a;80-76240-16_REV_AA_Wi-Fi_Debug_Techniques 大纲 一、 WLAN Debug Logs –logcat ■ Logcat log logcat is a command-line tool that dumps the log of system messages, ■ Including stack traces when the device throws an error. ■ Need t…

Python:凯撒密码

题目内容&#xff1a; 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法&#xff0c;它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符&#xff0c;对应关系如下&#xff1a; 原文&#xff1a;A B C D E F G H I J K L M N O P Q R …

基于STM32的智能鱼缸水质净化系统设计

&#x1f91e;&#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…

STM32系统架构介绍

STM32系统架构 1. CM3/4系统架构2. CM3/4系统架构-----存储器组织结构2.1 寄存器地址映射&#xff08;特殊的存储器&#xff09;2.2 寄存器地址计算2.3 寄存器的封装 3. CM3/4系统架构-----时钟系统 STM32 和 ARM 以及 ARM7是什么关系? ARM 是一个做芯片标准的公司&#xff0c…

美甲美睫门店拓客营销小程序开发

一套针对美甲美睫门店开发的营销拓客小程序 小程序支持线上线下服务预约、客户管理、多种客户营销方式以及员工管理、门店管理、门店营销活动创建开展等等。 用户端&#xff1a;服务预约、次卡、时卡办理&#xff0c;会员办理、会员升级、会员权益&#xff0c;复购攒积分&…

deepseek+“D-id”或“即梦AI”快速生成短视频

1、deepseek生成视频脚本 1.1、第一步&#xff1a;使用通用模板提出需求&#xff0c;生成视频脚本 对话输入示例脚本1&#xff1a; 大年初五是迎财神的日志&#xff0c;帮我生成10秒左右的短视频&#xff0c; 体现一家3口在院子里欢庆新年&#xff0c; 孩子在院子里放鞭炮烟…

【STM32】ADC|多通道ADC采集

本次实现的是ADC实现数字信号与模拟信号的转化&#xff0c;数字信号时不连续的&#xff0c;模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法&#xff0c;使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时&#xff0c;0~ 3.3v(模拟信…

从零到一:基于Rook构建云原生Ceph存储的全面指南(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件1&#xff09;Rook Operator2&#xff09;Rook Discover3&#xff09;Rook Agent 2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.3 获取…

如何在本地部署deepseek?

1、打开ollama官网&#xff0c;点download&#xff08;下载需要翻墙 https://ollama.com/ 2、双击下载好的OllamaSetup.exe&#xff0c;一直点下一步即可。 3、winR 输入cmd&#xff0c;打开命令提示符&#xff0c;输入ollama。有以下提示即安装完成。 4、可以根据 nvidia-…

团结引擎 OpenHarmony 平台全面支持 UAAL,实现引擎能力嵌入原生应用

团结引擎1.4版本已于近日正式发布&#xff01;在这一版本中&#xff0c;OpenHarmony 平台迎来了一个具有里程碑意义的更新&#xff1a;全面支持 Used as a Library&#xff08;UAAL&#xff09;。UAAL 这一技术方案&#xff0c;具有将引擎嵌入原生应用的独特能力&#xff0c;其…

【DeepSeek】在本地计算机上部署DeepSeek-R1大模型实战(完整版)

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(二)

接着上一篇文章&#xff1b;我们继续来研究es的复杂检索 文章目录 (1) bool用来做复合查询&#xff08;2&#xff09;Filter【结果过滤】&#xff08;3&#xff09;term&#xff08;4&#xff09;Aggregation&#xff08;执行聚合&#xff09; (1) bool用来做复合查询 复合语…

如何使用DiskGenius做备份并且恢复?

如何使用DiskGenius做备份并且恢复&#xff1f; 前言 前言 此操作适用于将1台旧电脑的数据迁移到新电脑上 一、进入PE使用DG分区进行备份镜像 二、分区备份 1选择要操作的硬盘——2选择操作分区——3备份分区 1选择文件路径&#xff08;保存pmf文件的位置选择存到U盘中&…

ZZNUOJ(C/C++)基础练习1091——1100(详解版)⭐

目录 1091 : 童年生活二三事&#xff08;多实例测试&#xff09; C C 1092 : 素数表(函数专题&#xff09; C C 1093 : 验证哥德巴赫猜想&#xff08;函数专题&#xff09; C C 1094 : 统计元音&#xff08;函数专题&#xff09; C C 1095 : 时间间隔&#xff08;多…

【Spring AI】基于SpringAI+Vue3+ElementPlus的QA系统实现一

整理不易&#xff0c;请不要吝啬你的赞和收藏。 1. 前言 这是 SpringAI 系列的第二篇文章&#xff0c;这篇文章将介绍如何基于 RAG 技术&#xff0c;使用 SpringAI Vue3 ElementPlus 实现一个 Q&A 系统。本文使用 deepseek 的 DeepSeek-V3 作为聊天模型&#xff0c;使用…

【Vue】在Vue3中使用Echarts的示例 两种方法

文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来&#xff0c;属于正常现象&#xff0c;多进几次就行 开始使用前&#xff0c;记得先…

1.【线性代数】——方程组的几何解释

1.方程组的几何解释 概述举例举例一1. matrix2.row picture3.column picture 概述 三种表示方法 matrixrow picturecolumn picture 举例 举例一 { 2 x − y 0 − x 2 y 3 \begin{cases} 2x - y 0 \\ -x 2y 3 \end{cases} {2x−y0−x2y3​ 1. matrix [ 2 − 1 − 1 2…

KITE提示词框架:引导大语言模型的高效新工具

大语言模型的应用日益广泛。然而&#xff0c;如何确保这些模型生成的内容在AI原生应用中符合预期&#xff0c;仍是一个需要不断探索的问题。以下内容来自于《AI 原生应用开发&#xff1a;提示工程原理与实战》一书&#xff08;京东图书&#xff1a;https://item.jd.com/1013604…