模拟键盘输入--普通开关

在目前的四位加法器中, 要输入要加的两个数, 必须采用两个四位的二进制数的方式去指定.

结果的输出同样是一个四位的二进制数, 不过通过 LED 数码管的译码, 至少在 10 以下的数还是转换成了我们熟悉的十进制的形式. 因此, 输出方面的问题还没有那么突出.

目前的一个主要问题是怎么去便利这个输入的过程, 大概有两目标:

  • 一是让用户不需要去转换二进制;
  • 二是尽量减少用户拨弄开关的操作.

一个具体例子

举个例子来说, 假如用户现在想录入一个加数 7, 第一步需要知道它的二进制形式, 也即是 0111.

然后, 因为一排四个的逻辑输入开关默认都是 0, 用户需要拨弄三次才能达到目的:

用户输入二进制 7 的过程

可见, 很麻烦, 尽管我们为每个输出的加数也提供了 LED 译码显示, 但转换和录入的麻烦还是无法纾解.

键盘输入原型

让我们设想一个这样的输入原型:

  • 用户以十进制形式指定要加的数;
  • 用户只需操作一次开关即可置入一个数.

它的原型是这样的:

键盘输入原型

为简化起见, 这里只考虑输入 0, 1, 2, 3 的情况, 更多的数字是同样的道理.

左侧的每个开关直接对应一个十进制的数字, 将对应开关置为高电平, 右侧就输出相应的十进制数对应的二进制编码.

因为左侧只有 4 个数字, 因此右侧只需两位输出.

如果需要更多数字, 也不过就是扩展更多的位数.

实现

这样的一个东西, 本质也还是一个编码转换的过程, 其实与 LED 数码管的译码过程是类似的.

无非也即是找到这样几个映射关系:

1000 --> 00(0);
0100 --> 01(1);
0010 --> 10(2);
0001 --> 11(3);

据此可以列出真值表:

A(0) B(1) C(2) D(3) S1 S0
1 0 0 0 0 0
0 1 0 0 0 1
0 0 1 0 1 0
0 0 0 1 1 1

注意: 这里输入有 ABCD 四个, 严格说, 需要枚举所有 16 种情况, 但这里只列举了 4 种情况.

这里没有列举它们的后果是除 0100, 0010 和 0001 以外的所有输入组合的结果都是 00, 与 1000 的结果一样.

也即是比如 0000 也是 00, 1111 也是 00 等等.

进而:

S1 = A'B'CD'+A'B'C'D
 = (A'B')(CD'+C'D)
 = (A+B)'(C^D)

最终是一个 或非门 和 一个 异或门 的结果再用一个 与门 求与.

S0 = A'BC'D'+A'B'C'D
 = A'C'BD'+A'C'B'D
 = (A'C')(BD'+B'D)
 = A'C'(B^D)
 = (A+C)'(B^D)

最终也是一个 或非门 和 一个 异或门 的结果再用一个 与门 求与, 只是输入的情况稍微不同.

转换为门电路的实现如下:

两位四输入简易译码器

标识其节点, 然后创建子电路并添加实例:

两位四输入简易译码器实例

四种输入情况下的译码输出如下:

两位四输入简易译码器译码演示

将其集成于四位加法器中的效果如下, 演示了 2 + 3 的情形:

输入译码用于四位加法器中

另: 因为没有做更多位的译码, 因此不能输入超过 3 的数字, 读者可以自行扩展.

可以说现在用户要加什么数就简单多了, 他只需要在输入译码器中选择正确的数字置为高电平就行了.

遗留的问题

回顾先前的一个目标: "用户只需操作一次开关即可置入一个数", 应该说, 如果只进行一次加法, 这么说也没有什么问题, 但如果要连续做多次的加法, 情况就有所不同了.

比如, 先前做了 2 + 3, 现在紧接着要做 1 + 0, 那么单纯把数字 1 和 0 对应的开关置于高电平是不够的, 还需要把先前数字 2 和 3 的高电平重新置回低电平, 也即是至少得两次操作.

如果想真正达到一次操作的目的, 那么就需要再度调整输入原型.

不难注意到我们日常用的键盘, 它的每个键不像普通开关那样, 会处于断开或闭合的状态, 它更像是一种 按钮开关(push switch), 你按一下, 它短暂地闭合, 然后又会松开, 重新回到断开状态.

按一下它就能输入一个符号, 键不需要一直按着.

显然, 像手机里的按钮, 电脑的开关等等很多都是这样的按钮式的开关.

模拟器其实也支持按钮开关, 但问题不只是出在开关上, 我们目前设计的所有电路, 它们的输出都是随时跟随输入而变化的.

当改成按钮式的开关后, 做到开关被按下的时候, 输出正确的译码是不难的, 但问题在于一旦松手后, 输入就发生了变化, 而此时这个输出还怎么去保持它的状态呢?

如果我们打算采用按钮式的开关, 则设计的电路必须有能力 记住 用户按下了什么. 怎么让电路去 记忆 状态, 应该说, 这是我们之前从未碰到过的问题, 在下一章, 我们将尝试让电路去 记住 一些东西, 从而可以实现这种按钮式的输入模式.

results matching ""

    No results matching ""