arduino点阵声音频谱_Arduino基础入门篇19—点阵屏

本文介绍了如何使用Arduino Uno R3驱动8x8点阵屏,包括点阵屏的工作原理、管脚定义、电路搭建和代码实现。通过实验步骤展示了如何进行逐行、逐列扫描,以实现点阵屏的显示效果。
摘要由CSDN通过智能技术生成

将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 = 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. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

7848f0b14881

程序下载

4. 实验现象

LED点阵屏点亮然后熄灭,然后逐列点亮,逐行点亮。

7848f0b14881

实验现象

5. 实验分析

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

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

该项目用于使用Arduino制作32频段音频(音乐)频谱分析仪/可视化器。 硬件组件: Arduino Nano R3× 1 电阻10k欧姆× 1 电阻4.75k欧姆× 3 电容器100 nF× 2 电阻100k欧姆× 2 SparkFun按钮开关12mm× 1 32x8 LED矩阵显示器× 1 手动工具和制造机器: 烙铁(通用) 该项目用于使用Arduino制作32频段音频(音乐)频谱分析仪。该项目的预期受众是任何音频爱好者,学生或初学者,他们对电子元件,Arduino和C编程有基本的了解。该项目中使用的组件是低成本的项目,易于组装。 该频谱分析仪的主要特点: 使用易于安装的库“arduinoFFT”和“MD_MAX72xx” 支持五种不同的显示模式,可通过按钮切换 音频信号的左右声道都是混合的,这样你就不会错过任何节拍 原型使用32x8 LED矩阵显示器,这可以改变和轻松修改 音频可以从耳机输出或音乐系统/放大器的线路输出馈送 电阻值不是很严格,您可以选择任何最接近的值。请确保R1和R2(参考原理图)具有相同的值。 程序流程图: 系统描述: Arduino板(ATmega328P)内置模数转换器(ADC),用于将输入音频信号转换为数字样本。ADC配置为采样时钟频率为38.46khz的输入信号。这是通过将ADC预分频器配置为32来实现的。采样频率为38.64Khz意味着数字样本可以再现高达19.32Kz(奈奎斯特定理)的输入频率,这对于音频信号来说已经足够了。 正如我在开始时提到的,该项目的目的是显示音频音乐信号的频谱。因此,左右音频通道混合在一起并馈入ADC的A0模拟输入。您可以使用音频分配器电缆,以便您可以将相同的音乐同时馈送到频谱分析仪和另一个放大器(如果需要)。 ADC配置为使用外部参考电压。在这个项目中,参考电压来自Arduino板上的3.3v稳压电源。当模拟信号在零电压电平之上和之下振荡时,我们需要在ADC的模拟输入端产生直流偏置。这可确保ADC输出不会截断输入信号的负周期。相同的3.3v稳定电压由两个电阻R1和R2分压,然后馈入模拟输入以进行直流偏置。使用此直流偏置,即使输入信号断开,ADC也会在输出中产生512。稍后在代码中,这个由DC偏置引起的512被减去,使得读数代表实际的输入信号变化。 ArduinoFFT库是将输入模拟信号转换为频谱的代码的核心。我发现这个库易于使用,并为该项目生成了最准确的输出。Prototype配置为生成64个样本,并使用这些样本进行FFT。ArduinoFFT库可以对16到128之间的样本进行FFT,这可以在程序中进行配置。但arduinoFFT库计算速度慢,有128个样本,因此我坚持64个样本中最好的最高。 本项目使用的显示为32列×8行LED矩阵。MD_MAX72xx库使显示控制部件非常容易。该库提供打开/关闭该程序中正在使用的列中任意数量的LED的功能。每个频带的幅度被映射在0到8之间,这取决于每个列中的LED的相应数量的LED被接通。 该程序提供五种显示模式,基本上通过在每列的不同位置打开/关闭LED来实现。您可以轻松修改/创建不同的模式。这里使用按钮来改变显示模式,转动显示图案移动到下一个,最后重置为默认模式。按钮连接到其中一个数字输入,并在每一轮显示刷新后扫描该输入。 频率响应: 经验证,系统能够响应高达18.6Khz的频率
引用和提供了两个不同的Arduino点阵库文件,分别是17Maker arduino库-mixly版和Arduino LedControl库文件。 17Maker arduino库-mixly版是通过第三方库实现MAX7219点阵显示。在代码中,通过超声波模块触发,当距离大于50厘米时显示笑脸,当距离小于等于50厘米时显示爱心。使用了MAX7219点阵显示模块和Mixly软件进行图形化编程。 Arduino LedControl库文件是另一个方便的库文件,用于控制LED点阵显示。在代码中,通过定义DIN、CS和CLK引脚,可以通过控制信号来控制LED点阵显示。通过设置字节数组的元素来定义要显示的图案。 另外,还有一个完整的示例代码使用了FastLED库来控制LED点阵显示。在代码中,通过设置LED灯珠的数量、数据引脚、LED灯带型号和LED灯珠的排列顺序,以及设置亮度等参数,可以控制LED点阵显示效果。 综上所述,Arduino点阵库主要有17Maker arduino库-mixly版和Arduino LedControl库文件,可以通过这些库文件来实现不同的点阵显示效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [第三方17Maker arduino库-mixly版实现MAX7219点阵显示](https://blog.csdn.net/KKomorebi/article/details/91903974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Arduino LedCountrol库文件](https://download.csdn.net/download/qzh1797/10503822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [arduino/Mixly WS2812点阵屏,FASTLED库学习](https://blog.csdn.net/moshanghuaw/article/details/121807276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值