【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板

偶然心血来潮,想要做一个音乐可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累些有用的音乐频谱可视化的资料,也会争取成型一些实用好玩的音乐可视器项目。

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第1张图片
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第2张图片

科普知识点:LED与LED显示屏
一、LED(Light Emitting Diode)
1、LED是发光二极管的简称。它是一种半导体光源,当电流通过它时会发光;即一种电致发光的半导体电子元件,其内电子与电子空穴复合,以光子的形式释放能量。发光二极管结构的核心部分是p-n结,周边部分有环氧树脂密封其引线与框架以保护内部芯线。当p-n结通以正向电流时,能发射可见或非可见辐射,此辐射为透过三价与五价元素所组成复合光源。发光二极管只能够往一个方向导通(通电),叫作正向偏置;当电流流过时,电子与电洞(电子空穴)在其内复合而发出单色光,这叫“电致发光效应”;而光线的波长、颜色跟其所采用的半导体物料种类与故意掺入的元素杂质有关。发光二极管具有效率高、寿命长、不易破损、反应速度快、可靠性高等传统光源不及的优点。
发光二极管于1962年出现时,只能发出低光度的红光,被惠普买下专利后当作指示灯利用。其后发展出其他单色光的版本,时至今日,能够发出的光已经遍及可见光、红外线及紫外线,光度亦提高到相当高的程度。随着白光发光二极管的出现,用途已由初期的指示灯及显示板等指示用途,逐渐发展至近年的照明用途。白光LED的发光效率近期亦有所进步,其每千流明成本,因大量资金投入已使价格下降,近年在照明用途上愈趋普及。
2、LED的结构
LED是特殊的二极管,和普通二极管一样由半导体芯片组成。半导体芯片是LED的核心,它附着在基底上,直接连接负极,正极则由导线连接阳极接柱,由反射碗增强芯片的照明效果,整个芯片被环氧树脂封装起来。直插式LED主要由以下几个部分构成:
芯片:(作用-光源发光)
支架:包括衬底及散热基座、引脚等(作用-散热、导电)
金线:(作用-导电)
透明树脂:(作用-保护晶粒、透光)

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第3张图片
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第4张图片

3、LED的主要特性
LED作为第四代新光源拥有很多前三代光源所没有的特点:效率高、寿命长、安全可靠性强、无热辐射性、属于冷光源,能准确控制光型及发光角度、利于环保、光源体积小,可随意组合等是显著特点,逐渐成为这个时代的主流光源。
(1)节能是LED灯最突出的特点——在能耗方面,LED灯的能耗是白炽灯的十分之一,是节能灯的四分之一。这是LED灯的一个最大的特点。现在的人们都崇尚节能环保,也正是因为节能的这个特点,使得LED灯的应用范围十分广泛,使得LED灯十分的受欢迎。
(2)可以在高速开关状态工作——我们平时走在马路上,会发现每一个LED组成的屏幕或者画面都是变化莫测的。这说明LED灯是可以进行高速开关工作的。但是,对于我们平时使用的白炽灯,则达不到这样的工作状态。在平时生活的时候,如果开关的次数过多,将直接导 致白炽灯灯丝断裂。这个也是LED灯受欢迎的重要原因。
(3)环保——LED灯内部不含有任何的汞等重金属材料,但是白炽灯中含有,这就体现了LED灯环保的特点。现在的人都十分重视环保,所以,会有更多的人愿意选择环保的LED灯。
(4)响应速度快——LED灯还有一个突出的特点,就是反应的速度比较快。只要一接通电源,LED灯马上就会亮起来。对比我们平时使用的节能灯,其反应速度更快,在打开传统灯泡时,往往需要很长的时间才能照亮房间,在灯泡彻底的发热之后,才能亮起来。
(5)有利于环保——LED为全固体发光体、耐冲击不易破碎、废弃物可回收、没有污染减少大量二氧化硫及氮化物等有害气体以及二氧化碳等温室气体的产生改善人们生活居住环境,可称“绿色照明光源。”
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第5张图片

