产品 求购 供应 文章 问题

0431-81702023
LED
基于 ARM S3C44BOX的 LED显示屏设计

摘 要 :为 了简化 LED显示屏 的驱 动电路 ,节约单 片机 的端 口资 源 。对 常见 的 LED显 示屏 驱 动 电路进行 了改进 ,全部采 用通用 的串入 并 出移位寄存 器作为选通 驱动 .系统全部采 用 串行数 据控制 。形成 了一种 只需 4根信 号线 的 LED显 示屏 驱动 电路解 决 方案 。仅 需 占用单 片 机 的 4 Io端 口发 送 串行数 据就可 以实 现正常的显示 功能 。文 中给出相应 的程序代码 。

关 键 词 :LED显示屏 ;单 片机 ;串入并 出移位寄存器 ;串行数据 ;I0端 口

1 引 言

LED显示屏应用十分广 泛,是信息传播的有 效工具 。在某 井下矿 采设备 监 测系统 中选用 了 ARM S3C44BoX32位单片机作 为 CPU,根据应 用要求 ,监测 系统 的显示 部分使 用 16行 的单 色 LED显示屏 实时显示监 测数 据。由于系统外设 较多 ,端 口资源十分紧张,针对这种情况开发了一 种 四线驱动的显示屏 电路设 计方案 ,很好 地解决 了这个问题。

2 常见的驱动电路设计及 改进

在常见的显示驱动 电路设 计 中,列控 制一般 采用 串人并带锁存的移位 寄存器如 74HC595,将 数据打人锁存器 中,使寄存器各 引脚 呈现与锁存 器相同的状态来选中需要点亮 的列 。行控制一般 采用译码 器电路 如 416译 码 器 74HC154,控 制 信号经译码后选 中需要点亮的行 。这种硬件结构 设计需要较多 的控制信 号线 ,占用单 片机较多端 口从而造成端 口资源的浪费。

在改进的 LED显示屏驱动电路设计方案中, 行 、列控制均采用 串人并 出带锁存 的移位 寄存器 , 控制信号 的产 生均 由 S3C44BOX IO 口发送 串行数据来实现 ,这样仅需要 4根信号线 LED显 示屏就能正常工作 。

3 显示驱 动 电路 设计

31 电路结 构

LED显示屏由多个 LED点阵模块构成。显示 电路采用 116扫描方式 ,显示点阵的一行对应一 路行选通信号 ,各行 的同一 列共用一个 列选通信 号。当需要在 LED显示屏上显示图文内容时,只 要在行 、列显示数据控制下让 显示屏上相应的发 光器件点亮就可 以了 ,一次点亮一行 ,依次点亮各 行 ,只要速度足够快就会产生连续的视觉感受[1]

行驱动电路采用 HEF4094带锁存功能的串 人并 出移位寄存器 。如图 1,引脚 D为串行 数据 输入端 ,引脚 CP为移位时钟脉 冲输入端 ,STR为 输 出锁存 器打人信 号输 入端 ,OE为输 出使 能信 号输入端 ,当其为高时锁存器 的输出才开放 ,芯片 输 出端为 o007OsOs作 为级联输 出,见参考 文献E21

列驱动电路 采用 74HC595带锁存 功能的串 人并 出移位寄存 器。如 图 1,引脚 SER为串行 数 据输入端 ,引脚 SRCLK为移位 时钟脉冲输入端 , 引脚 RCLK为输 出锁存 器打人信 号输 入端 ,EO 为输 出使能信号输 入端 ,只有 当其为低时锁存器 的输 出才 开放 ,引脚 SRCLR为移 位寄存器的清 零输入端 ,当其为低 时移位 寄存器 的输 出全部为 零 ,芯片输 出端 为 Q Q Q 作 为级联输 出, 见参考文献[3]

IO 口送 出的 控 制信 号 经 总 线 驱 动器 74HC245分别接到行 、列驱 动电路上 。显示电路 结构如图 2所示 。

LED显示屏为 16 ×64列点 阵,共需两 片 HEF4094级联以及 8 74HC595级联 。

HEF4094组 成 的行驱 动器如 图 l所 示 。 由两片 HEF4094组成 16行 的驱动 ,图中只画出 第一片。第一片 HEF4094 D端连接 IO 口输 出的串行行显示数据 ,O 端连 接下一片的 D端 。 两 片相应的 CP并联 ,作为统 一 的串行 数据移位 信号 。在各控 制信号输 入端 中,STR (高 电平 有效)EO(高 电平有 效)锁存输 出使 能端接直 流 电源 正极 。

74HC595组 成的 列驱 动器 如图 l所 示。 由 8 74HC595组成 64列 的驱 动,图 中只画 出第一片 。第一片 595 SER端连 接 IO 口输 出 的串行列 显示 数 据 ,QH端 连 接下 一 片 的 SER 端 ,各片均采用相同的方法组成 8片的级联 ,各片 相应的 SRCLKSRCLRRCLK 分别并联 ,作 为 统一的串行数据移位信号 和输 出锁存打入信号 。 在各控制信号输入端 中,SRCLR(低电平有效 )移 位寄存器清零输入端接 电源正极 、OE(低 电平有 效)锁存输出使能端直接接地 。

l中黑箭头所指 即为下一 片 74HC595 HEF4904的信号输入端。

