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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TonyIOT/article/details/82731900

本篇继续学习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循环来控制显示的次数,进而控制显示时间来达到延时效果。

扫码加入微信公众号:TonyCode

猜你喜欢

转载自blog.csdn.net/TonyIOT/article/details/82731900