我尝试通过移位寄存器级联+三八译码器,实现用3跟控制线,驱动16*16LED点阵屏的效果。这是第三篇博客,讲述三八译码器的工作原理。
当驱动8×8LED点阵时,单片机至少需要发送16位(8行+8列)的数据;当驱动16×16LED点阵时,单片机至少需要发送32位(16行+16列)的数据;当驱动n×n LED点阵时,单片机至少需要发送2n位的数据。当屏幕比较大的时候,单片机的控制命令相应的变长,每一条控制命令占用的时间也变长;然而视觉暂留要求刷新速度要快,这两者相互矛盾。
分析逐列扫描的过程,不难发现每次只有一列工作,为了方便梳理逻辑,我们假设控制某一列LED的引脚工作时,为高电平。即一个8位的数字,有且只有1个位是1,总共只有8个状态。而2的3次方就是8,即便每个位只有0或者1两种状态,有3个位,就可以表示8个状态。这就需要三八译码器这个器件。本节选用的型号是74HC238,与常见的另一款三八译码器74HC138相比,输出反转。
为了方便级联,74HC238还有3个使能端,OE1是高电平有效,OE2+OE3是低电平有效。多加2根控制线,可以让3个译码器级联成24线译码器。