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

网友投稿 2018-09-15 14:11

本篇继续学习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开发板的A0~A5也可以做普通GPIO使用,编号分别为14~19。

实验原理图如下图所示:

https://cdn.china-scratch.com/timg/180917/1411404164-0.jpg实验原理图

实物连接图如下图所示:

https://cdn.china-scratch.com/timg/180917/1411406443-1.jpg实验原理图

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

1/*
2   Heart
3   点阵屏心型跳动显示
4*/
5int leds[8] = {6, 11, 5, 9, 14, 4, 15, 2}; //点阵屏正极引脚
6int gnds[8] = {10, 16, 17, 7, 3, 8, 12, 13}; //点阵屏负极引脚
7
8//大“心型”的数据
9int table1[8][8] =
10{
11  0, 0, 0, 0, 0, 0, 0, 0,
12  0, 1, 1, 0, 0, 1, 1, 0,
13  1, 1, 1, 1, 1, 1, 1, 1,
14  1, 1, 1, 1, 1, 1, 1, 1,
15  1, 1, 1, 1, 1, 1, 1, 1,
16  0, 1, 1, 1, 1, 1, 1, 0,
17  0, 0, 1, 1, 1, 1, 0, 0,
18  0, 0, 0, 1, 1, 0, 0, 0,
19};
20
21//小“心型”的数据
22int table2[8][8] =
23{
24  0, 0, 0, 0, 0, 0, 0, 0,
25  0, 0, 0, 0, 0, 0, 0, 0,
26  0, 0, 1, 0, 0, 1, 0, 0,
27  0, 1, 1, 1, 1, 1, 1, 0,
28  0, 1, 1, 1, 1, 1, 1, 0,
29  0, 0, 1, 1, 1, 1, 0, 0,
30  0, 0, 0, 1, 1, 0, 0, 0,
31  0, 0, 0, 0, 0, 0, 0, 0,
32};
33
34void setup() {
35  for (int i = 0; i < 8; i++)
36  {
37    pinMode(leds[i], OUTPUT);
38    pinMode(gnds[i], OUTPUT);
39    digitalWrite(gnds[i], HIGH); //负极引脚拉高,熄灭所有LED
40  }
41}
42
43void ledclean()
44{
45  for (int i = 0; i < 8; i++)//将点阵屏正极ladies,负极拉高,关断显示
46  {
47    digitalWrite(leds[i], LOW);
48    digitalWrite(gnds[i], HIGH);
49  }
50}
51
52//心型显示函数
53void ledShow(int temp[8][8])
54{
55  for (int j = 0 ; j < 8; j++)
56  {
57    digitalWrite(gnds[j], LOW);
58    for (int i = 0; i < 8; i++)
59    {
60      digitalWrite(leds[i], temp[i][j]);
61      delayMicroseconds(100);
62    }
63    digitalWrite(gnds[j], HIGH);
64    ledclean();
65  }
66}
67
68void loop() {
69
70  for (int i = 0; i < 100; i++) //利用for循环达到刷新延时的效果
71  {
72    ledShow(table1);
73  }
74  for (int i = 0; i < 50; i++)//利用for循环达到刷新延时的效果
75  {
76    ledShow(table2);
77  }
78
79}

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

https://cdn.china-scratch.com/timg/180917/141141E29-2.jpg程序下载

3. 实验现象

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

https://cdn.china-scratch.com/timg/180917/14114161X-3.gif

4. 实验分析

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

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com