热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Arduino点阵屏音频频谱分析:基础教程第19课——点阵屏应用详解

本教程介绍了如何利用Arduino控制点阵屏进行音频频谱分析。点阵屏由多个LED按矩阵排列组成,能够显示更为复杂的图形和信息。我们将详细探讨通过Arduino的IO端口直接驱动点阵屏的方法,以及如何实现基本的音频信号可视化。

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

1. 点阵屏介绍

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

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

7848f0b14881

8x8点阵屏

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

7848f0b14881

8x8内部结构

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

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

7848f0b14881

8X8点阵管脚

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

7848f0b14881

点阵屏管脚定义

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

2. 实验材料

Uno R3开发板

配套USB数据线

面包板及配套连接线

8*8点阵屏

3. 实验步骤

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。

实验原理图如下图所示:

7848f0b14881

实验原理图

实物连接图如下图所示:

7848f0b14881

实验原理图

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 &#61; 0; i <8; i&#43;&#43;)

{

pinMode(leds[i], OUTPUT);

pinMode(gnds[i], OUTPUT);

digitalWrite(gnds[i], HIGH); //负极引脚拉高&#xff0c;熄灭所有LED

}

}

void ledopen()

{

for (int i &#61; 0; i <8; i&#43;&#43;)//将点阵屏正极拉高&#xff0c;负极拉低&#xff0c;开启显示

{

digitalWrite(leds[i], HIGH);

digitalWrite(gnds[i], LOW);

}

}

void ledclean()

{

for (int i &#61; 0; i <8; i&#43;&#43;)//将点阵屏正极ladies&#xff0c;负极拉高&#xff0c;关断显示

{

digitalWrite(leds[i], LOW);

digitalWrite(gnds[i], HIGH);

}

}

//逐列扫描

void ledCol()

{

for (int i &#61; 0 ; i <8; i&#43;&#43;)

{

digitalWrite(gnds[i], LOW);

for (int j &#61; 0; j <8; j&#43;&#43;)

{

digitalWrite(leds[j], HIGH);

delay(40);

}

digitalWrite(gnds[i], HIGH);

ledclean();

}

}

//逐行扫描

void ledRow()

{

for (int i &#61; 0 ; i <8; i&#43;&#43;)

{

digitalWrite(leds[i], HIGH);

for (int j &#61; 0; j <8; j&#43;&#43;)

{

digitalWrite(gnds[j], LOW);

delay(40);

}

digitalWrite(leds[i], LOW);

ledclean();

}

}

void loop() {

ledopen(); //全部打开

delay(500);

ledclean(); //全部关闭

delay(500);

ledCol(); //列扫描

ledRow(); //行扫描

}

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

7848f0b14881

程序下载

4. 实验现象

LED点阵屏点亮然后熄灭&#xff0c;然后逐列点亮&#xff0c;逐行点亮。

7848f0b14881

实验现象

5. 实验分析

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

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



推荐阅读
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 使用CSS实现鼠标悬停时图片或按钮的平滑放大效果
    通过CSS技术,当鼠标悬停在图片或按钮上时,可以实现元素平滑放大的视觉效果,并可自由调整动画的持续时间。本文将详细介绍如何利用CSS实现这一功能。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文通过C++语言实现了一个递归算法,用于解析并计算数学表达式的值。该算法能够处理加法、减法、乘法和除法操作。 ... [详细]
  • 图像处理学习笔记:噪声分析与去除策略
    本文详细探讨了不同类型的图像噪声及其对应的降噪技术,旨在帮助读者理解各种噪声的本质,并掌握有效的降噪方法。文章不仅介绍了高斯噪声、瑞利噪声、伽马噪声、指数噪声、均匀噪声和椒盐噪声等常见噪声类型,还特别讨论了周期噪声的特性及处理技巧。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 探索百度WebFE团队打造的强大HTML5上传插件Web Uploader
    本文将详细介绍由百度WebFE团队开发的Web Uploader,这是一款集成了HTML5与Flash技术的上传组件,以其卓越的用户体验和强大的功能著称。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
author-avatar
美丽空间wo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有