美文网首页我用 Linux玩转树莓派玩转Arduino
Arduino基础入门篇21—点阵流动显示

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

作者: TonyCode | 来源:发表于2018-09-19 08:31 被阅读2次

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

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开发板的A0A5也可以做普通GPIO使用,编号分别为1419。

实验原理图如下图所示:

实验原理图

实物连接图如下图所示:

实验原理图

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

/*
   Roll
   点阵屏流动显示
*/
int leds[8] = {6, 11, 5, 9, 14, 4, 15, 2}; //点阵屏正极引脚
int gnds[8] = {10, 16, 17, 7, 3, 8, 12, 13}; //点阵屏负极引脚

//字库
char test[] = {
  0x00, 0x7C, 0x8A, 0x92, 0xA2, 0x7C, 0x00, 0x00, // -0-
  0x00, 0x00, 0x42, 0xFE, 0x02, 0x00, 0x00, 0x00, // -1-
  0x00, 0x46, 0x8A, 0x92, 0x92, 0x62, 0x00, 0x00, // -2-
  0x00, 0x84, 0x82, 0x92, 0xB2, 0xCC, 0x00, 0x00, // -3-
  0x00, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x00, 0x00, // -4-
  0x00, 0xE4, 0xA2, 0xA2, 0xA2, 0x9C, 0x00, 0x00, // -5-
  0x00, 0x3C, 0x52, 0x92, 0x92, 0x8C, 0x00, 0x00, // -6-
  0x00, 0x80, 0x8E, 0x90, 0xA0, 0xC0, 0x00, 0x00, // -7-
  0x00, 0x6C, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -8-
  0x00, 0x62, 0x92, 0x92, 0x94, 0x78, 0x00, 0x00, // -9-
  0x00, 0x3E, 0x48, 0x88, 0x48, 0x3E, 0x00, 0x00, // -A-
  0x00, 0xFE, 0x92, 0x92, 0x92, 0x6C, 0x00, 0x00, // -B-
  0x00, 0x7C, 0x82, 0x82, 0x82, 0x44, 0x00, 0x00, // -C-
  0x00, 0xFE, 0x82, 0x82, 0x82, 0x7C, 0x00, 0x00, // -D-
  0x00, 0xFE, 0x92, 0x92, 0x92, 0x82, 0x00, 0x00, // -E-
  0x00, 0xFE, 0x90, 0x90, 0x90, 0x80, 0x00, 0x00, // -F-

};

void setup() {
  for (int i = 0; i < 8; i++)
  {
    pinMode(leds[i], OUTPUT);
    pinMode(gnds[i], OUTPUT);
    digitalWrite(gnds[i], HIGH); //负极引脚拉高,熄灭所有LED
  }
}

void ledclean()
{
  for (int i = 0; i < 8; i++)//将点阵屏正极ladies,负极拉高,关断显示
  {
    digitalWrite(leds[i], LOW);
    digitalWrite(gnds[i], HIGH);
  }
}

//字符显示
void ledShow(char num, char dat)
{
  digitalWrite(gnds[num], LOW);
  for (int i = 0; i < 8; i++)
  {
    digitalWrite(leds[i], dat & 0x80); // 1 0 0 0 0 0 0 0
    dat <<= 1;
  }
  delayMicroseconds(100);
  digitalWrite(gnds[num], HIGH);
  ledclean();
}

void loop() {

  for (int a = 0; a < 120; a++) //控制流动显示内容
  {
    for (int i = 0 ; i < 200 ; i++)//循环显示达到延时效果
    {
      for (int c = 0; c < 8; c++) //8列循环扫描,达到点阵屏驱动效果
      {
        ledShow(c, test[c + a]);
      }
    }
  }

}

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

程序下载

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

流动显示

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

void loop() {

  for (int a = 0; a < 16; a++) //控制流动显示内容
  {
    for (int i = 0 ; i < 200 ; i++)//循环显示达到延时效果
    {
      for (int c = 0; c < 8; c++) //8列循环扫描,达到点阵屏驱动效果
      {
        ledShow(c, test[c + a*8]);
      }
    }
  }

}

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

翻页显示

3. 实验分析

  1. 程序中定义了一个数组用于存储需要显示的字库,每8个表示一个字符,然后通过ledShow()函数来进行解析显示。使用for循环控制指定的列然后将传入的字符数据进行按位与,取出每一位进行操作。
  2. 在loop()中三重for循环,最里面控制8列扫描显示,中间for循环用于控制显示时间,最外层for循环用于控制流动位置。
  3. 依次移动需要显示的字符数据,就达到了流动显示效果。可以控制每次移动的间距,当每次移动8列就会实现整屏覆盖的效果。

相关文章

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

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

  • Arduino基础入门篇19—点阵屏

    将8个LED发光二极管封装在一起就组成了数码管,将更多的LED组合在一起就组成了点阵屏。本篇我们来认识点阵屏,通过...

  • Arduino基础入门篇20—心动点阵

    本篇继续学习LED点阵屏的使用,实现心型跳动效果。 1. 实验材料 Uno R3开发板 配套USB数据线 面包板及...

  • Arduino基础入门篇06——流动的LED灯

    上一篇介绍了Arduino数字I/O引脚及相关函数,并点亮了板载LED灯。本篇将使用面包板搭建电路,多个LED灯配...

  • 心得体会

    经历了本学期的学习,我们基本掌握了如何使用arduino进行简单的逻辑程序运行。在实现8*8点阵显示字符实验时,细...

  • Arduino 8 点阵字库

    在这个网站看到5*7点阵的字库,发现在Arduino显示是垂直镜像效果。就写了一段程序把其转化成Android的格...

  • 实验1—杨金钰—0114

    8*8LED点阵显示字母YJ 电教本1601 杨金钰 201612030114 一、LED显示原理 LED点阵显示...

  • 实验一 郭珍0126

    一、实验目的 利用8*8点阵LED显示汉字“目”和字母“Z”。 二、LED显示原理 LED点阵显示原理说明:8X8...

  • Arduino基础入门篇31—LCD1602液晶显示

    LCD1602也叫1602字符型液晶,是一种专门用来显示字母、数字、符号的点阵型液晶模块,能同时显示16X2即32...

  • 实验一 ---张欣 ---0212(LED 点阵显示)

    实验目的: 了解LED显示原理,8*8点阵的内部结构;理解点阵显示的程序代码,并进行修改达到显示“妈妈I♥u” 实...

网友评论

    本文标题:Arduino基础入门篇21—点阵流动显示

    本文链接:https://www.haomeiwen.com/subject/mlsbnftx.html