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