HT1632C是一款很常用的LED(数码管或点阵)驱动芯片,虽然官方已经宣布该芯片明年(2021年)即将寿终正寝(停产),但是相同厂家生产的同系列芯片的控制方式通常是相同的(事实上,大多数LED驱动芯片差别也不大),所以了解HT1632C的控制原理对快速上手其它芯片也有一定的积极意义。

HT1632C内部也有一片显存(Display RAM, 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数据时序(Write Data),如下图所示:

首先发送模式识别码“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表示无效位,即0x8060x807)。

还有连续写数据/命令以及读/改写数据的时序,限于篇幅不再赘述,有兴趣的读者可参考数据手册。

咱们使用VisualCom软件平台来验证一下,调出“基于HT1632C的24X16 LED点阵模组”后执行预置数据,相应的仿真效果如下图所示:

该仿真器件的LED位置与电路图是一一对应的,我们来看看相应的预置数据,如下图所示:

预置数据的位序定义与时序完全一样,例如第四条数据“806”就是我们刚刚介绍过的“打开LED驱动输出(LED ON”指令。

前面四条是初始化HD1632C的指令。我们首先将COM引脚配置为16个PMOS输出结构,该配置的依据来源于前面的硬件电路,图中最下方的提示“Common are PMOS open drain output structures”。由于电路中HT1632C使用了16个COM,所以应该设置为16 PMOS结构,设置为NMOS结构是无法点亮LED点阵的,而如果设置为8 PMOS结构,下半部分的LED将不会被点亮(PMOS与NMOS输出结构的具体区别可参考数据手册,本文不再赘述)。

其次,我们把HT1632C配置为主模式,因为从模式主要用于多芯片级联应用时,我们的硬件电路只使用了一片HT1632C。

再次,我们打开了系统振荡器与LED驱动时序生成电路(默认处于关闭状态),因为动态扫描的时序都是基于振荡器产生的时钟,芯片没有了时钟就相当于人的心脏没有跳动,自然不可能驱动点阵模块显示任何信息。

最后,我们开启了LED驱动输出功能,这样芯片输出才能发出扫描LED点阵驱动时序(默认处于关闭状态)。实际上,我们还应该配置“使用片内RC振荡时钟源(RC)”,但是由于上电后这一项是默认的,所以这一项配置并不是必须的。

执行完前面四条预置数据后,RAM中的数据就可以显示了,接下来全部是写数据操作。为了显示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)

精通LED驱动芯片HT1632C指令与编程应用的更多相关文章

  1. TMS320C54x系列DSP指令和编程指南——第1章 汇编语言工具概述

    第1章 汇编语言工具概述 TMS320C54x DSP的汇编语言开发工具包括: ■  Assembler      ■  Archiver      ■  Linker      ■  Absolut ...

  2. TMS320C54x系列DSP指令和编程指南——第2章 通目标文件格式介绍

    第2章 通用目标文件格式介绍 汇编器和连接器可以产生在TMS320C54x器件上执行的目标文件,这些目标文件的格式称为通用目标文件格式(COFF).采用COFF格式有利于程序的模式化编程,因为它支持用 ...

  3. TM1668 Led 驱动芯片源程序

    #define P_1668DAT_In RA0 //数据输入端口 #define P_1668DAT LATA0 //数据输出端口 #define P_1668CLK LATA1 #define P ...

  4. Spark入门到精通--(第二节)Scala编程详解基础语法

    Scala是什么? Scala是以实现scaleable language为初衷设计出来的一门语言.官方中,称它是object-oriented language和functional languag ...

  5. 汇编实验一 查看CPU和内存,用机器指令和汇编语言指令编程

    在装完DosBox环境之后,就可以用debug模式进行汇编指令的编程了. 实验内容:      首先用a指令进行数据的储存,然后用t命令进行调试. 可以发现ax,bx在不同的命令下发生了改变,cs的地 ...

  6. 【repost】如何学好编程 (精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你

    方法(一)编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然是不可能的!当我看完了云风的<游戏之旅--编程感悟>和梁 ...

  7. LED恒流驱动IC汇总

    LED恒流驱动IC汇总 2017年09月22日 11:29:01 阅读数:569 这几天在找LED恒流驱动芯片,无意间在LED网论坛上发现这个帖子,分享给大家! LED恒流IC芯片大盘点        ...

  8. Python 从入门到精通 全程最佳实现梳理

    零零星星的时间,持续完善中...... 1.一些基础的必要信息归纳 Python 官网 www.python.org 发明者 吉多·范罗苏姆 发行时间 1991年,​26年前 编程泛型 多泛型.面向对 ...

  9. 基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)

    最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术. 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机 ...

随机推荐

  1. SpringBoot系列——Activiti7工作流引擎

    前言 工作流程是我们日常开发项目中常见的功能,本文记录springboot整合activiti7. Activiti介绍 官网:https://www.activiti.org 数据库表 act_hi ...

  2. 原生JS和jQuery创建元素的方法

    jQ创建元素的方法 1.原生代码 .creatElement('tr')` .innerHTML = '<h1>加油</h1>' document.write('<h1& ...

  3. [Java] GUI编程基础 绘图

    库 swing awt 过程 创建窗口JFrame JFrame-->MenuBar-->Container 屏幕坐标系:左上角为原点 Graphics2D Main.java 1 imp ...

  4. 用JIRA管理你的项目——(二)JIRA语言包支持及插件支持

    昨天兴奋地把JIRA环境搭好,瞅了一眼管理界面--全英文,真是汗! 尚且不说全中文版管理界面让人操作起来多少会有困难,更别说是全英文! 昨天赞叹JIRA语言包支持丰富,今天终于找到了号称100%的语言 ...

  5. 在linux下把jsp文件 打包war格式(centos7)

    在linux下把jsp文件 打成war包 chmod -R 777 /data/jdk8u242-b08/bincd /data/TongWeb61712/deployment/TestCase//d ...

  6. vmware快捷键大全

    初学linux的朋友往往需要使用VMware这个软件 与其打交道多了 越来越觉得快捷键的重要性 特将搜集到的快捷键记录以便查阅记忆 Ctrl-Alt-Enter 进入全屏模式 ctrl+alt+ins ...

  7. Zabbix 架构

    Zabbix 架构 1.Zabbix Server Zabblx server是agent程序报告系统可用性.系统完整性和统计数据的核心组件,是所有配置信息.统计信息和操作数据的核心存储器. 2.Za ...

  8. 013.Python的文件操作

    一 文件操作 fp = open("打开的文件",mode="模式选择",encoding="编码集") open 函数 返回一个文件io对 ...

  9. IDEA 常用快捷键列表【建议收藏】

    编辑代码 快捷键 说明 Alt+Enter 导入包.自动变量命名等(万能快捷键) Ctrl+X 删除行 Ctrl+Y 删除当前行 Ctrl+D 复制行 Alt+Shift+Up/Down或Ctrl+S ...

  10. 有关Git基础操作的学习

    Git简介 Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容. Git 易于学习, 占地面积小,具有闪电般的快速性能.它具有诸如Subversion,CVS,P ...