美文网首页玩转Arduino玩转树莓派我用 Linux
Arduino基础入门篇20—心动点阵

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

作者: TonyCode | 来源:发表于2018-09-17 08:14 被阅读0次

    本篇继续学习LED点阵屏的使用,实现心型跳动效果。

    1. 实验材料

    • Uno R3开发板
    • 配套USB数据线
    • 面包板及配套连接线
    • 8*8点阵屏

    2. 实验步骤

    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。

    实验原理图如下图所示:

    实验原理图

    实物连接图如下图所示:

    实验原理图

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

    /*
       Heart
       点阵屏心型跳动显示
    */
    int leds[8] = {6, 11, 5, 9, 14, 4, 15, 2}; //点阵屏正极引脚
    int gnds[8] = {10, 16, 17, 7, 3, 8, 12, 13}; //点阵屏负极引脚
    
    //大“心型”的数据
    int table1[8][8] =
    {
      0, 0, 0, 0, 0, 0, 0, 0,
      0, 1, 1, 0, 0, 1, 1, 0,
      1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1,
      0, 1, 1, 1, 1, 1, 1, 0,
      0, 0, 1, 1, 1, 1, 0, 0,
      0, 0, 0, 1, 1, 0, 0, 0,
    };
    
    //小“心型”的数据
    int table2[8][8] =
    {
      0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 1, 0, 0, 1, 0, 0,
      0, 1, 1, 1, 1, 1, 1, 0,
      0, 1, 1, 1, 1, 1, 1, 0,
      0, 0, 1, 1, 1, 1, 0, 0,
      0, 0, 0, 1, 1, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0,
    };
    
    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(int temp[8][8])
    {
      for (int j = 0 ; j < 8; j++)
      {
        digitalWrite(gnds[j], LOW);
        for (int i = 0; i < 8; i++)
        {
          digitalWrite(leds[i], temp[i][j]);
          delayMicroseconds(100);
        }
        digitalWrite(gnds[j], HIGH);
        ledclean();
      }
    }
    
    void loop() {
    
      for (int i = 0; i < 100; i++) //利用for循环达到刷新延时的效果
      {
        ledShow(table1);
      }
      for (int i = 0; i < 50; i++)//利用for循环达到刷新延时的效果
      {
        ledShow(table2);
      }
    
    }
    
    

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

    程序下载

    3. 实验现象

    点阵屏上心型在不断跳动。

    实验现象

    4. 实验分析

    程序中定义了两个二维数组,分别用来存储两个不同大小的心型显示数据,在显示函数中通过两个for循环来遍历数组。在loop()中没有使用delay()函数来做延时处理,因为与数码管类似,这种LED显示设备需要不断刷新,delay()函数使程序暂停等待延时会造成显示闪烁甚至熄灭的情况。使用for循环来控制显示的次数,进而控制显示时间来达到延时效果。

    相关文章

      网友评论

        本文标题:Arduino基础入门篇20—心动点阵

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