数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 7603|回复: 80

[other] 从晶体管讲起,科普下 NT7086 系列 LCD 液晶屏代码该怎么写(原创)

    [复制链接]
发表于 2023-7-18 03:14:07 | 显示全部楼层 |阅读模式
首先感谢大家的支持!前些天写了一篇点亮 NT7086 液晶的帖子:https://www.mydigit.cn/thread-402876-1-1.html

原帖受限于篇幅,特地没过分展开,避免过早纠结于细致的技术点以至于忘了点屏大业。

应大家的呼声,今展开一段细致科普,从晶体管讲起,一路介绍到该怎么写 NT7086 驱动代码。
本质上是介绍数电中串入并出移位寄存器的驱动,熟悉此部分的朋友可以直接跳过本帖,当然也欢迎讨论。


【晶体管构建逻辑门】

这里仅以 PMOS-FET 晶体管为例构建逻辑门,实际工程中会有更为复杂的晶体管结构,但基本功能不变。

如下图所示,一只开关 SW1 切换 IN 端电压状态(12V/0V),经过 Q1 驱动后,带动灯泡 L1 工作。
当 SW1 拨至 L 端时,Q1 导通,L1 点亮;
当 SW1 拨至 H 端时,Q1 截止,L1 熄灭。



电路实现了开关状态(IN)到灯状态(OUT)的一个映射。把关键电路抠出来,就是传说中的【非门】,符号如下:



若规定电池负极电位(0V)为低电平(L),电池正极电位(12V)为高电平(H),则非门的逻辑描述为:
当 IN=L 时,输出 OUT=H;
当 IN=H 时,输出 OUT=L.

至此,获得了“非门”的构建思路。


再考虑另一个略复杂的电路,如下图,两只开关 SW1,SW2 切换状态,经 Q1,Q2 综合驱动,带动灯泡 L1 工作。
当 SW1,SW2 不全拨至 H 端时,Q1,Q2 不全截止,L1 点亮;
当 SW1,SW2 全都拨至 H 端时,Q1,Q2 全都截止,L1 熄灭。



电路实现了双开关状态(IN1,IN2)到灯状态(OUT)的一个映射。同样抠出关键电路,就是传说中的【与非门】,符号如下:



同样规定高低电平,则与非门的逻辑描述为:
当 IN1,IN2 不全为 H 时,输出 OUT=H;
当 IN1,IN2 全都为 H 时,输出 OUT=L.

至此,获得了“与非门”的构建思路。

实际的逻辑门还有更多种,但构建思路、构建方法大同小异,因而不多作介绍。


【逻辑门构建RS触发器】

在简单逻辑门的基础上稍加组合,就可以构成复杂的数字逻辑电路,不忘点屏初衷。
这里尝试构建 RS 触发器,最简单具有“记忆”功能的数字电路,是静态内存 SRAM 的基本构成。

如图所示,两只与非门反扭在一起,就是最经典的 RS 触发器。~S 和 ~R 为输入端,Q 和 ~Q 为输出端。



依照与非门的逻辑功能,可以推导出 RS 触发器的逻辑功能,如右侧表格所示。

当输入端 ~S,~R 均为 H 时,输出端 Q,~Q 保持前一刻的状态不变;
当输入端为其他状态组合时,输出端可以设定为相应状态(注意一般不使用 H,H 输出态)。

至此,获得了“RS触发器”的构建思路。


【RS触发器改进为D触发器】

然而 RS 触发器并不好用,输入端有一定的冗余,因而尝试升级为 D 触发器。

如图所示,在 RS 的基础上,再加一层“使能层”(U3-U5),就构成了更为复杂的 D 触发器。



同样依照 RS 的逻辑功能,可以推导出 D 触发器的逻辑功能,如右侧表格所示。

当输入端 CK=L 时,输出端 Q,~Q 保持前一刻的状态不变;
当输入端 CK=H 时,输出端 Q=D,输出端 ~Q 为反相的 Q.

拿逻辑门画的 D 触发器太费墨水,索性简化一下符号,获得【常规 D 触发器】:



发明 D 触发器的歪果仁闲的蛋疼,将两个常规 D 触发器串联,又出现了神奇的【边沿型 D 触发器】。
注意在符号上,CK 脚旁边有 > 符号的是“边沿型”,没有的是常规型:



可以证明,边沿型 D 触发器仅在 CK 的上升沿(即从 CK=L 到 CK=H 的瞬间)更新 Q=D,其他情况下 Q,~Q 均保持不变。

一般将边沿型 D 触发器的 CK 称作“时钟端”,D 称作“数据端”。

至此,获得了“边沿型 D 触发器”的构建思路。


【D触发器级联为移位寄存器】

有了边沿型 D 触发器能干什么? 串起来搞事情!点屏!

如下图所示,八只边沿型 D 触发器首尾相接、时钟 CLK 并联,形成了一个特殊的电路。
电路输入有两个脚 DAT,CLK,输出有八个脚 Q0-Q7.