4、LED的相关参数
(1)正向电压VF
指有正向电流流过时,阳极A与阴极K之间产生的电压。单位为V(伏特)。在正向电压正小于某一值(叫阈值)时,电流极小,不发光。当电压超过某一值后,正向电流随电压迅速增加、发光。而超过了正常工作电压,LED可能被击穿。通常,不同发光颜色的LED,其正常的正向电压也不同,如红灯通常是1.8~2.0V 之间,而蓝灯和白灯在2.8~3.3V之间。
(2)正向电流 IF
指有正向电流流过时,阳极A与阴极K之间产生的电流。单位为A(安培)。通常,LED的正向电流应控制在20mA以内,过大的电流容易导致LED的P、N之间的结点温度Tj过高而导致LED损坏或减少使用寿命。另外,LED 如同普通二极管一样,在电压增加时,电流会有很大程度的上升,所以一般LED发光二极管都串接有保护电阻。
(3)发光强度 IV
表示从特定方向观测到的亮度。单位cd(坎德拉,对应的更小单位是毫坎德拉, 即mcd),一单位立体角内发出一流明的光称为一坎德拉。比较光强时需要特别注意指向角。光强是指单位立体角内发出的光通量。透镜作为LED封装的组成部分可以向特定方向集中光输出(用透镜集光),即使光输出小也能集光,因此光强变大。需要特别指出的是,IV值通常需要指定该LED是在多大的正向电流IF下测量到的。
(4)光通量 Φv [lm]
是指从光源发射出来的全部光量。单位为lm(流明)。光通量(luminous flux)指人眼所能感觉到的辐射功率,它等于单位时间内某一波段的辐射能量和该波段的相对视见率的乘积。由于人眼对不同波长光的相对视见率不同,所以不同波长光的辐射功率相等时,其光通量并不相等。
(5)主波长 λD[nm]
LED一般用波长表示颜色。主波长相当于眼睛看到的颜色所对应的波长,与发光波长的峰值波长有差异,单位为nm(纳米)。
以下是各种发光颜色LED的波长参数:
■紫:400~435nm
■蓝:435~480nm
■蓝绿:480~500nm
■绿:500~560nm
■黄绿:560~580nm
■黄:580~595nm
■橙:595~610nm
■红:610~760nm
■白,通常用下面的色坐标来表示。或者简单用暖白、正白、冷白表示。
※备注:
以上波长范围、颜色标记根据文献不同略有差异,仅供参考。

二、LED显示屏(LED panel)
1、LED显示屏是一种平板显示器,由一个个小的LED模块面板组成,用来显示文字、图像、视频等各种信息的设备。LED电子显示屏集微电子技术、计算机技术、信息处理于一体,具有色彩鲜艳、动态范围广、亮度高、寿命长、工作稳定可靠等优点。LED显示屏广泛应用于商业传媒、文化演出市场、体育场馆、信息传播、新闻发布、证券交易等,可以满足不同环境的需要。
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第6张图片

2、LED显示屏是经LED点阵组成的电子显示屏,通过亮灭红绿灯珠更换屏幕显示内容形式如文字、动画、图片、视频的及时转化,通过模块化结构进行组件显示控制。主要分为显示模块、控制系统及电源系统。显示模块是LED灯点阵构成屏幕发光;控制系统则是调控区域内的亮灭情况实现对屏幕显示的内容进行转换;电源系统则是对输入电压电流进行转化使其满足显示屏幕的需要。

