Arduino基础入门篇21—点阵流动显示

|

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

|

在各种公共场合看到的点阵屏大多都有流动显示效果,显示内容可以上下左右的滚动,本篇我们来实现点阵屏的流动显示。

1. 实验材料

  • Uno R3开发板

  • 配套USB数据线

  • 面包板及配套连接线

  • 8*8点阵屏

2. 实验步骤

1. 根据原理图搭建电路。

依然是前篇点阵屏电路连接方式。根据点阵屏管脚定义,点阵屏的[9, 14, 8, 12, 1, 7, 2, 5]分别连接开发板的[6,11, 5, 9, 14, 4, 15, 2],点阵屏的[13, 3, 4, 10, 6, 11, 15, 16]分别连接开发板的[10,16, 17, 7, 3, 8, 12, 13]。

这里需要注意,Uno R3开发板的A0~A5也可以做普通GPIO使用,编号分别为14~19。

实验原理图如下图所示:

Arduino基础入门篇21—点阵流动显示
实验原理图

实物连接图如下图所示:

Arduino基础入门篇21—点阵流动显示
实物连接图

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

 1/*
2      Roll
3      点阵屏流动显示
4*/

5int  leds[8]  =  {61159144152 };   //点阵屏正极引脚
6int  gnds[8]  =  {1016177381213 };   //点阵屏负极引脚
7
8//字库
9char  test[]  =  {
10    0x000x7C0x8A0x920xA20x7C0x000x00//  -0-
11    0x000x000x420xFE0x020x000x000x00//  -1-
12    0x000x460x8A0x920x920x620x000x00//  -2-
13    0x000x840x820x920xB20xCC0x000x00//  -3-
14    0x000x180x280x480xFE0x080x000x00//  -4-
15    0x000xE40xA20xA20xA20x9C0x000x00//  -5-
16    0x000x3C0x520x920x920x8C0x000x00//  -6-
17    0x000x800x8E0x900xA00xC00x000x00//  -7-
18    0x000x6C0x920x920x920x6C0x000x00//  -8-
19    0x000x620x920x920x940x780x000x00//  -9-
20    0x000x3E0x480x880x480x3E0x000x00//  -A-
21    0x000xFE0x920x920x920x6C0x000x00//  -B-
22    0x000x7C0x820x820x820x440x000x00//  -C-
23    0x000xFE0x820x820x820x7C0x000x00//  -D-
24    0x000xFE0x920x920x920x820x000x00//  -E-
25    0x000xFE0x900x900x900x800x000x00//  -F-
26
27 };
28
29void  setup()  {
30    for  (int  i  =  0;   i  <  8;   i++)
31    {
32        pinMode(leds[i],  OUTPUT);
33        pinMode(gnds[i],  OUTPUT);
34        digitalWrite(gnds[i],  HIGH);   //负极引脚拉高,熄灭所有LED
35    }
36 }
37
38void  ledclean()
39
{
40    for  (int  i  =  0;   i  <  8;   i++)//将点阵屏正极ladies,负极拉高,关断显示
41    {
42        digitalWrite(leds[i],  LOW);
43        digitalWrite(gnds[i],  HIGH);
44    }
45 }
46
47//字符显示
48void  ledShow(char  num,  char  dat)
49
{
50    digitalWrite(gnds[num],  LOW);
51    for  (int  i  =  0;   i  <  8;   i++)
52    {
53        digitalWrite(leds[i],  dat  &   0x80);   //  1  0  0  0  0  0  0  0
54        dat  <<=  1;
55    }
56    delayMicroseconds(100);
57    digitalWrite(gnds[num],  HIGH);
58    ledclean();
59 }
60
61void  loop()  {
62
63    for  (int  a  =  0;   a  <  120;   a++)  //控制流动显示内容
64    {
65        for  (int  i  =  0  ;   i  <  200  ;   i++)//循环显示达到延时效果
66        {
67            for  (int  c  =  0;   c  <  8;   c++)  //8列循环扫描,达到点阵屏驱动效果
68            {
69                ledShow(c,  test[c  +  a]);
70            }
71        }
72    }
73
74 }

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

Arduino基础入门篇21—点阵流动显示
程序下载

4. 程序下载后,点阵屏从右往左流动显示。

Arduino基础入门篇21—点阵流动显示
流动显示

5. 我们对loop()部分的程序进行修改,来改变每次流动的列数。

 1void 

loop() 

{
2
3    for  (int  a  =  0;   a  <  16;   a++)  //控制流动显示内容
4    {
5        for  (int  i  =  0  ;   i  <  200  ;   i++)//循环显示达到延时效果
6        {
7            for  (int  c  =  0;   c  <  8;   c++)  //8列循环扫描,达到点阵屏驱动效果
8            {
9                ledShow(c,  test[c  +  a*8]);
10            }
11        }
12    }
13
14 }

6. 当每次移动8列时,就会整屏覆盖翻页显示,效果如下:

Arduino基础入门篇21—点阵流动显示
翻页显示

3. 实验分析

  1. 程序中定义了一个数组用于存储需要显示的字库,每8个表示一个字符,然后通过ledShow()函数来进行解析显示。使用for循环控制指定的列然后将传入的字符数据进行按位与,取出每一位进行操作。

  2. 在loop()中三重for循环,最里面控制8列扫描显示,中间for循环用于控制显示时间,最外层for循环用于控制流动位置。

  3. 依次移动需要显示的字符数据,就达到了流动显示效果。可以控制每次移动的间距,当每次移动8列就会实现整屏覆盖的效果。


Arduino基础入门篇21—点阵流动显示
扫码加入微信公众号:TonyCode


原文始发于微信公众号(

TonyCode

):Arduino基础入门篇21—点阵流动显示

|

发表评论