Arduino基础入门篇19—点阵屏

|

    阅读本文大概需要6分钟。

|

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

1. 点阵屏介绍

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

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

Arduino基础入门篇19—点阵屏
8×8点阵屏

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

Arduino基础入门篇19—点阵屏
8×8内部结构

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

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

Arduino基础入门篇19—点阵屏
8X8点阵管脚

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

Arduino基础入门篇19—点阵屏
点阵屏管脚定义

比如我们要点亮第一行第一列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开发板的A0~A5也可以做普通GPIO使用,编号分别为14~19。

实验原理图如下图所示:

Arduino基础入门篇19—点阵屏
实验原理图

实物连接图如下图所示:

Arduino基础入门篇19—点阵屏
实验原理图

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

 1/*
2  *  Matrix
3  *  点阵屏显示驱动
4  */

5
6int  leds[8]  =  {61159144152 };   //点阵屏正极引脚
7int  gnds[8]  =  {1016177381213 };   //点阵屏负极引脚
8
9void  setup()  {
10    for  (int  i  =  0;   i  <  8;   i++)
11    {
12        pinMode(leds[i],  OUTPUT);
13        pinMode(gnds[i],  OUTPUT);
14        digitalWrite(gnds[i],  HIGH);   //负极引脚拉高,熄灭所有LED
15    }
16 }
17
18void  ledopen()
19
{
20    for  (int  i  =  0;   i  <  8;   i++)//将点阵屏正极拉高,负极拉低,开启显示
21    {
22        digitalWrite(leds[i],  HIGH);
23        digitalWrite(gnds[i],  LOW);
24    }
25 }
26
27void  ledclean()
28
{
29    for  (int  i  =  0;   i  <  8;   i++)//将点阵屏正极ladies,负极拉高,关断显示
30    {
31        digitalWrite(leds[i],  LOW);  
32        digitalWrite(gnds[i],  HIGH);
33    }
34 }
35
36//逐列扫描
37void  ledCol()
38
{
39    for  (int  i  =  0  ;   i  <  8;   i++)
40    {
41        digitalWrite(gnds[i],  LOW);  
42        for  (int  j  =  0;   j  <  8;   j++)
43        {
44            digitalWrite(leds[j],  HIGH);
45            delay(40);
46        }
47        digitalWrite(gnds[i],  HIGH);
48        ledclean();
49    }
50 }
51
52//逐行扫描
53void  ledRow()
54
{
55    for  (int  i  =  0  ;   i  <  8;   i++)
56    {
57        digitalWrite(leds[i],  HIGH);
58        for  (int  j  =  0;   j  <  8;   j++)
59        {
60            digitalWrite(gnds[j],  LOW);
61            delay(40);
62        }
63        digitalWrite(leds[i],  LOW);
64        ledclean();
65    }
66 }
67
68void  loop()  {
69
70    ledopen();   //全部打开
71    delay(500);
72    ledclean();   //全部关闭
73    delay(500);
74    ledCol();   //列扫描
75    ledRow();   //行扫描
76
77 }

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

Arduino基础入门篇19—点阵屏
程序下载

4. 实验现象

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

Arduino基础入门篇19—点阵屏
实验现象

5. 实验分析

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

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

Arduino基础入门篇19—点阵屏
扫码加入微信公众号:TonyCode


原文始发于微信公众号(

TonyCode

):Arduino基础入门篇19—点阵屏

|

发表评论