由于行驱动电路同时驱动 64列的 LED发光 器件 ,按每 一 LED器件 电流 20mA 计算 ,64 LED同时发光时就需要 64×20l280mA的驱 动电 流 。因 此 需 要 用 功 率 管 驱 动 ,如 TP122 [

32 基本 显 示原 理

采用这种显示驱动 电路 设计 ,只需 4 IO 口分别发送 SRCLKRCLK&CPSERD信号就 能实现正常的显示功能,其 中 74HC595 RCLK HEF4094 CP共用一根信号线 ,由同一 IO 口发 出控制信号。74HC595 SRCLR信号输入 端接直 流电源正极避 免进行 清零操作 ,OE信号 输入端接地使得一旦列显示数据出现在锁存器的 同时各输 出引脚 即呈现 出相应的高低 电平状态。 HEF4094 STR信号输入端接直流电源正极使得行显示数据 出现在片内移位寄存器的同时即被 打入锁存 器从 而避免锁存打 入操作 ,OE信号输 入端接直流电源正极使得一旦行显示数据 出现在 锁存器的同时各输出引脚即呈现 出相应的高低电 平状态 。因此,需要点亮某一行 时,需要执行 以下 几 个步 骤 :

(1) 15位行显 示数据 通过 DCP信号依 次送入到两 片级 联的 HEF4094中,最 后一次移 位在第三步完成 。

(2) 64位列显示 数据通 过 SERSRCLK 信号依次送入到 8片级联 的 74HC595中。

(3)发 出列显示 的锁 存打入 信号 RCLK,把 列显数据打到各 595的输 出引脚上 ,完成列显示 的准备工作 ,同时 由于行 移位 信号 CP RCLK 共用一根信号线 ,行显示数据完成最后一次移位 , 完成行显示准备工作 。

(4)行列数据都准 备完毕 ,显 示屏 中被选 中 的那一行被点亮 。

(5)延时几毫秒保证每一行有充分 的点亮 时 间然后进行下一行的显示 。

按照以上步骤依次点亮 16行 ,即可让 LED 屏显示需要的图文内容 。

4 LED 显示屏 的软件设 计

HEF4094 74HC595都是串入并 出移位寄 存器,显然应用串行 口驱动 ,但是 S3C44BOX的串 口资源有限,还要用来与上位机进行通信 ;因此采 用将并行 的 IO 口模拟成串行 口的方法来解决。 这样仅需要 4个并行 IO 口就 可 以完成显 示任 务 ,在程序 中使用 PORTD0 PORTD3 4 IO 口,PORTD 8 IO端 口组成 ,见参考文 献[5]

下面是 已经在 HitoolForARM 编译环境 中 通过的在 16 ×64列点阵 LED显示屏上显示 4 个汉字的程序,该程 序用 C语言 编写,稍做修 改 就可以用于各种单片机 系统 。

首先将要显示 的 4 16×16点阵的汉字字 模存储在数组 zimo[128]中。

主程序代码如下 :

void Send— Char(void)

{ unsignedshortROW—Data=0×8000

 intk

      for(忌一 0;忌< 128k+ 8)

{ ∥调用发送行显示数据子 函数

  Send-ROW Data(ROW—Data)

  int

  ∥依次取 O7816等数组元素

  for(0j

<8; + +) >

  ∥调用发送列显示数据 子函数

  Send— Line— Data(zimo[+])

∥对 PORTD3清零置位发送列显示 的锁存打 人信号

rPDATD= rPDATD &0×fb

rPDATD — rPDATD 10×04

∥延时几毫秒保证该行的点亮时间

Delay (6)

∥行选数据移位准备发送 下一行数

Send—Data》 一 1

)

)  

    行显示数据发送子程序代码如下 :

voidSend-Row—Data(unsignedshort )

{ int 0

∥发送行显示数据

for(m 0m< 16m+ + )

{ if(y&1)

       ∥如果 显示 该行则对 PORTD01否则 置 0

       rPDATD — rPDATD 10×01

  else

      PDATD — rPDATD &O×fe

   ∥行显示 数据移位准备发送下一位》 一 1

   ∥只移位 15

    if(m< 15)

  { ∥对 PORTD3清零置位发送行显 示数据移位时钟脉冲

    rPDATD — rPDATD &O×f7

    rPDATD — rPDATD 10×08

)

)

   列显示数据发送子程序代码如下 :

void Send— Line— Data(unsignedchar )

{ int

  ∥发送列显示数据

  for(0i< 8i+ + )

{   if(x&1)

     ∥如果该列需点亮则 PORTD1 O否 则 置 1

    rPDATD — rPDATD &O× fd

 else

    rPDATD — rPDATD IO×02

  ∥列显示数据移位准备发送下一位 》 一 1

  ∥对 PORTD2清零 置位发送列显 示数据移位时钟脉冲

 rPDATD — rPDATD &0×fb

 rPDATD — rPDATD IO×04

)

延时子程序代码如下 ,LoopCount的数值可 根据所选用 的单片机时钟频率来设定 。

     voidDelay(inttime)

{ intLoopCount=300

 for(time> Otime-)

 for( 0f< LoopCount + + )

)

5 结束语

这种设计方 案大 大节省 了单 片机 的端 口资 源 ,有效简化了显示屏的电路结构 ,提高 了整个显 示系统 的可靠性 ,根据这个设计原 理可设计 出各 种规模 的 LED显示屏 。