整体考虑法实现 2 的显示

虽然通过自定义逻辑可以快速地实现译码, 但毕竟是一种取巧的过程, 特别是我们还不知道底层到底应该怎么去实现的时候, 这会让我们有种不踏实的感觉.

因此, 本篇中将探讨一种具体的电路实现, 所谓的整体考虑法.

其整体思路是先根据两路输出划分为四种情况, 然后每种情况对应一组 LED 译码.

分组

在只要区分 0 和 1 的时候, 因为情况比较简单, 用一个继电器做一次区分即可. 现在有四种情况, 但也同时有两个输出, 那么首先根据高位 C 的输出即可将四种情况分为两组:

根据高位 C 做第一次划分

下面组是 2 和 3, 上面组是 0 和 1, 四种情况如下:

根据高位 C 做第一次划分, 四种情况

因为一旦 C 输出高电平, 说明结果一定是大于或等于 2 的.

分成两组后, 两组分别按照低位 S 的输出又可各自再分为两组, 最终分出四路输出, 从上到下分别对应 0, 1, 2, 3:

根据低位 S 再度划分

现在, 如果这四路各自对应一个 LED 数码管, 每个管分别按照 0, 1, 2, 3 的方式接好, 那么问题直接就解决了:

四种情况, 四个 LED 数码管

注: 上图中忽略了加法器部件, 直接以开关模拟输出的值.

可以看到, 四种情况下各自只有一根输出线是高亮的.

另: 为解决输出电压悬空的问题, 使用了电阻及接地.

因为输出暂时不可能为 3, 也可以忽略为 3 的情况.

整合

但上述输出方式有点浪费数码管, 所以还是跟之前类似, 看能否把它们整合到一起.

不考虑输出为 3 情况, 只考虑 0, 1, 2, 就只剩三条线, 正好三条输出线都是分离的, 一个初步的方案如下, 有些线会共同输出到数码管的输入端上:

整合的 LED 数码管, 初次尝试

但这样一来, 因为共线的原因, 又会引发类似前面的电流倒灌问题, 将导致无论是哪种情况下所有的灯都会点亮.

甚至更为严重的是引发模拟器的异常, 模拟器会抱怨 检测到循环回路(wire loop detected) 等问题.

关于 circuitjs 异常及其处理, 参考 模拟器异常处理

当然, 最终的解决方式也跟之前类似, 引入 二极管 并利用它的 单向导电性 即可:

整合的 LED 数码管, 使用二极管及接地

如此一来, 即可防止电流倒流到其它输出线上并再度输入到 LED 数码管的问题.

如上图, 点亮的是 0 线, 但因为二极管的存在, 电流不会回流到 1 线及 2 线.

最终, 四种输入情况下的输出均能被正确解码并显示:

整合的 LED 数码管, 四种情况下的输出

注: 右下角第四种情况, 因为我们没有处理显示 3 的问题, 输出被丢弃了, 所以没有任何显示.

如果需要的话, 你也可以自行加上.

拓展

显然, 上述的方式也可以进一步拓展到三根输出线的情况, 就可以输出 0~7 这 8 个不同数字了.

假如三根输出线, 从高到低分别为 S2, S1, S0, 无非也是先根据 S2 划分为 01234567.

然后下一步, 这两组根据 S1 又可再度各自再划分两组, 就有 01, 23, 45, 67 四组;

最后, 根据 S0 就可以最终划分为 8 组, 这 8 组线再根据所要显示的数字连上 LED 数码管的不同输入端即可显示出对应数字.

读者可以自行尝试去实现, 这里不再给出具体示例.

以上便是整体考虑法. 在下一篇, 再谈谈最后一种方式, 也即是分而治之法.

results matching ""

    No results matching ""