s丅7318是啥芯片_透彻解析LED驱动芯片HT1632C指令集与驱动编程

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

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

5456aac3bff6f8abbdac504ee79c5aed.png

这张表是针对24个OUTBIT与16个COM的配置(32个OUTBIT与8个COM配置对应的映射表稍有不同,有兴趣的读者可参考数据手册),这可以通过命令来设置,你很快就会知道。另外,我们还用红色位号(VD11、VD12、VD21、VD22)标记了4个数据位,有分教!

上表告诉我们:如果OUTXX行与COMXX列交叉的单元格数据位为1,则相应的LED就会被点亮,反之则熄灭,简单吧!例如,COM0列与OUT1行交叉数据位为1,则VD12就会被点亮。当然,前提是你的硬件电路是正确的,我们就使用数据手册中的典型应用电路,如下图所示:

ec005f9fb9c211716fa0bd6a222c5783.png

我们标记了LED点阵左上角四个LED的位号,VD11表示第1行第1列,VD12表示第1行第2列,其它依此类推。需要注意的是,电路图中LED的位置相对于DRAM映射表旋转了90度,所以VD11的状态应该取决于DRAM映射表中COM0与OUT0交叉的单元格数据位,也就是地址0x00的D0位,VD12的状态应该取决于DRAM映射表中COM0与OUT1交叉的单元格数据位,也就是地址0x04的D0位,对不对?

为了修改DRAM数据,我们先来看看它的指令集,如下图所示(红色框内的指令是后续将要使用到的):

1feb9061203ad921b9489583d80eb2f2.png

注意“ID”列,在HT1632C被称为模式识别码,简单的说,它用来标记传输的串行数据的具体意义。HT1632C有4种模式识别码,如下表所示:

8014504d765924b491cb651fb36525f6.png

我们来看看写DRAM数据时序(WriteData),如下图所示:

4459d654c9f672c9beffa3ce379b43f4.png

首先发送模式识别码“101”,表示后续跟随的11位串行数据是往DRAM地址(7位)中写入数据(4位)。需要特别注意的是:7位地址的最高位先发送,而4位数据的最低位反而先发送。在众多使用串行通讯接口的控制器件中,这可以说是比较“奇葩”的位序定义(正常逻辑来讲,要么都是高位先行,或都是低位先行),除非你定义的4位数据本身就是反过来的,否则我们无法将地址与数据直接合并进行发送(必须先将位序反过来)。

例如,现在需要点亮VD22(对应地址0x4),那么往HT1632C发送的串行数据应该为0x2844(0b101_0000100_0100),而不是0x2842(0b101_0000100_0010)。

发送命令的时序如下图所示:

9bb13040153fdda12cd7714f6fd370d3.png

往HT1632C写命令时发送的串行数据是:模式识别码“100”+9位具体的命令位,总计12位(比写DRAM数据时少2位)。例如,我们要打开LED驱动(LED ON),则需要发送的串行数据为0b100_0000_0011_x(x表示无效位,即0x8060x807)。

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

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

582b07791fc4c2f2407c9b9e00d1bf56.png

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

306baecdc215316a6e61fea07e178d63.png

预置数据的位序定义与时序完全一样,例如第四条数据“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点阵字体的汉字“电”,我们首先需要进行取模操作,如下图所示:

b0b592e6048663d07cb7fb37cf972116.png

因为每个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)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器显示不明用户远程过,服务器显示不明用户远程过

服务器显示不明用户远程过 内容精选换一换Windows操作系统云服务器蓝屏,如图1所示。使用了来源不明的第三方软件。CPU占用过高导致。因为误操作或者病毒引起的系统文件、注册表损坏。操作系统在蓝屏的情况下,会显示对应的bugcheck code以及可能的导致蓝屏…

【转】Linux ln(link) 命令详解

原文链接 http://blog.chinaunix.net/uid-25445243-id-3206874.html 功能:为某一个文件或目录在另外一个位置建立一个同步的链接,类似Windows下的超级链接。这个命令最常用的参数是-s,具体用法是:sudo ln -s 源文件 目标文件当我们…

微信小程序定义全局变量_微信小程序第二天学习内容分享

微信小程序的生命周期文件的配置在app.js文件中;方法:onLaunch,onShow,onHideapi链接:https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html#onHideonError,当前也可以自定义,用console测试事件的执行情况&a…

discuz设置用户每天回帖数_discuz回贴通知插件实现-显示用户状态设置

一、完善用户是否开启回贴通知回贴通知插件建立模块时,指定了核心文件post_set.inc.php1、创立好数据库建立独立数据表(不建议直接修改原有的discuz数据库,防止discuz升级后数据库发生变化),来保存是否开启回贴通知。create table 前缀_模块_…

C++中的数组与指针