按照边沿型 D 触发器的特性,每次 CLK 上升沿,触发器们同时将 D 的状态更新至 Q.
即当 CLK 出现上升沿时,Q6更新至Q7, Q5更新至Q6, Q4更新至Q5, ... ,Q0更新至Q1, DAT更新至Q0.

Q0-Q7 的状态整体右移了一位,故而得名【移位寄存器】。

实际上走到这一步,我们已经造出了一片 74HC164,8bit串行移位寄存器(DIP14封装):



至此,获得了“移位寄存器/HC164”的构建思路。


【移位寄存器升级锁存】

有了移位寄存器,还有什么可追求的? 显然是优雅,大愚若智的优雅,屏还是要点的。

如下图所示,在移位寄存器 Q0-Q7 的基础上,再装八个边沿型 D 触发器,最终输出 Qa-Qh:



后装的八个触发器不再是串联,而是逐一接在移位寄存器上,实现一个“同步锁存”的功能。
后台 Q0-Q7 移位工作的同时,前台 Qa-Qh 可以锁存住某个状态保持不变,故而得名【带输出锁存的移位寄存器】。

优雅到这一步,就出现了鼎鼎大名的 74HC595,8bit带输出锁存的移位寄存器(DIP16封装):
这片将近 60 岁芯片,至今仍活跃在大街小巷的广告牌上,甚至连脚序都没改过。



至此,获得了“带锁存的移位寄存器/HC595”的构建思路。


画一条分割线,硬件讲到这里,差不多够写代码了。


----------------------------------------------------------


【NT7086串行驱动】

液晶驱动器 NT7086,实则就是类似于 HC595/HC164 的移位寄存器。下图摘抄自 NT7086 手册:



可以看到 NT7086 的核心是一个带锁存的 80bit 移位寄存器。
从构建上来说,需要 80 个边沿型 D 触发器来作移位,然后再 80 个边沿型 D 触发器来作锁存。

对于移位寄存器的软件驱动,一般是按下图时序来进行:



以 8bit 移位寄存器为例,当输入了 8 个 CLK 正脉冲,并同步在 DAT 上输入相应电平(1=H, 0=L),
就可将输出端 Q0-Q7 设定为预想的样子。例如上图中 DAT 输入了 10110010,最终 Q7-Q0 的状态就被设定为 10110010.

硬件上只用了两根线(CLK,DAT),经过移位寄存器就可以控制八个独立的输出(Q0-Q7),这就是移位寄存器的作用。
对于 NT7086,移位寄存器有 80bit 长度,相当于两线输入(CLK,DAT),八十线输出(Q0-Q79)。

在软件上,基本就是写代码使得 CLK,DAT 按照预设的样子输出电平,大体如下:



实际上会用循环、指针等技巧,来避免代码太长,大体长这样:



对于 Arduino 环境,直接用 shiftOut 函数就可以驱动移位寄存器,简单粗暴:




【NT7086点屏】

实际点屏过程中,还需要参考 NT7086 手册上的工作时序,了解与理想 164/595 的差异,以便程序额外照顾:



至此,如果 C 语言功底还行的话,基本就能点亮基于 NT7086 的低配版液晶了,例如刷二进制计数图案:




-----------------------------------------------------------


以上,从晶体管讲起,科普下 NT7086 系列液晶代码该怎么写。

最后祝大家点屏顺利!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 14家元 +393 收起 理由
2n3055 + 30 謝謝分享
cushion + 30 優秀文章
兰陵 + 30 謝謝分享
亲爱的混蛋 + 30
aping365 + 30 優秀文章
zzqqzzz + 30
kkdkj + 30 謝謝分享
慕名而来 + 30 優秀文章
hongo + 30 優秀文章
bj549 + 21 優秀文章

查看全部打赏

本帖被以下淘专辑推荐:

 楼主| 发表于 2023-7-18 11:20:54 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 11:28:09 | 显示全部楼层
zdylong 发表于 2023-7-18 11:19
pMOS与nMOS刚好相反啊,我们常用的是NMOS,为什么?


跟半导体工艺有关:P 型半导体需要掺杂 III 族元素(铝、镓、铟),而 N 型半导体掺杂 V 族元素(砷、锑、磷)。

两种掺杂的成本、难度有差异,结果导致两类型半导体的制造成本有出入。
最后就对应到晶体管上,NPN 型、N 沟道 的管子更容易做出来,同样工序下做出来更健壮.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 11:33:33 | 显示全部楼层
wxhjsr 发表于 2023-7-18 11:23
没学过数字电路的简直就是在看天书。

的确会这样,每一步构建都在升维;

反过来每次升维,对原有电路的设计都是降维打击。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 12:07:25 | 显示全部楼层
猪小呆 发表于 2023-7-18 12:01
所以如果限制了镓出口,是不是连CPU都造不出来了?毕竟CPU里有几百亿个晶体管,而PMOS需要掺杂镓? ...

理论上有影响,但实际影响多大这个难说,毕竟矿产不是一家独大。

反过来加工的技术,仍在卡脖子。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 16:51:50 | 显示全部楼层
慕名而来 发表于 2023-7-18 13:10
请教楼主帮忙看看我的这个与非门电路的工作原理,我用逻辑分析仪测M端有9ms高+6ms低的波形输出,但它的震荡 ...


