摘 要 :为 了简化 LED显示屏 的驱 动电路 ,节约单 片机 的端 口资 源 。对 常见 的 LED显 示屏 驱 动 电路进行 了改进 ,全部采 用通用 的串入 并 出移位寄存 器作为选通 驱动 .系统全部采 用 串行数 据控制 。形成 了一种 只需 4根信 号线 的 LED显 示屏 驱动 电路解 决 方案 。仅 需 占用单 片 机 的 4 个 I/o端 口发 送 串行数 据就可 以实 现正常的显示 功能 。文 中给出相应 的程序代码 。
关 键 词 :LED显示屏 ;单 片机 ;串入并 出移位寄存器 ;串行数据 ;I/0端 口
1 引 言
LED显示屏应用十分广
泛,是信息传播的有
效工具 。在某 井下矿 采设备 监 测系统 中选用 了 ARM S3C44BoX32位单片机作 为 CPU,根据应 用要求 ,监测 系统 的显示 部分使 用 16行 的单 色 LED显示屏 实时显示监 测数 据。由于系统外设 较多 ,端 口资源十分紧张,针对这种情况开发了一 种 四线驱动的显示屏 电路设 计方案 ,很好 地解决 了这个问题。
2 常见的驱动电路设计及 改进
在常见的显示驱动 电路设 计 中,列控 制一般 采用 串人并带锁存的移位 寄存器如 74HC595,将 数据打人锁存器 中,使寄存器各 引脚 呈现与锁存 器相同的状态来选中需要点亮 的列 。行控制一般 采用译码 器电路 如 4/16译 码 器 74HC154,控 制 信号经译码后选 中需要点亮的行 。这种硬件结构 设计需要较多 的控制信 号线 ,占用单 片机较多端 口从而造成端 口资源的浪费。
在改进的 LED显示屏驱动电路设计方案中, 行 、列控制均采用 串人并 出带锁存 的移位 寄存器 , 控制信号 的产 生均 由 S3C44BOX 的 I/O 口发送 串行数据来实现 ,这样仅需要 4根信号线 LED显 示屏就能正常工作 。
3 显示驱 动 电路 设计
3.1 电路结 构
LED显示屏由多个 LED点阵模块构成。显示
电路采用 1/16扫描方式
,显示点阵的一行对应一
路行选通信号 ,各行 的同一 列共用一个 列选通信 号。当需要在 LED显示屏上显示图文内容时,只 要在行 、列显示数据控制下让 显示屏上相应的发 光器件点亮就可 以了 ,一次点亮一行 ,依次点亮各 行 ,只要速度足够快就会产生连续的视觉感受[1]。
行驱动电路采用 HEF4094带锁存功能的串
人并 出移位寄存器 。如图 1,引脚 D为串行 数据 输入端 ,引脚 CP为移位时钟脉 冲输入端 ,STR为 输 出锁存 器打人信 号输 入端 ,OE为输 出使 能信 号输入端 ,当其为高时锁存器 的输出才开放 ,芯片 输 出端为 o0~07,Os、Os作 为级联输 出,见参考 文献E21。
列驱动电路 采用 74HC595带锁存 功能的串 人并 出移位寄存 器。如 图 1,引脚 SER为串行 数 据输入端 ,引脚 SRCLK为移位 时钟脉冲输入端 , 引脚 RCLK为输 出锁存 器打人信 号输 入端 ,EO 为输 出使能信号输 入端 ,只有 当其为低时锁存器 的输 出才 开放 ,引脚 SRCLR为移 位寄存器的清 零输入端 ,当其为低 时移位 寄存器 的输 出全部为 零 ,芯片输 出端 为 Q ~Q ,Q 作 为级联输 出, 见参考文献[3]。
由 I/O 口送 出的 控 制信 号 经 总 线 驱 动器 74HC245分别接到行 、列驱 动电路上 。显示电路 结构如图 2所示 。
该 LED显示屏为 16行 ×64列点 阵,共需两 片 HEF4094级联以及 8片 74HC595级联 。
由 HEF4094组 成 的行驱 动器如 图 l所 示 。 由两片 HEF4094组成 16行 的驱动 ,图中只画出 第一片。第一片 HEF4094的 D端连接 I/O 口输 出的串行行显示数据 ,O 端连 接下一片的 D端 。 两 片相应的 CP并联 ,作为统 一 的串行 数据移位 信号 。在各控 制信号输 入端 中,STR端 (高 电平 有效)、EO(高 电平有 效)锁存输 出使 能端接直 流 电源 正极 。
由 74HC595组 成的 列驱 动器 如图 l所 示。 由 8片 74HC595组成 64列 的驱 动,图 中只画 出第一片 。第一片 595的 SER端连 接 I/O 口输 出 的串行列 显示 数 据 ,Q,H端 连 接下 一 片 的 SER 端 ,各片均采用相同的方法组成 8片的级联 ,各片 相应的 SRCLK,SRCLR,RCLK 分别并联 ,作 为 统一的串行数据移位信号 和输 出锁存打入信号 。 在各控制信号输入端 中,SRCLR(低电平有效 )移 位寄存器清零输入端接 电源正极 、OE(低 电平有 效)锁存输出使能端直接接地 。
图 l中黑箭头所指 即为下一 片 74HC595或 HEF4904的信号输入端。
由于行驱动电路同时驱动 64列的 LED发光
器件 ,按每 一 LED器件 电流 20mA 计算 ,64个 LED同时发光时就需要 64×20:l280mA的驱
动电 流 。因 此 需 要 用 功 率 管 驱 动 ,如 TP122 等[ 。
3.2 基本 显 示原 理
采用这种显示驱动 电路 设计 ,只需 4个 I/O 口分别发送 SRCLK、RCLK&CP、SER、D信号就 能实现正常的显示功能,其 中 74HC595的 RCLK 和 HEF4094的 CP共用一根信号线 ,由同一 I/O 口发 出控制信号。74HC595的 SRCLR信号输入 端接直 流电源正极避 免进行 清零操作 ,OE信号 输入端接地使得一旦列显示数据出现在锁存器的 同时各输 出引脚 即呈现 出相应的高低 电平状态。 HEF4094的 STR信号输入端接直流电源正极使得行显示数据 出现在片内移位寄存器的同时即被 打入锁存 器从 而避免锁存打 入操作 ,OE信号输 入端接直流电源正极使得一旦行显示数据 出现在 锁存器的同时各输出引脚即呈现 出相应的高低电 平状态 。因此,需要点亮某一行 时,需要执行 以下 几 个步 骤 :
(1)将 15位行显
示数据 通过 D、CP信号依 次送入到两 片级 联的 HEF4094中,最 后一次移 位在第三步完成 。
(2)将 64位列显示
数据通 过 SER、SRCLK 信号依次送入到 8片级联 的 74HC595中。
(3)发
出列显示 的锁 存打入 信号 RCLK,把 列显数据打到各 595的输 出引脚上 ,完成列显示 的准备工作 ,同时 由于行 移位 信号 CP与 RCLK 共用一根信号线 ,行显示数据完成最后一次移位 , 完成行显示准备工作 。
(4)行列数据都准
备完毕 ,显 示屏 中被选 中 的那一行被点亮 。
(5)延时几毫秒保证每一行有充分
的点亮 时 间然后进行下一行的显示 。
按照以上步骤依次点亮 16行 ,即可让 LED 屏显示需要的图文内容 。
4 LED 显示屏 的软件设 计
HEF4094和 74HC595都是串入并
出移位寄 存器,显然应用串行 口驱动 ,但是 S3C44BOX的串 口资源有限,还要用来与上位机进行通信 ;因此采 用将并行 的 I/O 口模拟成串行 口的方法来解决。 这样仅需要 4个并行 I/O 口就 可 以完成显 示任 务 ,在程序 中使用 PORTD0到 PORTD3这 4个 I/O 口,PORTD由 8个 I/O端 口组成 ,见参考文 献[5]。
下面是 已经在 HitoolForARM 编译环境 中 通过的在 16行 ×64列点阵 LED显示屏上显示 4 个汉字的程序,该程 序用 C语言 编写,稍做修 改 就可以用于各种单片机 系统 。
首先将要显示 的 4个 16×16点阵的汉字字 模存储在数组 zimo[128]中。
主程序代码如下 :
void Send— . Char(void)
{ unsignedshortROW—Data=0×8000;
intk;
for(忌一 0;忌< 128;k+ 一8)
{ ∥调用发送行显示数据子 函数
Send-ROW Data(ROW—Data);
int ;
∥依次取 O~7,8~16等数组元素
for(一0;j
<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 一0;m< 16;m+ + )
{ if(y&1)
∥如果 显示 该行则对 PORTD0置1否则 置 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(一0;i< 8;i+ + )
{ 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> O;time-一)
for(一 0;f<
LoopCount; + + );
)
5 结束语
这种设计方 案大 大节省 了单 片机 的端 口资 源 ,有效简化了显示屏的电路结构 ,提高 了整个显 示系统 的可靠性 ,根据这个设计原 理可设计 出各 种规模 的 LED显示屏 。