LED屏幕可实现对多种信息呈现模式的不同形式间的转化,并在室内、室外均可使用,有其他显示屏不可比拟的优势。其凭借光亮强度高、工作耗功较小、电压需求低、设备小巧便捷、使用年限长、耐冲击稳定、抗外界干扰强的特点,快速发展并广泛应用于各个领域。

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第7张图片
3、LED的发光颜色和发光效率与制作LED的材料和工艺有关 ,灯球刚开始全是蓝光的,后面再加上荧光粉,根据用户的不同需要,调节出不同的光色,广泛使用的有红、绿、蓝、黄四种。由于LED工作电压低(仅 1.2~4.0V),能主动发光且有一定亮度 ,亮度又能用电压(或电流)调节,本身又耐冲击、抗振动、寿命长(10 万小时),所以在大型的显示设备中,尚无其他的显示方式与LED显示方式匹敌。
把红色和绿色的LED晶片或灯管放在一起作为一个像素制作的显示屏称为三色或双基色屏,把红、绿、蓝三种LED晶片或灯管放在一起作为一个像素的显示屏叫三基色屏或全彩屏。如果只有一种色就叫做单色或单基色屏,制作室内 LED 屏的像素尺寸一般是1.5-12 毫米,常常采用把几种能产生不同基色的LED管芯封装成一体,室外LED 屏的像素尺寸多为6-41.5毫米,每个像素由若干个各种单色LED组成,常见的成品称象素筒,双色象素筒一般由2红1绿组成,三色象素筒用1红1绿1蓝组成。
无论用LED制作单色、双色或三色屏,欲显示图象需要构成像素的每个LED的发光亮度都必须能调节,其调节的精细程度就是显示屏的灰度等级。灰度等级越高,显示的图像就越细腻,色彩也越丰富,相应的显示控制系统也越复杂。一般 256 级灰度的图像,颜色过渡已十分柔和,而16级灰度的彩色图像,颜色过渡界线十分明显。所以,彩色LED屏当前都要求做成256级到4096级灰度的。

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第8张图片
4、LED显示屏基本原理
LED显示屏是一种新型的信息显示媒体,它是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。图示为8×8点阵LED显示屏的结构图,从图上看,8×8点阵共需要64个发光二极管,且每个发光二极管放置在行线和列线的交叉点上,当对应的某一行置高电平,某一列置低电平时,则相应的二极管点亮。例如要显示文字时,就可以按照组成文字的笔画将相应的二极管点亮,从而达到显示文字的目的,如图所示。而完整的点阵可由16×16、32×32等组成显示模块。单基色LED显示屏的每个像素由1个单色LED发光二极管组成,即每个像素包含1个LED发光二极管;双基色LED显示屏的每个像素由2个2种单色的LED发光二极管组成,即每个双基色像素包含2个LED发光二极管;而对于三基色全彩LED显示屏来说,组成像素点的二极管包括了3个或3个以上,如由分别发红光、绿光和蓝光的3个二极管组成,这样就可以根据三基色的配色原理,达到彩色显示的目的;而有些显示屏为了改善显示效果,可能由4个二极管组成:2个红光LED、1个绿光LED和1个蓝光LED。

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第9张图片
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第10张图片
5、LED显示屏的分类
(1)按显示颜色基色分:
a、 单色LED电子显示屏:单一颜色:有红色LED电子显示屏、白色LED电子显示屏、绿色LED电子显示屏、黄色LED电子显示屏、蓝色LED电子显示屏、紫色LED电子显示屏(玫瑰色LED电子显示屏)。
b、 双(基)色LED电子显示屏:红和绿两种基色,可显示红色、绿色和混合色黄色。
c、全彩色LED电子显示屏:红、绿、蓝三基色,256级灰度的全彩色显示屏可以显 示一千六百多万种色。
(2)按安装室内外环境或防水可以分为:
a、室内LED电子显示屏(不防水);
b、半户外(亚户外)LED电子显示屏 (不防水、一种只在门头或屋檐下才使用的单色LED电子显示屏,仅限文字走字信息条屏,通常一般不提这类分类);
c、户外LED电子显示屏(防水)。
(3)按发光像素点间距(P或PH)或直径(Φ)可分为 :
a、单双色:P10、P8、P7.62(老款是按直径叫Φ5)、P4.75(老款是按 直径叫 Φ3.75)、老款是按直径叫Φ3(无新款)
b、常规室内全彩 :P7.62、P6、P5、P4、P3、P2.5
c、小间距室内全彩P2、P1.923、P1.875、P1.667、P1.523、P1.4、P1.25、 P1.0、 P0.87……
d、户外全彩:P20、P16、P12、P13.3、P10、P8、P6、P5、P4、P3
e、常用在租赁屏上的:P5.68、P4.81、P3.91、P2.97、P2.60……。
(4)按灯珠分类为:
插灯式(老款);裱贴式(新款)。

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第11张图片
6、led显示屏发展史
LED显示屏是上世纪八十年代后期在全球迅速发展起来的新型信息显示媒体。它利用发光二极管(LED)构成的点阵模块或像素单元组成显示大屏幕,以可靠性、使用寿命长、环境适应能力强、价格性能比高、使用成本低等特点,在短短的一二十年中,迅速成长为平板显示的主流产品,在信息显示领域得到了广泛的应用。我国的LED显示屏产业经过几年的发展,基本形成了一批具有一定规模的骨干企业。LED显示屏的有许多社会经济的领域,它的发展大概经历了以下三个阶段:
(1)1990年以前LED显示屏的成长形成时期。一方面,受LED材料器件的限制,LED显示屏的应用领域没有广泛展开,另一方面,LED显示屏技术基本上是通讯控制方式,客观上影响了显示效果。这一时期的LED显示屏在国外应用较广,国内很少,产品以红、绿双基色为主,以LED显示屏控制卡的方式为通讯控制,灰度等级为单点4级调灰,产品的成本比较高。
(2)九十年代,这一阶段是LED显示屏迅速发展的时期。进入九十年代,全球信息产业高速增长,信息技术各个领域不断突破,LED显示屏在LED材料和LED显示屏技术方面也不断出现新的成果。蓝色LED晶片研制成功,全彩色LED显示屏进入市场;电子计算机及微电子领域的技术发展,在显示屏控制技术领域出现了视频控制技术,显示屏灰度等级实现16级灰度和64级灰度调灰,显示屏的动态显示效果大大提高。这一阶段,LED显示屏在我国发展速度非常迅速,从初期的几家企业、年产值几千万元发展到几十家企业、年产值几亿元,产品应用领域涉及金融证券、体育、机场、铁路、车站、公路交通、商业广告、邮电电信等诸多领域,特别是1993年证券股票业的发展更引发了LED显示屏市场的大幅增长。LED显示屏在平板显示领域的主流产品局面基本形成,LED显示屏产业成为新兴的高科技产业。
(3)二十一世纪以来,LED显示屏的发展进入一个总体稳步提高产业格局调整完善的时期。2000年以来,LED大屏幕产业内部竞争加剧,形成了许多中小企业,LED显示屏价格大幅回落,应用领域更为广阔,产品在质量、标准化等方面出现了一系列新的问题,有关部门对LED显示屏的发展予以重视并进行了适当的规范和引导,目前这方面的工作正在逐步深化。