CD4093 是带施密特输入的与非门,逻辑上相当于 CD4011,但输入特性上是施密特式的(有回滞电压)。

两个与非各有一个脚接 5v(H),因而均退化为非门。

施密特输入的话,有个回滞特性:上升沿达到 Vth 才算 H,下降沿降到 Vtl 才算 L,并且 Vth>Vtl.
U1 配合 R1-C1 回路就会在 Vtl 到 Vth 这两个电压间来回充电、放电,形成振荡,再经过 U1 整形就有了。

至于振荡占空比不是严格 50%,应该是施密特门的 Vtl, Vth 没有严格在 2.5v 附近对称。例如 Vtl=2.3v, Vth=3.0v
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 21:31:48 | 显示全部楼层

所以会有理论上的《人肉计算机》
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 00:58:05 | 显示全部楼层
hylg 发表于 2023-7-18 17:25
这也讲得太详细了。

主要自己也理一下头脑中的知识结构,看是否有能力把知识串起来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 01:15:44 | 显示全部楼层
smz-j 发表于 2023-7-19 07:29
谢谢楼主的科普,讲解的真好。

感谢支持!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 01:16:17 | 显示全部楼层
zhfsh 发表于 2023-7-19 08:56
谢谢分享楼主辛苦了

感谢支持!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 01:17:05 | 显示全部楼层
ljlj2001 发表于 2023-7-19 12:04
学习了,前边还能明白,后边还得再努力

把 CD4000 全选放入购入车,半年后保准你比谁的熟悉
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 01:28:42 | 显示全部楼层
不长翅膀的猫 发表于 2023-7-19 13:06
每一小段感觉看懂了,可是看到最后,我发现我又没懂。这放到课堂上,不得讲好几节课。 ...

考数电实验的时候,我们老师别出心裁的写了一个选题程序,每个人随机选题(但 SPACE 是要你亲手按下的)。
然后我就亲手按出了 “用四只与非门 NAND 实现异或门 XOR” 的隐藏大题。

选完题进实验室,有那么一瞬间蒙的状态,这都啥玩意。 仔细回想了模糊的电路原理,凭记忆慢慢画出来,演算一下逻辑上是对的,这才松了一口气。

上机连线打死不工作,逻辑一片混乱。以为作为课代表的我要挂了,结果拆解单元,发现有一个 NAND 被前人干烧了....  报告完换了实验箱,终于算是考核通过。

-----------------------------------------------------

话说这种考试经历太吓人
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 01:41:11 | 显示全部楼层
aping365 发表于 2023-7-19 14:09
楼主这是要出书吗?这么详细的科普文章!!!

出书还咋贴 GIF 图,果断选择在这里写
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 01:47:23 | 显示全部楼层
happy_ppt 发表于 2023-7-19 16:54
这才是真正的大佬,写得很好,学习了

感谢支持!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 01:49:07 | 显示全部楼层
猪小呆 发表于 2023-7-19 23:18
走,一起去学清华的数字电路国家级精品课程,学完你也能成为大神:
https://www.mydigit.cn/thread-40349 ...

建议去包邮店里,把 CD4000 和 74HC 系列每样来几片,潜心研究之
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-23 16:25:09 | 显示全部楼层
asklaibao 发表于 2023-7-23 11:08
前面讲门电路、移位存储器的不就是高中一年级发的计算机入门教材后面附录1的内容嘛。
那个附录是从门电路一 ...

现在的附录1都这么深入了么,不过想来也是,这些再不普及都要被淘汰了。

原理上计算机就是这么构成的,但实际上东西多了去了: 你看机器猫,知道竹蜻蜓可以上天,这叫科普;
但背后你不知道竹蜻蜓会产生反扭力,导致需要尾桨或者共轴反桨才能平衡力矩,这才是现实。

实际上对于数电,临界态的优化(竞争/冒险)比电路本身还要烧脑。举例:
移位寄存器在一个 CK 上升沿,为什么严格的只移动了一位? Q 更新的瞬间导致后续 D 也更新了,为什么这个更新没再继续下去,进而移动多于一位?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-27 02:09:28 来自手机浏览器 | 显示全部楼层
szcpu 发表于 2023-7-27 01:32
就是因为这个烧脑的问题,我学计算机的时候,没能坚持下去。

这烧啥脑啊,CD4000多买几片就啥都会了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-4 21:56:07 | 显示全部楼层
hylg 发表于 2023-8-3 10:02
写得真好,接着编,

讲完寄存器就够费劲了,再往下得讲 ALU 了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-4 21:56:38 | 显示全部楼层
qarb 发表于 2023-7-31 11:17
没看完,收藏了,以后空闲好好学习下,楼主是个老师吧?

哈哈还没到那个程度
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-17 13:59:49 | 显示全部楼层
bg3mbc01 发表于 2023-8-12 23:42
谢谢楼主的科普,数字电路基本结构讲解的真详细。

感谢支持!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-2 07:24 , Processed in 0.171600 second(s), 16 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表