1
电子说
课程目标
相关知识
点阵屏: LED点阵屏由多个LED发光二极管组成,通过控制LED亮灭来显示文字、图片、动画、视频等,被广泛应用于公共场合做信息展示,如广告屏、公告牌等。
点阵屏组成及原理: LED点阵屏按照LED发光颜色可分为单色、双色、三色灯等,可显示红、黄、绿甚至是真彩色。根据LED的数量又分为4x4、8x8、16x16等不同类型。这里我们通过单色8x8点阵屏来了解其原理,8x8点阵屏由8行8列共64个LED灯组成,其内部结构如下图:
**外部管脚定义:**8x8点阵屏有16个管脚,将有丝印的一边朝下,逆时针进行编号。
*内部管脚定义:
控制方式: 每个LED放置在行线和列线的交叉点上,当对应的某一行高电平,某一列低电平,则对应交叉点的LED就会点亮。比如我们要点亮第一行第一列LED灯,则给对应将点阵屏的第9脚高电平,第13脚低电平,其他LED控制以此类推即可。
电路搭建
所需材料
ArduinoUNO * 1
8*8 LED点阵屏 * 1
杜邦线若干
电路连接
程序编写
练习一:绘制第一个图形
根据上图接线方式,编程实现让LED点阵屏显示两个点,并开始闪烁起来。
图形化方式:
代码方式:
/* 项目名称:闪烁的两个点
* 项目时间:2022.03.03
* 项目作者:MRX
*/
int leds[8] = {1, 2, 5, 7, 8, 9, 12, 14}; //点阵屏正极引脚
int gnds[8] = {3, 4, 6, 10, 11, 13, 15, 16}; //点阵屏负极引脚
void setup() {
for (int i = 0; i < 8; i++)
{
pinMode(leds[i], OUTPUT);
pinMode(gnds[i], OUTPUT);
digitalWrite(gnds[i], HIGH); //负极引脚拉高,熄灭所有LED
}
}
void loop() {
digitalWrite(leds[6],HIGH);
digitalWrite(gnds[0],LOW);
digitalWrite(leds[6],HIGH);
digitalWrite(gnds[2],LOW);
delay(100);
digitalWrite(leds[6],LOW);
digitalWrite(gnds[0],HIGH);
digitalWrite(leds[6],LOW);
digitalWrite(gnds[2],HIGH);
delay(100);
}
使用代码编程的时候,要注意开始要将所有的LED的负极引脚给高电平,让所有的LED熄灭。
练习二:方向指示牌
绘制一个如下图所示的图案,在点阵屏上显示出来。
图形化方式:
代码方式:
/* 项目名称:右箭头
* 项目时间:2022.03.03
* 项目作者:MRX
*/
int leds[8] = {9, 14, 8, 12, 1, 7, 2, 5}; //点阵屏正极引脚
int gnds[8] = {13, 3, 4, 10, 6, 11, 15, 16}; //点阵屏负极引脚
int led[8][8] = {//箭头方阵,1处是亮灯的led
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 1, 1, 1, 1, 1, 0},
{0, 1, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 1, 1, 0},
{0, 0, 0, 1, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
};
//清屏
void ledclean()
{
for (int i = 0; i < 8; i++)//将点阵屏正极ladies,负极拉高,关断显示
{
digitalWrite(leds[i], LOW);
digitalWrite(gnds[i], HIGH);
}
}
//右箭头
void rightArrow()
{
for (int i = 0 ; i < 8; i++)
{
digitalWrite(leds[i], LOW);
for (int j = 0; j < 8; j++)
{
digitalWrite(gnds[j], 1-led[i][j]);
}
digitalWrite(leds[i], HIGH);
ledclean();
}
}
void setup() {
for (int i = 0; i < 8; i++)
{
pinMode(leds[i], OUTPUT);
pinMode(gnds[i], OUTPUT);
digitalWrite(gnds[i], HIGH); //负极引脚拉高,熄灭所有LED
}
}
void loop() {
rightArrow();
}
程序分析:
LED点阵屏是多个LED组合在一起来驱动,基本的驱动方式是逐行扫描或者逐列扫描。通过两个for循环嵌套来进行操作,外部循环控制列,内部循环遍历行,或者外部循环控制行,内部循环遍历列。当逐行或者逐列扫描足够快的时候,人眼就会因为视觉暂存而看到同时点亮的效果。
当对多块点阵屏进行操作时,使用IO引脚直接驱动的方式就显得不切实际了,一方面这需要占用很多的IO口,另一方面IO驱动能力毕竟有限,所以点阵屏还有专门的驱动电路和IC芯片来满足更高的应用要求。后续我们将会使用到点阵屏模块来进行新的项目开发。
全部0条评论
快来发表一下你的评论吧 !