7、LED显示屏的扫描方式
在LED显示屏一定的显示区域内,同时点亮的行数与整个区域行数的比例,称扫描方式;室内单双色led显示屏一般为1/16扫描,室内全彩led显示屏一般是1/8 扫描,室外单双色led显示屏一般是1/4扫描,室外全彩led显示屏一般是静态扫描。目前市场上LED显示屏的驱动方式有静态扫描和动态扫描两种,静态扫描又分为静态实像素和静态虚拟,动态扫描也分为动态实像和动态虚拟;驱动器件一般用国产HC595,台湾MBI5026,日本东芝TB62726,一般有1/2 扫,1/4扫,1/8扫,1/16扫。

举列说明:一个常用的全彩模组像素为 168 (2R1G1B),如果用MBI5026 驱动,模组总共使用的是:168*(2+1+1)=512 ,MBI5026 为 16位芯片,512/16=32
(1)如果用32 个MBI5026芯片,是静态虚拟
(2)如果用16个MBI5026芯片,是动态1/2扫虚拟
(3)如果用8个MBI5026芯片,是动态 1/4扫虚拟
如果板子上两个红灯串连
(4)用24个MBI5026芯片,是静态实像素
(5)用12个MBI5026芯片,是动态1/2扫实像素
(6)用6个MBI5026芯片,是动态1/4扫实像素
在LED显示屏,扫描方式有1/16,1/8,1/4,1/2,静态。如果区分呢?一个最简单的办法就是数一下LED显示屏单元板的LED的数目和74HC595的数量。
计算方法:LED的数目除以74HC595的数目再除以8 =几分之一扫描
实像素与虚拟是相对应的:简单来说,实像素屏就是指构成显示屏的红绿蓝三种发光管中的每一种发光管最终只参与一个像素的成像使用,以获得足够的亮度。
虚拟像素是利用软件算法控制每种颜色的发光管最终参与到多个相邻像素的成像当中,从而使得用较少的灯管实现较大的分辨率,能够使显示分辨率提高。

