纪念21世纪机器狗打败人类暨2016智能机器人元年
为了纪念21世纪机器狗打败人类暨2016智能机器人元年,我在MC(minecraft)游戏软件内用红石电路做出了19以内二进制输入十进制输出的加法计算器。你们想知道怎么做么?想的话就往下看吧!
第一章
了解红石
首先,我们要先了解MC中的一些最常用的的红石元件,我们做普通电路时就有电路元件,那么,MC中的红石元件是什么呢?
红石(redstone),用于连接电路。F3中power是电流强度。
中继器(repeater),用于增强电流强度,也可做二极管和锁存器,也可做延时器。
电流到达蓝色羊毛上时,电流能量耗尽,power为0,要用中继器充能。
在电流power为一的地方放一个中继器(注意朝向),power会变为15,0~15只有16个数字,游戏开发者一定是为了计算方便才用十六进制的。
用中心对准中继器,看F3,右侧有一行delay变量,表示的是中继器的延时时长。1表示1tick,简称1T,2表示2T,3表示3T,4表示4T。(1tick=0.1秒)
2Tick 3Tick 4Tick
红石火把(redstone_torch),可以用来做非门,也可以用来做高频。
(非门)S=0,Q=1 (非门)S=1,Q=0 S=输入端
Q=正输出端
第二章
了解逻辑门
无论是19位计算器,还是功能强大的CPU,都是用逻辑门堆叠起来的,而然,所有的逻辑门都由一个逻辑门拼接而成,它就是非门。
非门在上一章末提到过,他的作用就是把输入端的信号取反,我们还可以用它拼出很多组合逻辑门。
与门 只有两个输入端都为1时,输出为1,否则
为零。
S1 S2 Q
0 0 0
1 0 0
0 1 0
1 1 1
或门 只要有一个输入端为1,输出为1。只有输入端都为0时,输出为0。
S1 S2 Q
0 0 0
0 1 1
1 0 1
1 1 1
与非门 和与门差不多,就是输出取反。
S1 S2 Q
0 0 1
0 1 1
1 0 1
1 1 0
或非门 和或门差不多,就是输出取反。
S1 S2 Q
0 0 1
0 1 0
1 0 0
1 1 0
异或门 两个输入端一样,输出0;两个输入端不一样,输出1。
S1 S2 Q
0 0 0
0 1 1
1 0 1
1 1 0
同或门 和异或门差不多,就是输出取反。
S1 S2 Q
1 0 0
0 0 1
0 1 0
1 1 1
第三章
现在,我们就可以做二进制加法器了。二进制加法器分为两种,一种是半加器,一种是全加器,全加器是半加器的组合。
半加器(图不用看)
最原始的二进制加法器。
电路图:
A B Q C 1 1 0 1 1+1=0 进位:1
0 0 0 0 0+0=0 进位:0 A=1号加数个位
1 0 1 0 1+0=1 进位:0 B=2号加数个位
0 1 1 0 0+1=1 进位:0
全加器
电路图:
D = 前一位的进位
A B D S C
0 0 0 0 0
1 0 0 1 0
1 0 1 0 1
如果按照这样做的话,可能会使计算器变得超级大,那么有什么方法能减少空间呢?
单片堆叠
简单来说就是把一个区块一样的部件一片一片得叠起来,接下来是单片二进制加法器的做法:
图一:两个输入端
图二:两个非门
图三:一个或门
图四:一个或非门
图五:一个异或门
图六:开始搞进位段(蓝色羊毛),中继器用来提取红石能量
图七:再做一个异或门(图1~图5),一段是上个异或门的输出端, 另一个是前一位的进位端(黄色羊毛)
图八:二号异或门的进位端
图九:进位端完成(绿色羊毛)。加法器完成。
第四章
BCD加法器
现在我们要来做BCD加法器了,它的作用不仅是计算,而且把十位也译了出来,它也分为许多部分,我会给大家拆分着来讲解。
四重堆叠加法器
四重堆叠加法器,就是把4个单片加法器连起来,但是做做很麻烦,又容易错。那么,有什么方法能快速做完这些又不出错呢?
看见了吗,/clone指令,就是克隆(复制)。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB90F.tmp.png这是它的格式:
/clone <x1> <y1> <z1> <x2> <y2> <z2> <x3> <y3> <z3> <方块名> [masked/replace/filtered] [force/move/normal]
masked:直接把方块复制到目的地,不会删除其他的方块。
replace:把目的地的所有方块删除再克隆,不改的话就是默认的这一项。
filtered:只复制一种方块,如果写了这个再最后又要输入一种方块名(如果有move就只要打move的)。
force:覆盖原先的方块。
move:只移动一种指定方块,不过原先被指定的方块会消失,如果写了这个在最后就要在最后输入一种方块名。
normal:正常(默认)
X1 = 被复制区域第1个坐标的X轴。
Y1 = 被复制区域第1个坐标的Y轴。
Z1 = 被复制区域第1个坐标的Z轴。
X2 = 被复制区域第2个坐标的X轴。
Y2 = 被复制区域第2个坐标的Y轴。
Z2 = 被复制区域第2个坐标的Z轴。
X3 = 被粘贴区域第1个坐标的X轴。
Y3 = 被粘贴区域第1个坐标的Y轴。
Z3 = 被粘贴区域第1个坐标的Z轴。
注意:因为粘贴区域只有一个坐标,所以复制的朝向是东南朝向,不管复制码,找到被复制区域的最西北的那个方块或者空气方块,找到你要复制到的那个区域里最西北的那个方块或者空气方块,就是要复制的坐标。
例子:
将A(黄色羊毛)和B(蓝色羊毛)复制到CD(白色羊毛)位置。
A:(坐标)708 61 877
B: 708 59 878
C: 706 61 879
D: 706 59 880
注:看looking at坐标
然后,我们要把AB复制到CD。
步骤如下:
1:打上/clone 708 61 877 708 59 878 706 59 879 masked
2:按enter
完成图:
四重堆叠(同步)加法器:
现在状态是0000+0000=00000
最大输入是1111+1111 (1111=15)
最大输出是11110 (11110=30)
我们现在的电脑基本上是32和64位的,相当于8和16个这种加法器那么大!!!
这里有一个不同步的16位加法器,原理就是T触发器输入对输出接线。
第五章
译出十位
接着,我们要用BCD加法器先译出十位,这样的话,后面就只用译个位就行了。
首先,我们看九的二进制(1001)和十的二进制(1010),主要的目的就是满十进一(1001+1=10000)我们发现,1010只要加上0110就能变成10000,所以制订了以下方案:
1.检测是否小于9
是:数据传输到个位译码器
不是:数据传输到二号加法器,加0110,然后传输到个位译码器。
那如何检测是否小于九呢?我们先来观察一下0~15的二进制码。
0 0000 8 1000 00110 第1位
1 0001 9 1001 第2位
2 0010 10 1010 第3位
3 0011 11 1011 第4位
4 0100 12 1100 进位端
5 0101 13 1101 看(第)1、2、3位,只有10以
6 0110 14 1110 上(包括10)的数才能:2、3位
7 0111 15 1111 其中1个数为一,1位为1,当然,加个进位端也是可以的。
电路图:
然后,我们就可以做译码器了。
第六章
译码器
先上电路图:
看不懂吧~
先说下原理吧。先把4线分成8线,就是1线变2线,第二根线是原来那根线加非门。1号线没变过的那根线我们称1+,加非门的称1-,2号线没变过的那根线我们称2+,加非门的称2-……
如果个位输出0,那么把1- 2- 3- 4-接到1个与门上,那么只有个位输出为0000时,这个灯才会亮。
如果个位输出6,那么把1- 2+ 3- 4+接到1个与门上,那么只有个位输出为0101时,这个灯才会亮。
看图:
第七章
显示屏译码
译成了十进制后,我们还要做一个显示屏。显示屏分为两种,一种是凹字显示屏,另一种是凸字显示屏。
显示屏一般是有7根数码管,一根数码管有3个LED,那么怎么才能让3个活塞同时伸出(缩回)来呢?
火把强充能铁块,铁块的能量激活点状红石,三个活塞就都伸出(缩回)来了。
这里做了一个显示屏。
接着我们来把译码器的信号转成我们显示屏的信号。
1(号数码管) 最上的—
2 左上的|
3 右上的|
4 中间的—
5 左下的|
6 右下的|
7 最下的—
我们要找出1个个位数字由哪些数码管组成,再把那个个位数字的数据线(译码器传来的)接到那些数码管上,就行了。
1号数码管:0、2、3、5、6、7、8、9
2号数码管:0、4、5、6、8、9
3号数码管:0、1、2、3、4、7、8、9
4号数码管:2、3、4、5、6、8、9
5号数码管:0、2、6、8
6号数码管:0、1、3、4、5、6、7、8、9
7号数码管:0、2、3、5、6、8、9
展示章节
到这里,加法器就做好了。接下来,我就给大家展示一下
19以内二进制输入十进制输出加法计算器吧。
加法器完成图:
现在,我给大家演示一下加法计算:
8+7=15
先清零
输入8,屏幕上就有了8.
加上7:
见证奇迹的时刻到了,“擦擦擦擦擦擦擦擦”的活塞声过后,0 突然变成了15!
在这里,我要感谢明月庄主和·Chaos,有些东西就是从他们那儿学来的。
现在,你们总会做了吧,如果还是不会,可以参考我的存档哦。
(注:1.9版本,此图较大,可以到处逛逛,/tp 1000 60 600)
现在这个机器只能算加法,暑假里,我会把它变成能算乘法、除法的计算器的。