如何在mc里打造一个计算器[1] -- 整体结构&寄存器
废话不多说, 直接开始正片
这部分着重讲述输入, 计算, 输出之间的结构, 显示部分的结构留给后面讲述

既然是计算器, 那么肯定要有计算功能, 那么简要来说我们的计算器是这样的结构

但是只有计算还不够, 我们还需要显示

我们现在是需要做一个简单的两个数字间的加减乘除计算器, 那么计算输入部分必须连接着两个数字寄存器和一个模式寄存器

已知我们输入的是十进制, 而计算需要的是二进制, 而输出也需要十进制, 那么我们需要在BIN和BCD之间转换, 并且为了区分数字A和数字B, 需要使用符号来区别A和B

一个计算器的大概结构就是这个样子了
如何来简单说一下数据之间流动的方向
1. 在每按下一个数字的时候, 应该有一根独立的控制线去控制 BCD转BIN 部件实时转换. 因为当你按下0的时候, 对应的bcd是0000, 这时候就需要提示后续部件"输入了一个0"
2. 在按按下符号的时候, 数字应该流向A, 而按下符号的一瞬间, A储存下此时的输入, BCD转BIN清零, 数字流向转去B
3. 在按下等于之前, 是不应该有输出的, 并且计算部分也不应该有输入, 所以在按下等于之后, B储存下此时的输入, 然后把模式,A和B一起输入计算部分, 同时打开输出显示
4. 我在这里使用 "实时计算" 的部件, 所以重置计算器只需要重置输入就可以 当然也有一种触发型的部件, 就是只有触发信号进来了才会进行计算, 这种部件一般内置寄存器, 重置时需要专门重置内部的寄存器, BCD转BIN就属于一种触发型计算部件, 所以需要独立的触发和重置信号
如果使用这样的符号表示 "C控制A的流向" 的话

那么整理一下可以得到 *** 忽略显示 ***

这就是最简单的计算器结构了, 关于每个部件的实现留到后面慢慢讲述, 现在来说一下

寄存器和位移寄存器
寄存器就是内存的一种, 它可以接收信号, 并把信号储存在内部
最简单的寄存器有 输入, 控制, 重置, 输出, 四个端口, 只有控制端变为1时, 才会把输入储存, 而重置是把内部储存的数据变为0

上面的就是mc里最简单的储存结构, 经过一些改造就可以得到寄存器

这个就是最简单的寄存器, 左边蓝色是输出, 右边蓝色是输入, 绿色是控制, 黄色是重置
需要注意的是, 寄存器只能储存1, 也就是说, 一旦存储了1之后, 除了重置, 没有其他办法把存储的数据变为0, 这点与一般说的"内存"是不一样的
位移寄存器拥有多个输入和输出, 当只有一个控制端, 并且分为左移和右移两个版本
例子: 6bits左移寄存器: 输入: 001001
输出000000, 控制端输入, 输出001001, 控制端输入, 输出010010, 控制端输入, 输出100100, 控制端输入, 输出001000, 控制端输入, 输出010000
可以看出, 控制端没信号的话, 输出永远是0000, 而控制端输入一次后, 记录下目前的数据, 再次控制端输入就会逐位向左移动数据
一般来说用逻辑门实现位移寄存器是很复杂的, 但是幸亏mc里中继器有一个很神奇的特性
这个装置摆成这个样子自己尝试一下, 录制的视频一直不能转成gif上传上来= =

利用这个特性可以做出一个很小的位移寄存器


注意, 输出的第一位对应着输入的第二位, 输出的第二位对应输入的第三位, 以此类推, 并且左移的控制端在最左边, 右移的在最右边

到此就把计算器大体结构和mc里最简单的两种储存器了解完了, 下一篇真是开始介绍部件的实现