8、LED显示屏使用注意事项
(1)开关顺序:开屏时——先开机,后开屏。 关屏时——先关屏,后关机。
(先关计算机不关显示屏,会造成屏体出现高亮点,led烧毁灯管,后果严重。)
(2)开关屏时间隔时间要大于5分钟。
(3)计算机进入工程控制软件后,方可开屏通电。
(4)避免在全白屏幕状态下开屏,因为此时系统的冲击电流最大。
(5)避免在失控状态下开屏,因为此时系统的冲击电流最大。
(6)电子显示屏体一部分出现一行非常亮时,应注意及时关屏,在此状态下不宜长时间开屏。
(7)经常出现显示屏的电源开关跳闸,应及时检查屏体或更换电源开关。
(8)定期检查挂接处的牢固情况。如有松动现象,注意及时调整,重新加固或更新吊件。
(9)环境温度过高或散热条件不好时,LED照明应注意不要长时间开屏。

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第12张图片

为做这个实验,收了二张P10LED单元板,一张是P10(1R)V706模组,另一张是P10(1R)V701AG模组,都是32X16 LED显示屏。

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第13张图片

找到几个模组单元板的参考电原理图

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第14张图片
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第15张图片

P10(1R)V706模组技术参数

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第16张图片
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第17张图片
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第18张图片
信号引脚定义

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第19张图片
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第20张图片

EN:此引脚用于通过向其提供 PWM 脉冲来控制 LED 面板的亮度。
A、B:这些称为多路复用选择引脚。他们采用数字输入来选择任何多路复用行
移位时钟 (CLK)、存储时钟 (SCLK):这些是常规移位寄存器控制引脚
DATA:此引脚用于 PWM 形式的数据输入。

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第21张图片
P10显示模块的特点:
¼ duty scan type [模块上四分之一的LED由IC一次驱动]
亮度:3500nits 至 4500nits
最大功耗:20W
DC 5V电压输入
IP65防水
高对比度和视角
1W像素配置

P10显示模块规格:
输入电压:5V
最大电流输入:4A
平均功耗:8W-10W
颜色:红色
像素间距:10mm
LED像素尺寸:32X16 = 512

自制HUB12接口UNO扩展板
以Proto Shield 原型扩展板为主,加装二只P16插座,便于做实验

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第22张图片

做好的是这样(P5排插座是DS1307时钟模块的接口)

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第23张图片

实验接线示意图

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第24张图片

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第25张图片

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第26张图片

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第27张图片

使用 Arduino 编程 P10 LED 模块,常用驱动库是
DMD.h 下载链接:https://github.com/freetronics/DMD
TimerOne.h 下载链接:https://github.com/PaulStoffregen/TimerOne

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第28张图片

【花雕动手做】有趣好玩的音乐可视化系列项目(31)–LCD1602液晶屏
项目程序之一:点亮屏幕滚动显示“Hello World 1234567890”

/*
  【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏
  项目程序之一:点亮屏幕滚动显示“Hello World 1234567890”
*/

#include //导入驱动库
#include 
#include 
#include "SystemFont5x7.h"
#include "Arial_black_16.h"
#define ROW 1
#define COLUMN 1
#define FONT Arial_Black_16//字体16
DMD led_module(ROW, COLUMN);//行、列

void scan_module() {
  led_module.scanDisplayBySPI();//模块扫描显示 By SPI
}

