HT1632C内部也有一片显存(DisplayRAM, DRAM),我们在文章《液晶显示模组LCD1602之指令篇(1)》中已经说过:你往显存写什么,屏幕上就会相应显示什么。这句话对付HT1632C(以及绝大多数显示器件驱动芯片)也是适用的,以是我们首先须要明确:LED显示状态与显存数据的对应(映射)关系。数据手册标记了下图所示的DRAM映射表。

这张表是针对24个OUTBIT与16个COM的配置(32个OUTBIT与8个COM配置对应的映射表稍有不同,有兴趣的读者可参考数据手册),这可以通过命令来设置,你很快就会知道。其余,我们还用赤色位号(VD11、VD12、VD21、VD22)标记了4个数据位,有分教!
上表见告我们:如果OUTXX行与COMXX列交叉的单元格数据位为1,则相应的LED就会被点亮,反之则熄灭,大略吧!
例如,COM0列与OUT1行交叉数据位为1,则VD12就会被点亮。当然,条件是你的硬件电路是精确的,我们就利用数据手册中的范例运用电路,如下图所示:
我们标记了LED点阵左上角四个LED的位号,VD11表示第1行第1列,VD12表示第1行第2列,其它依此类推。须要把稳的是,电路图中LED的位置相对付DRAM映射表旋转了90度,以是VD11的状态该当取决于DRAM映射表中COM0与OUT0交叉的单元格数据位,也便是地址0x00的D0位,VD12的状态该当取决于DRAM映射表中COM0与OUT1交叉的单元格数据位,也便是地址0x04的D0位,对不对?
为了修正DRAM数据,我们先来看看它的指令集,如下图所示(赤色框内的指令是后续将要利用到的):
把稳“ID”列,在HT1632C被称为模式识别码,大略的说,它用来标记传输的串行数据的详细意义。HT1632C有4种模式识别码,如下表所示:
我们来看看写DRAM数据时序(WriteData),如下图所示:
首先发送模式识别码“101”,表示后续跟随的11位串行数据是往DRAM地址(7位)中写入数据(4位)。须要特殊把稳的是:7位地址的最高位先发送,而4位数据的最低位反而先发送。在浩瀚利用串行通讯接口的掌握器件中,这可以说是比较“奇葩”的位序定义(正常逻辑来讲,要么都是高位先行,或都是低位先行),除非你定义的4位数据本身便是反过来的,否则我们无法将地址与数据直接合并进行发送(必须先将位序反过来)。
例如,现在须要点亮VD22(对应地址0x4),那么往HT1632C发送的串行数据该当为0x2844(0b101_0000100_0100),而不是0x2842(0b101_0000100_0010)。
发送命令的时序如下图所示:
往HT1632C写命令时发送的串行数据是:模式识别码“100”+9位详细的命令位,总计12位(比写DRAM数据时少2位)。例如,我们要打开LED驱动(LED ON),则须要发送的串行数据为0b100_0000_0011_x(x表示无效位,即0x806或0x807)。
还有连续写数据/命令以及读/改写数据的时序,限于篇幅不再赘述,有兴趣的读者可参考数据手册。
咱们利用VisualCom软件平台来验证一下,调出“基于HT1632C的24X16 LED点阵模组”后实行预置数据,相应的仿真效果如下图所示:
该仿真器件的LED位置与电路图是逐一对应的,我们来看看相应的预置数据,如下图所示:
预置数据的位序定义与时序完备一样,例如第四条数据“806”便是我们刚刚先容过的“打开LED驱动输出(LED ON)”指令。
前面四条是初始化HD1632C的指令。我们首先将COM引脚配置为16个PMOS输出构造,该配置的依据来源于前面的硬件电路,图中最下方的提示“Common are PMOS open drain outputstructures”。由于电路中HT1632C利用了16个COM,以是该当设置为16 PMOS构造,设置为NMOS构造是无法点亮LED点阵的,而如果设置为8 PMOS构造,下半部分的LED将不会被点亮(PMOS与NMOS输出构造的详细差异可参考数据手册,本文不再赘述)。
其次,我们把HT1632C配置为主模式,由于从模式紧张用于多芯片级联运用时,我们的硬件电路只利用了一片HT1632C。
再次,我们打开了系统振荡器与LED驱动时序天生电路(默认处于关闭状态),由于动态扫描的时序都是基于振荡器产生的时钟,芯片没有了时钟就相称于人的心脏没有跳动,自然不可能驱动点阵模块显示任何信息。
末了,我们开启了LED驱动输出功能,这样芯片输出才能发出扫描LED点阵驱动时序(默认处于关闭状态)。实际上,我们还该当配置“利用片内RC振荡时钟源(RC)”,但是由于上电后这一项是默认的,以是这一项配置并不是必须的。
实行完前面四条预置数据后,DRAM中的数据就可以显示了,接下来全部是写数据操作。为了显示16X16点阵字体的汉字“电”,我们首先须要进行取模操作,如下图所示:
由于每个DRAM地址中的4位数据对应4个COM(行),以是我们得纵向取模,且每次只写入4位数据,方向为从左到右、由上至下(见DRAM映射表中蓝色箭头方向)。DRAM地址0x0~0x3对应的字模数据都是0,以是我们首先写入了4个0x0(只管VisualCom软件平台已经将HT1632C的RAM数据全部初始化为0x0,但实际运用时还是得重新写入,这样可以避免芯片上电后DRAM涌现随机数据),然后往DRAM地址 0x4写入了0x8。这里再次提醒一下:字模的提取顺序是下高位,这与前述DRAM映射表是对应的,但是写入的串行数据中的4位DRAM数据是反过来的(低位先行),以是实际预置数据的低4位该当是0x1(你可以不雅观察“内存窗口”中的DRAM数据,与提取的字模数据是完备对应的)。读者可自行剖析剩下的预置数据,此处不再赘述。
有些人可能会叫道:这叫啥的VisualCom软件平台不是瞎编的嘛!
我在上面的命令表中可没有看到什么寄存器!
实在与HD44780一样,我们给HT1632C发送命令就相称于设置一些寄存器,只不过数据手册没有将它们像HD44780那样命名而已,VisualCom软件平台为了方便我们不雅观察芯片的状态,做了一些额外的事情将这些寄存器提取出来了而已!
举个小例子,我们比拟一下“SYS OFF”与“SYS ON”指令,就会创造只有一位是有差别的,VisualCom软件平台显示的寄存器“SYS”便是这个数据位的状态(M/S表示Master/Slave,COM表示COMMON OPTIONS, DUTY表示PWM DUTY)。