显示 2 的问题

在解决了表达和计算的问题后, 现在来看最后的显示问题了.

所谓显示, 本质上来讲, 就是一个 译码(decode) 的问题. 在深入之前, 先介绍一个组件: 逻辑输入(logic input).

逻辑输入组件

在之前, 为控制 LED 数码管(以及其它很多方面)的亮灭, 都是用一个单端口电源和一个开关实现的, 但这样的方式还是略显麻烦, 毕竟每次都得弄两个组件, 而也占地方.

现在来看一个逻辑输入组件, 通过 菜单--绘制--逻辑门, 输入和输出--添加逻辑输入(logic input) 可以添加它.

或是通过快捷键 i.

把它接在一个 LED 上, 即可驱动 LED 灯点亮:

逻辑输入

可以认为它就是一个电源和开关合二为一的器件. 默认情况下它显示一个字母:

  • H: High, 表示高电平;
  • L: Low, 表示低电平;

点击字母即可切换通断, 相当于先前"单端口电源+开关"组合时点击开关的效果.

字母会跟随变化, 导线的颜色也会变化.

如果你不习惯字母的显示, 右键--属性, 然后勾选 数字 选项:

逻辑输入, 数字式

就会从字母 H L 变为数字 1 0 来分别表示高低电平.

下面是三个的对比图, 分别使用电源及开关, 逻辑输入(字母显示), 逻辑输入(数字显示):

普通输出, 两种逻辑输入, 对比

你喜欢哪种呢? 显然, 逻辑输入更方便.

编码

现在, 把 LED 数码管的逻辑输入按 abcdefg 有序的排列起来, 并排列在一行里, 如下所示:

LED 数码管对 2 的编码

显然, 这最终呈现出来的一组二进制数字就是一种 编码(code), 而且是 7 位的编码, 7 段就是 7 位.

之所以这样去编码, 因为这对于它驱动内部每一段的亮灭是最简单的. 1 就是亮, 0 就是灭.

可以这么认为, LED 数码管对 2 的编码就是 1101101

同理, 半加器输出端对 2 的编码是 10, 是两位的.

同一方式, 可以得知 LED 数码管对其它数字的编码:

数字 a b c d e f g
0 1 1 1 1 1 1 0
1 0 1 1 0 0 0 0
2 1 1 0 1 1 0 1

因为暂时用不上更多, 这里就不列出其它的.

编码的转换

而二进制与十进制的一个转换, 前面已多次提到:

二进制 十进制
00 0
01 1
10 2

而半加器内部以二进制为基础做运算, 输出也是二进制形式, 与十进制的对应关系如下:

A B C S 数字
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 0 2

以十进制数字为纽带, 连接两者:

A B C S 数字 a b c d e f g
0 0 0 0 0 1 1 1 1 1 1 0
0 1 0 1 1 0 1 1 0 0 0 0
1 0 0 1 1 0 1 1 0 0 0 0
1 1 1 0 2 1 1 0 1 1 0 1

最终, 因为 0 + 1 和 1 + 0 的结果都是 1, 去掉数字 1 方面的重复, 我们需要的一组对应关系是:

C S a b c d e f g
0 0 1 1 1 1 1 1 0
0 1 0 1 1 0 0 0 0
1 0 1 1 0 1 1 0 1

换种表达, 也即是这样的对应关系(映射关系):

CS --> abcdefg
--------------
00 --> 1111110
01 --> 0110000
10 --> 1101101

本质上讲, 就是从一种编码转换为另一种编码.

自定义逻辑组件

抽象地讲, 为完成这样的转换, 需要设计一个如下的模块:

自定义逻辑译码器

它的左侧有两个输入端 I1, I0, 这两个输入端以半加器的输出作为它的输入, 其中 I1 为高位, I0 为低位; 它的右侧有七个输出端, 直接连接 LED 数码管.

它的工作示意如下, 具体为显示 2 时的场景:

自定义逻辑译码器对 2 译码示意

注: 这里直接使用了模拟器内置的半加器实现, 通过 菜单--绘制--数字芯片--添加半加器 可以添加这个组件.

另: 它的输出默认是 C 在下面, S 在上面, 与我们前面的稍有区别, 而因为译码器中假定 I1 是高位, I0 是低位, 因此图中也是交叉连接.

另: A 和 B 的输入方面也使用了前面提到的 逻辑输入(数字式).

这样一种模块, 在模拟器里可以通过 自定义逻辑 功能加以实现. 具体怎么弄将在下一章节探讨.

其实前面最早提到反向控制时, 就曾经使用过自定义逻辑:

输出低电平时显示 0

图中左边一个字母 I(代表 Input, 输入), 右边一个字母 O(代表 Output, 输出)的 反向控制 小模块就是一个自定义逻辑组件.

注意: 那里是字母 I 和 O, 不是数字 1 和 0.

但你知道吗? 常见的一种开关样式里头, 如下图:

开关里的 0 和 1

那里所标记的两个符号就是数字 0 和 1, 代表的恰恰如同逻辑输入那样的 关 和 开 两个状态.

关于 2 的显示问题, 现在清楚了, 不过就是要做一次编码的转换, 也即是所谓的 译码.

我们打算给出三种设计思路, 分别为 自定义逻辑 的思路, 整体考虑 的思路和 分而治之 的思路.

在下一章节, 先分析使用 自定义逻辑 的思路.

results matching ""

    No results matching ""