void setup() {
  Timer1.initialize(2000);
  Timer1.attachInterrupt(scan_module);
  led_module.clearScreen( true );
}

void loop() {
  led_module.selectFont(FONT);//设置字体
  led_module.drawMarquee("Hello World 1234567890", 25, (32 * ROW), 0);
  long start = millis();
  long timming = start;
  boolean flag = false;
  while (!flag)
  {
    if ((timming + 20) < millis())
    {
      flag = led_module.stepMarquee(-1, 0);
      timming = millis();
      delay(50);//通过延时时间来调整字幕滚动快慢
    }
  }
}

实验场景图

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第29张图片
【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第30张图片

实验的视频记录
优酷:https://v.youku.com/v_show/id_XNTg3MjI2MjE0MA==.html?spm=a2hcb.playlsit.page.1

程序说明
包括所有必需的字体库,在我们的例子中,我们使用“Arial Black 字体”进行显示。

#include
#include
#include
#include “SystemFont5x7.h”
#include “Arial_black_16.h”

在下一步中,定义 LED 显示板的行数和列数。在我们的例子中,我们只使用一个模块,因此 ROW 值和 COLUMN 值将为 1。然后为显示板上滚动的文本定义字体名称 - Arial_Black_16 。

#define ROW 1
#define COLUMN 1
#define FONT Arial_Black_16 DMD led_module(ROW, COLUMN);

函数scan_module()通过 SPI 终端检查来自 Arduino 端的任何传入数据。如果是,那么它将触发一个中断引脚来执行某些事件。

void scan_module() {
led_module.scanDisplayBySPI();
}

在setup()中,初始化定时器并将中断附加到函数scan_module。函数clearScreen(true)用于设置所有像素最初都关闭以清除显示板。

void setup() {
Timer1.initialize(2000);
Timer1.attachInterrupt(scan_module);
led_module.clearScreen( true );
}

然后,要在模块中显示字符串,请使用 selectFont() 函数选择字体并使用drawMarquee()函数在显示屏上打印字符串消息“ Welcome to Circuit Digest ” 。

led_module.selectFont(FONT);
led_module.drawMarquee(“Hello World 1234567890”, 25, (32 * ROW), 0);

最后,要滚动 LED 显示板上的文本,请使用一定的时间段将整个消息从右向左移动。

long start = millis();
long timming = start;
boolean flag = false;
while (!flag)
{
if ((timming + 20) < millis())
{
flag = led_module.stepMarquee(-1, 0);
timming = millis();
}
}

【花雕动手做】有趣好玩的音乐可视化系列项目(31)–LCD1602液晶屏
项目程序之二:Freetronics DMD库的综合测试

/*
  【花雕动手做】有趣好玩的音乐可视化系列项目(31)--LCD1602液晶屏
  项目程序之二:Freetronics DMD库的综合测试
*/

#include    //导入相关驱动库
#include 
#include 
#include "SystemFont5x7.h"
#include "Arial_black_16.h"

//以 dmd 的身份启动 DMD 库
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

/*-------------------------------------------------------------------
  Timer1 (TimerOne) 驱动的 DMD 刷新扫描的中断处理程序,这得到
  在 Timer1.initialize() 中设置的周期调用;
-------------------------------------------------------------------*/
void ScanDMD() {
  dmd.scanDisplayBySPI();
}

/*-------------------------------------------------------------------
  设置
  在主循环开始之前由 Arduino 架构调用
-------------------------------------------------------------------*/
void setup(void) {
  //初始化TimerOne用于扫描和刷新显示的中断/CPU使用率
  Timer1.initialize( 5000 );           //调用 ScanDMD 的周期(以微秒为单位)。任何超过 5000 (5ms) 的时间都可以看到闪烁。
  Timer1.attachInterrupt( ScanDMD );   //将 Timer1 中断附加到 ScanDMD 到 dmd.scanDisplayBySPI()
  //清除/初始化内存中的DMD像素
  dmd.clearScreen( true );   //true 为正常(所有像素关闭),false 为负(所有像素打开)
}

