将8个LED发光二极管封装在一起就组成了数码管,将更多的LED组合在一起就组成了点阵屏。本篇我们来认识点阵屏,通过Arduino的IO口直接驱动点阵屏来了解其驱动方式。
1. 点阵屏介绍
LED点阵屏由LED发光二极管组成,通过控制LED亮灭来显示文字、图片、动画、视频等,被广泛应用于公共场合做信息展示,如广告屏、公告牌等。
LED点阵屏按照LED发光颜色可分为单色、双色、三色灯等,可显示红、黄、绿甚至是真彩色。根据LED的数量又分为4x4、8x8、16x16等不同类型。多色点阵屏工艺要求相对较高,需要考虑多种颜色混合时对色彩的影响。这里我们通过单色8x8点阵屏来了解其原理。
8x8点阵屏
不同点阵屏封装不同,8x8点阵屏由8行8列共64个LED灯组成,其内部结构如下图:
8x8内部结构
每个LED放置在行线和列线的交叉点上,当对应的某一行电平拉高,某一列电拉低,则对应交叉点的LED就会点亮。
8x8点阵屏有16个管脚,将有丝印的一边朝下,逆时针编号为18,916。
8X8点阵管脚
其对应内部管脚定义如下如所示:
点阵屏管脚定义
比如我们要点亮第一行第一列LED灯,则对应将点阵屏的第9脚拉高,第13脚拉低,其他LED控制以此类推即可。
2. 实验材料
Uno R3开发板
配套USB数据线
面包板及配套连接线
8*8点阵屏
3. 实验步骤
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,拷贝如下代码替换自动生成的代码并进行保存。
/*
* Matrix
* 点阵屏显示驱动
*/
int leds[8] = {6, 11, 5, 9, 14, 4, 15, 2}; //点阵屏正极引脚
int gnds[8] = {10, 16, 17, 7, 3, 8, 12, 13}; //点阵屏负极引脚
void setup() {
for (int i &#61; 0; i <8; i&#43;&#43;)
{
pinMode(leds[i], OUTPUT);
pinMode(gnds[i], OUTPUT);
digitalWrite(gnds[i], HIGH); //负极引脚拉高&#xff0c;熄灭所有LED
}
}
void ledopen()
{
for (int i &#61; 0; i <8; i&#43;&#43;)//将点阵屏正极拉高&#xff0c;负极拉低&#xff0c;开启显示
{
digitalWrite(leds[i], HIGH);
digitalWrite(gnds[i], LOW);
}
}
void ledclean()
{
for (int i &#61; 0; i <8; i&#43;&#43;)//将点阵屏正极ladies&#xff0c;负极拉高&#xff0c;关断显示
{
digitalWrite(leds[i], LOW);
digitalWrite(gnds[i], HIGH);
}
}
//逐列扫描
void ledCol()
{
for (int i &#61; 0 ; i <8; i&#43;&#43;)
{
digitalWrite(gnds[i], LOW);
for (int j &#61; 0; j <8; j&#43;&#43;)
{
digitalWrite(leds[j], HIGH);
delay(40);
}
digitalWrite(gnds[i], HIGH);
ledclean();
}
}
//逐行扫描
void ledRow()
{
for (int i &#61; 0 ; i <8; i&#43;&#43;)
{
digitalWrite(leds[i], HIGH);
for (int j &#61; 0; j <8; j&#43;&#43;)
{
digitalWrite(gnds[j], LOW);
delay(40);
}
digitalWrite(leds[i], LOW);
ledclean();
}
}
void loop() {
ledopen(); //全部打开
delay(500);
ledclean(); //全部关闭
delay(500);
ledCol(); //列扫描
ledRow(); //行扫描
}
3. 连接开发板&#xff0c;设置好对应端口号和开发板类型&#xff0c;进行程序下载。
程序下载
4. 实验现象
LED点阵屏点亮然后熄灭&#xff0c;然后逐列点亮&#xff0c;逐行点亮。
实验现象
5. 实验分析
LED点阵屏不过是多个LED组合在一起来驱动&#xff0c;基本的驱动方式是逐行扫描或者逐列扫描。通过两个for循环嵌套来进行操作&#xff0c;外部循环控制列&#xff0c;内部循环遍历行&#xff0c;或者外部循环控制行&#xff0c;内部循环遍历列&#xff0c;相对操作还是非常简单的。当逐行或者逐列扫描足够快的时候&#xff0c;人眼就会因为视觉暂存而看到同时点亮的效果。
当对多块点阵屏进行操作时&#xff0c;使用IO引脚直接驱动的方式就显得不切实际了&#xff0c;一方面这需要占用很多的IO口&#xff0c;另一方面IO驱动能力毕竟有限&#xff0c;所以点阵屏还有专门的驱动电路和IC芯片来满足更高的应用要求。