技术热线: 4007-888-234

如何使用PIC单片机制作LED矩阵显示器

更新时间: 2019-11-18
阅读量:3519

LED矩阵显示器可以显示文本、图形、动画,具有很高的灵活性,你可以在显示地铁、公路或街边广告牌上看到它们。下面英锐恩单片机开发工程师们分享了使用PIC单片机制作的LED矩阵显示器,该LED矩阵显示器为8行40列排列的320个LED,使用的单片机为PIC16F1847单片机,它通过串行端口(或使用USB-UART接口的USB)从PC接收数据,并借助五个74HC595移位寄存器在LED矩阵上显示。

QQ截图20191118095306.png

一、基于PIC单片机的LED矩阵显示器原理及电路图

在本方案中,五个8×8方形LED显示模块以线性方式排列,以构建一个8行X 40列的显示矩阵。我在该方案中使用的LED显示模块是Futurlec的NFM-12883AS。它们是共行阴极型,这意味着每行中所有LED的阴极都相互连接。因此,每行引脚应从该行中的八个LED吸收电流。所有5个模块的相似行引脚进一步连接在一起,并馈送到ULN2803 IC的输出接收器,该IC由8个达林顿阵列组成。现在,ULN2803的每个输出引脚都是该特定行中40个(= 8×5)LED的接收器。由于ULN2803可以每个引脚吸收高达500 mA的电流,因此每个LED的电流被限制为500/40 = 12.5 mA。

MatrixCircuit-550x311.png

LED的阳极端子可通过列引脚访问,由于用的是行扫描技术,所以每个列引脚只需要为一个LED提供电流,也就是说一次在该列中只有一行处于活动状态。这些列由40位串行并行并行输出的输出驱动,该输出是通过级联五个74HC595 IC来构建的。74HC595器件是一个8位串行输入和并行/串行输出移位寄存器,串行输出功能允许级联多个74HC595器件。从工程学的角度来看,74HC595可能不是列驱动器的理想选择,因为它们并不打算为LED提供电流。但是过去的一些实验表明,它们可以驱动LED合理地点亮,因此可以用作此类LED矩阵显示器方案中的列驱动器。

MatrixMCUcircuit.png

在方案中使用的单片机是增强型中档8位PIC系列的PIC16F1847。它使用内部时钟源(启用PLL)以32 MHz运行。PORTB通过ULN2803达林顿对阵列为各个行(阴极)提供接地路径,而RA0,RA1和RA2引脚用于控制级联移位寄存器的Data,SH_CP和ST_CP线。PIC16F1847的引脚8和7是UART通信的默认引脚。他们进入USB-UART模块与PC进行串行通信。PC上运行的串行终端程序可用于将字符数据发送到单片机,单片机将接收到的信息保存到其内部EEPROM中。

二、本方案使用的单片机开发软件

这个方案的固件是使用mikroC Pro for PIC编译器开发的。该程序使用8×5字节(= 320位)的数组(Buffer [8][5])存储显示像素信息,每一位对应一个LED。用户可以使用串行终端程序将消息从PC发送到显示板。我在Windows上使用Termite 2.9程序。发送的信息将保存到PIC的内部EEPROM中。前两个EEPROM位置保留用于数据输入标志和消息中的字符数。以下步骤详细描述了该方案的固件如何运行:

1.电源打开。PIC单片机初始化端口,并监听其串行端口。它会显示一条消息“你准备好输入了吗?Y/N到串行端口,并且该消息显示在PC串行终端应用程序窗口中。用户有3秒的时间发送字符“Y”。否则,单片机会继续并显示预存储的消息。从右向左滚动显示该消息。单片机和PC之间的串行通信速度为115200 bps。

2.如果用户发送“ Y”,则单片机等待输入数据。单片机读取传入的字节,直到接收到“#”,这表示PC发送的最后一个字符字节。然后,单片机将1写入EEPROM位置0x00,并保存在EEPROM位置0x01接收的字节数。接收到的字符从0x02开始顺序保存到EEPROM顺序位置。

3.接下来,单片机将字符数据从EEPROM加载到RAM中,并从右向左滚动显示在LED矩阵上。每个字符都映射到其图形字体,该图形字体作为静态数组保存在程序存储器中。


三、源代码附件


LED矩阵显示器方案源代码.zip


以上就是英锐恩单片机开发工程师分享的使用PIC单片机制作LED矩阵显示器的方法。英锐恩专注单片机应用方案设计与开发,提供8位单片机、16位单片机、32位单片机。