/*-------------------------------------------------------------------
  环形
  Arduino架构主循环
-------------------------------------------------------------------*/
void loop(void) {
  byte b;
  // 10 x 14 字体时钟,包括OR 和 NOR 模式演示,以便可以覆盖闪烁的冒号
  dmd.clearScreen( true );
  dmd.selectFont(Arial_Black_16);
  dmd.drawChar(  0,  3, '2', GRAPHICS_NORMAL );
  dmd.drawChar(  7,  3, '3', GRAPHICS_NORMAL );
  dmd.drawChar( 17,  3, '4', GRAPHICS_NORMAL );
  dmd.drawChar( 25,  3, '5', GRAPHICS_NORMAL );
  dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  delay( 1000 );
  dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖关闭
  delay( 1000 );
  dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  delay( 1000 );
  dmd.drawChar( 15,  3, ':', GRAPHICS_NOR    );   //时钟冒号覆盖关闭
  delay( 1000 );
  dmd.drawChar( 15,  3, ':', GRAPHICS_OR     );   //时钟冒号覆盖
  delay( 1000 );

  //滚动文本
  dmd.drawMarquee("Scrolling Text", 14, (32 * DISPLAYS_ACROSS) - 1, 0);
  long start = millis();
  long timer = start;
  boolean ret = false;
  while (!ret) {
    if ((timer + 30) < millis()) {
      ret = dmd.stepMarquee(-1, 0);
      timer = millis();
    }
  }
  // 一半像素
  dmd.drawTestPattern( PATTERN_ALT_0 );
  delay( 1000 );

  // 另一半打开
  dmd.drawTestPattern( PATTERN_ALT_1 );
  delay( 1000 );

  // 显示一些文本
  dmd.clearScreen( true );
  dmd.selectFont(System5x7);
  for (byte x = 0; x < DISPLAYS_ACROSS; x++) {
    for (byte y = 0; y < DISPLAYS_DOWN; y++) {
      dmd.drawString(  2 + (32 * x),  1 + (16 * y), "freet", 5, GRAPHICS_NORMAL );
      dmd.drawString(  2 + (32 * x),  9 + (16 * y), "ronic", 5, GRAPHICS_NORMAL );
    }
  }
  delay( 2000 );

  // 在显示器外面画一个边框
  dmd.clearScreen( true );
  dmd.drawBox(  0,  0, (32 * DISPLAYS_ACROSS) - 1, (16 * DISPLAYS_DOWN) - 1, GRAPHICS_NORMAL );
  delay( 1000 );

  for (byte y = 0; y < DISPLAYS_DOWN; y++) {
    for (byte x = 0; x < DISPLAYS_ACROSS; x++) {
      // draw an X
      int ix = 32 * x;
      int iy = 16 * y;
      dmd.drawLine(  0 + ix,  0 + iy, 11 + ix, 15 + iy, GRAPHICS_NORMAL );
      dmd.drawLine(  0 + ix, 15 + iy, 11 + ix,  0 + iy, GRAPHICS_NORMAL );
      delay( 1000 );

      //画一个圆
      dmd.drawCircle( 16 + ix,  8 + iy,  5, GRAPHICS_NORMAL );
      delay( 1000 );

      // 绘制一个填充框
      dmd.drawFilledBox( 24 + ix, 3 + iy, 29 + ix, 13 + iy, GRAPHICS_NORMAL );
      delay( 1000 );
    }
  }

  // 条纹追逐者
  for ( b = 0 ; b < 20 ; b++ )
  {
    dmd.drawTestPattern( (b & 1) + PATTERN_STRIPE_0 );
    delay( 200 );
  }
  delay( 200 );
}

实验场景图

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第31张图片

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板_第32张图片
实验的视频记录
https://v.youku.com/v_show/id_XNTg3MTM3MTYxNg==.html?spm=a2hcb.playlsit.page.1

你可能感兴趣的:(开源硬件,嵌入式硬件,单片机,Arduino,物联网,矩阵)