图1 高速控制方案LED显示屏电原理
本方案的特点有两个: 第一,虽然CPU还是通过并行总线给列驱动电路的锁存器写字模数据,但是锁存器的锁存信号改用了CPU的控制信号RD,而不是常规用法的WR;第二,地址译码电路保证了LED点阵片列驱动电路的片选地址和数据存储器的某一段的逻辑地址是重叠的,而不是常规用法,这两组地址必须分开。
由于上述电路的一些简单更改,单片机对LED显示屏的显示控制效率将发生明显的变化。具体工作过程如下: 假定数据指针DPTR中已经装入了数据存储器的地址,执行指令“MOVXA,@DPTR”。这条指令的功能是CPU按DPTR的指向从外部数据存储器中读字模数据,读到累加器A中;但是在本电路中,由于LED点阵片列驱动电路的片选地址和数据存储器的某一段的逻辑地址是重叠的,也就是说,在执行指令“MOVXA,@DPTR”时,DPTR除了指向外部数据存储器的某个地址外,还选中了某一个LED点阵片列驱动电路的锁存器。如果此时被选中的这个锁存器的锁存引脚正好有打入脉冲来到,那么锁存器也就将从外部数据存储器送出的字模数据锁住了。这个打入脉冲用的就是RD。RD是CPU在执行指令“MOVXA,@DPTR”时向外部数据存储器发出的读控制信号。由于MCS51系列单片机的读控制信号RD和写控制信号WR的时序完全相同[2],RD代替WR实现锁存功能,当然也就没有什么悬念了。这条指令在执行时,在完成对数据存储器读的同时,又完成了对LED点阵片的写,因此加快了显示控制的过程。
前面讲过,并行总线时CPU完成1次向LED点阵片的列驱动电路的锁存器写字模数据的程序过程,大约需要十几μs;而现在只要4 μs,快多了,因为现在完成1次向LED点阵片的列驱动电路的锁存器写字模数据的程序过程只要两步,首先给数据指针DPTR赋有效地址,接着CPU按DPTR的指向从外部数据存储器中读字模数据,与此同时也将字模数据传给了LED点阵片列驱动电路的锁存器。2条指令,4个机器周期,4 μs。这里要补充说明一点,在编制全部LED点阵片列驱动电路的锁存器写字模数据的程序时,不要用循环指令,因为那样每次过程又得增加2 μs;要采用对LED点阵片逐片编程的方法,这样编出来的程序虽然占空间,但节省了时间。用空间换时间的设计方法,有时也是设计人员值得尝试的一种方法。
本电路的行驱动锁存器的锁存控制,还是用CPU的写控制信号WR,不作更改。行驱动锁存器的片选信号也来自地址译码电路。为了避免数据存储器和LED点阵片之间的相互干扰,与这组地址对应的数据存储器的这部分存储空间就不用它了。
地址译码电路的设计,应保证LED点阵片列驱动电路的片选地址和数据存储器的某一段的逻辑地址是重叠的。具体设计举例如下:
假定某一块LED显示屏用了240片LED点阵片,可显示16×16的汉字60个,用1片MCS51系列单片机进行高速控制。这240片LED点阵片列驱动电路的片选地址就应有240个,地址译码电路必须保证译码后的有效地址大于这个数量。图1中的地址译码电路,输入的地址信号是A0~A7和A11~A15,没有接入A8、A9、A10。用74LS138译码器,三级译码后可得到256根有效地址线,第1根有效地址线对应外部数据存储器的8个地址:0000H、0100H、0200H、0300H、0400H、0500H、0600H、0700H。第2根有效地址线对应外部数据存储器的8个地址:0001H、0101H、0201H、0301H、0401H、0501H、0601H、0701H。……第256根有效地址线对应外部数据存储器的8个地址:00FFH、01FFH、02FFH、03FFH、04FFH、05FFH、06FFH、07FFH。这256根有效地址线,240根给列驱动电路的片选地址,余下的给行驱动电路的片选地址;如果不够用,行驱动电路可考虑改为串行总线的方式进行控制。上述分析结果表明,1片LED点阵片的I/O接口地址和数据存储器的8个字节的地址建立了重叠关系。这是因为每片LED点阵片都有8行,每行都对应1个字节的字模数据。
上述分析结果还表明,全部LED点阵片的I/O接口地址和数据存储器的0000H~07FFH地址段建立了映射关系。数据存储器0000H~07FFH中存放的正好是一帧图像的全部字模数据。