数组与指针看起来很像 int a[] {1, 2 ,3}; int *p a; 如此,我们可以p[0], p[1], p[2] 看起来,与直接使用数组名没什么两样,但是看这段代码 sizeof(a) sizeof(p) 你就会知道,原来数组里还隐含了大小信息,这是指针所不能做到的 严格的说,数组是一种内置的数据类型,C标准对这种数…

iic总线从机仲裁_I2C总线的仲裁问题

【问】有网友问关于I2C总线的仲裁问题:The I2C-bus specification的第13页有这样的话:In other words, arbitration isn’t allowed between:* A repeated START condition and a data bit* A STOP condition and a data bit* A repeated START conditio…

jvm 加载class文件过程

jvm 加载class文件分为装载-链接-初始化三个过程。 load -------->link verify prepare resolve ---------->initialize (类加载过程) bootstrap class Loader | | extenstion class loader | | system class Loader | | ----------- user-define user-define…

dvt高危患者的护理措施_dvt的预防及护理

DVT的预防措施高危患者预防深静脉血栓的护理措施一、深静脉血栓的预防对象 1.大手术病人:三类、四类手术病人。 2.高危患者:①年龄≥41 岁;②肥胖;③妊娠;④盆腔手术或关节置 换手术;⑤急诊剖腹产手术&…

java环境配置—配置Tomcat8环境

先安装JDK,配置好jdk环境后再配置Tomcat 8配置环境变量:TOMCAT_HOME:D:\Program Files\apache-tomcat-8.0.28  CATALINA_HOME:D:\Program Files\apache-tomcat-8.0.28  CATALINA_BASE:D:\Program Files\apache-tomcat-8.0.28修改CLASSPAT…

加密解密_作业-加密解密程序

# 加密解密程序作业:自己写一个加密程序,能够加密的内容是英文和汉字。同时加密并且解密就是说,一段话中既有中文又有英文,标点符号不用处理。加密规则,获取ascii码数字,中间用|分割# 思路提示:…

详解Objective-C中委托和协议

Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托。 AD:【活动】Web和AP…

svn拉取文件合并_SVN分支(branches)合并(merge)到主干(trunk)和拉取分支(tag)

在一个团队协作且不断迭代更新的项目开发中,经常会使用到svn的一些分支主干的方法,这样的好处是使得各个版本之间可独立开发,大多数情况下是branch分支主要用来开发新的功能和版本迭代,主干上面及时快速的修复线上的一些bug和优化…

Unable to load native-hadoop library解决思路

最近试着搭建Hadoop,我使用的操作系统是Centos6.5,Hadoop版本是2.6.0。 在安装过程中总是出现:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable。 解决…

ios13苹方字体ttf_字体 | iOS1013 SF Compact Rounded 英文 By alex

最近沉迷游戏,差点忘记了这个英文。嗨呀,问就是在玩了,啊不,在做了。这个英文来自推特alexman,原版包含100和85大小,本次分享新增到了100-60,每5%一个大小。gzh分享已经获得alex授权&#xff0c…

Rust 中的继承与代码复用

Rust 中的继承与代码复用 在学习Rust过程中突然想到怎么实现继承,特别是用于代码复用的继承,于是在网上查了查,发现不是那么简单的。 C的继承 首先看看c中是如何做的。 例如要做一个场景结点的Node类和一个Sprite类继承它。 定义一个node基类…

怎么将自己的头像p到特定的背景图_【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像...

原标题:【后期修图】photoshop手把手教你制作属于自己的酷炫的微信头像效果图先放上1.新建一个白色的背景,这里是1080*720的。然后在图层面板下面单击创建新的调整图层/渐变,设 置 好渐变参数:黑白渐变,径向&#xff0…

10双屏鼠标过不去_灵耀X2 Duo双屏笔记本是怎样“炼”成的?对话华硕笔记本设计团队...

2020年的CES上,华硕推出了一款灵耀X2 Duo笔记本,灵耀X2 Duo采用了和灵耀X2 Pro相同的屏幕技术,C面同样采用了一块ScreenPad Plus副屏,机身也更轻更薄。如今灵耀X2 Duo的处理器升级至英特尔第十代酷睿,正在参与“618”大…

powershell加win的dns服务器,解决网站负载均衡问题

用我发明的powershell填坑法,加windows的dns服务器。从调整dns服务器解析ip时间段的角度,解决网站负载均衡问题。 ------------------------win2012r2中,用powershell管理dns服务器的,命令列表-------------------------------- 共…

csv python 只写一次_在Python CSV Writer循环中写入一次头

下面是一个scraper,它遍历两个网站,获取团队的花名册信息,将信息放入一个数组中,然后将数组导出到CSV文件中。一切都很好,但唯一的问题是每次scraper移动到第二个网站时,csv文件中的writerow头会重复出现。…

理解 OpenStack 高可用(HA) (6): MySQL HA

本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)Neu…