使用74HC154绘制8x32 LED矩阵


8

如何将图案发送到8x32 LED矩阵中?我将AT89S52微控制器与74HC154 4-16线解码器配合使用,并使用Keil IDE在C语言中进行编程。我已经完成了垂直扫描,但是在下一步中遇到了麻烦。如果需要,我将提供原理图。电路与下面包含的电路相同,仅不使用74HC138,公共阳极矩阵,而是使用UN2803作为驱动器,不使用内存

端口1是列,端口2是行...代码:

 row = 0xFF;
     //for (j=0x01; j< 0x08; j<<=1)  {   /* scan left to right */
     for (j=0x00; j<=0x0F; j++)
     {
          E1=0;
          E2=0;
          P1 = j;
          P2 = row;
                                   /* Output to LED Port */
          for (i = 0; i < 100; i++) 
           {  /* Delay for 100 ms */
              delay ();                       /* call delay function */

           }

在此处输入图片说明

Answers:


3

驱动MxN多路LED显示器的正常模式是将一个方向指定为“行”,将另一个方向指定为“列”,而与屏幕上的物理布局无关,以便系统一次为一个“行”导线通电,并且在对每一行进行排序时,系统将为该行上应点亮的所有LEd通电。

每根列导线必须包括一个在激活时调节电流的装置(电阻可以在此处工作),并且每行导线必须具有可以提供足够电流以一次馈送所有列的驱动器。硬件不必一次驱动一个以上的行,而必须允许驱动列的任何组合。

74HC154芯片可以在行选择逻辑中正常运行,但是由于一次只能输出一个输出,因此它们不适用于控制列。如果要扫描“横向”,以便在逻辑上以32行和8列对其进行访问,则74HC154可能适合选择一行,但是您必须添加其他硬件以允许每行提供足够的电流来驱动八个LED,并且您还必须在UN2803的每个输出中添加一些东西以限制电流。

您更可能想用一堆74HC595芯片(移位寄存器)和电阻器,或者一个或多个内置限流功能的LED驱动器芯片(例如四个德州仪器TLC5916)来替换74HC154。 ,可从Digi-Key获得)。将这些芯片从控制器连接到SPI端口,然后串行移出每一行数据。如果您使用低端驱动器芯片(例如上述的TLC5916),则必须更改行驱动器以提供电流而不是吸收电流。最简单的方法是使用八个NPN晶体管,每个晶体管的集电极连接到正电源线(如果需要,可以使用未稳压电源),基极连接到控制器或解码器芯片的输出,发射器绑在LED排上。


所以我必须扭转逻辑吗?P2 =列;P1 =行?“...。那么74HC154可能适合选择行.​​..”我很快将在软件中尝试此逻辑...
Rick Ant

如果要有32个垂直“行”,则可以使用74HC154来选择它们,但是74HC154无法提供大量电流(也不会吸收太多电流),并且以1/8占空比驱动几乎当然比以1/16占空比驾驶更好。您无需指明LED是以水平方向布线为阳极还是阴极,但我建议您对行使用强驱动器(可能是分立的晶体管),对列使用限流驱动器(无论是否使用行)最终变成水平或垂直)。
2012年

如果要使显示屏变亮,则可能有必要使每根列导线的驱动电流都大于LED可以安全承受的最大电流。为了防止在代码停止运行时损坏LED,您可能应该设计行驱动器,以便即使处理器出现故障也不会长时间驱动行。有多种方法可以实现。如果将离散晶体管用于行驱动器,则可以在每个驱动器上增加一个电阻和电容以限制最大占空比。
supercat 2012年

或者,如果使用计数器来控制行,则可以使用计时电路来检测计数之间是否经过了过多的时间,或者使显示空白或生成“自动”计数脉冲。
supercat 2012年

你有一个代码示例吗?例如我要显示字符AAAA?
瑞克·安特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.