纪念21世纪机器狗打败人类暨2016智能机器人元年-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5969|回复: 4

纪念21世纪机器狗打败人类暨2016智能机器人元年

[复制链接]
发表于 2016-12-17 18:15 | 显示全部楼层 |阅读模式
本帖最后由 MicroMaker 于 2016-12-21 21:23 编辑

                                                纪念21世纪机器狗打败人类暨2016智能机器人元年
   为了纪念21世纪机器狗打败人类暨2016智能机器人元年,我在MC(minecraft)游戏软件内用红石电路做出了19以内二进制输入十进制输出的加法计算器。你们想知道怎么做么?想的话就往下看吧!
                                      第一章  
                                   了解红石         
    首先,我们要先了解MC中的一些最常用的的红石元件,我们做普通电路时就有电路元件,那么,MC中的红石元件是什么呢?
   红石(redstone),用于连接电路。F3中power是电流强度。
图片1.png 图片2.png
   中继器(repeater),用于增强电流强度,也可做二极管和锁存器,也可做延时器。
图片4.png 图片3.png
    电流到达蓝色羊毛上时,电流能量耗尽,power为0,要用中继器充能。
    在电流power为一的地方放一个中继器(注意朝向),power会变15,0~15只有16个数字,游戏开发者一定是为了计算方便才用十六进制的。
    用中心对准中继器,看F3,右侧有一行delay变量,表示的是中继器的延时时长。1表示1tick,简称1T,2表示2T,3表示3T,4表示4T。(1tick=0.1秒)
图片7.png
图片8.png 图片9.png 图片10.png
                       2Tick                                                                   3Tick                                                        4Tick
   红石火把(redstone_torch),可以用来做非门,也可以用来做高频。
图片11.png 图片12.png
(非门)S=0,Q=1                (非门)S=1,Q=0       S=输入端
                                                 Q=正输出端


                                                                  第二章
                             了解逻辑门
   无论是19位计算器,还是功能强大的CPU,都是用逻辑门堆叠起来的,而然,所有的逻辑门都由一个逻辑门拼接而成,它就是非门。
   非门在上一章末提到过,他的作用就是把输入端的信号取反,我们还可以用它拼出很多组合逻辑门。
图片13.png 与门
           只有两个输入端都为1时,输出为1,否则  
           为零。
              S1   S2   Q
              0    0    0
              1    0    0
              0    1    0
              1    1    1      
图片14.png 或门
         只要有一个输入端为1,输出为1。只有输入端都为0时,输出为0。
         S1   S2   Q
          0    0    0
          0    1    1
          1    0    1
          1    1    1
1.png 与非门
        和与门差不多,就是输出取反。
          S1   S2   Q
          0    0    1
          0    1    1
          1    0    1
          1    1    0
2.png 或非门
          和或门差不多,就是输出取反。
            S1   S2   Q
            0    0    1
            0    1    0
            1    0    0
            1    1    0
图片1.png 异或门
            两个输入端一样,输出0;两个输入端不一样,输出1。
               S1   S2   Q
               0    0    0
               0    1    1
               1    0    1
               1    1    0
图片2.png 同或门
            和异或门差不多,就是输出取反。
             S1   S2   Q
             1    0    0
             0    0    1
             0    1    0
             1    1    1

                                 第三章
   现在,我们就可以做二进制加法器了。二进制加法器分为两种,一种是半加器,一种是全加器,全加器是半加器的组合。
   半加器(图不用看)
图片3.png
最原始的二进制加法器。
电路图:
图片40.png                         
   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  

全加器
电路图:
图片4.png
D = 前一位的进位
A   B   D   S   C
0   0   0   0   0
1   0   0   1   0
1   0   1   0   1
  如果按照这样做的话,可能会使计算器变得超级大,那么有什么方法能减少空间呢?
  单片堆叠
  简单来说就是把一个区块一样的部件一片一片得叠起来,接下来是单片二进制加法器的做法:
图片5.png 图片6.png 图片8.png 图片9.png 图片10.png 图片11.png 图片12.png 图片13.png
图一:两个输入端
图二:两个非门
图三:一个或门
图四:一个或非门
图五:一个异或门
图六:开始搞进位段(蓝色羊毛),中继器用来提取红石能量
图七:再做一个异或门(图1~图5),一段是上个异或门的输出端,                另一个是前一位的进位端(黄色羊毛)
图八:二号异或门的进位端
图九:进位端完成(绿色羊毛)。加法器完成。

                                   第四章
                              BCD加法器
    现在我们要来做BCD加法器了,它的作用不仅是计算,而且把十位也译了出来,它也分为许多部分,我会给大家拆分着来讲解。


    四重堆叠加法器
    四重堆叠加法器,就是把4个单片加法器连起来,但是做做很麻烦,又容易错。那么,有什么方法能快速做完这些又不出错呢?
    看见了吗,/clone指令,就是克隆(复制)。
图片14.png   
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB90F.tmp.png这是它的格式:
图片15.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轴。
注意:因为粘贴区域只有一个坐标,所以复制的朝向是东南朝向,不管复制码,找到被复制区域的最西北的那个方块或者空气方块,找到你要复制到的那个区域里最西北的那个方块或者空气方块,就是要复制的坐标。
例子:
图片16.png
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
完成图:
图片17.png

四重堆叠(同步)加法器:
图片18.png
    现在状态是0000+0000=00000
    最大输入是1111+1111    (1111=15)
    最大输出是11110        (11110=30)
我们现在的电脑基本上是32和64位的,相当于8和16个这种加法器那么大!!!
这里有一个不同步16位加法器,原理就是T触发器输入对输出接线。
图片19.png

第五章
           译出十位
    接着,我们要用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,当然,加个进位端也是可以的。

电路图:
图片20.png
然后,我们就可以做译码器了。

                           第六章
                          译码器
  先上电路图:
图片21.png
    看不懂吧~
先说下原理吧。先把4线分成8线,就是1线变2线,第二根线是原来那根线加非门。1号线没变过的那根线我们称1+,加非门的称1-,2号线没变过的那根线我们称2+,加非门的称2-……
如果个位输出0,那么把1- 2- 3- 4-接到1个与门上,那么只有个位输出为0000时,这个灯才会亮。
如果个位输出6,那么把1- 2+ 3- 4+接到1个与门上,那么只有个位输出为0101时,这个灯才会亮。
看图:
图片22.png


                                  第七章
                             显示屏译码
译成了十进制后,我们还要做一个显示屏。显示屏分为两种,一种是凹字显示屏,另一种是凸字显示屏。 图片23.png
显示屏一般是有7根数码管,一根数码管有3个LED,那么怎么才能让3个活塞同时伸出(缩回)来呢?
图片24.png
火把强充能铁块,铁块的能量激活点状红石,三个活塞就都伸出(缩回)来了。
这里做了一个显示屏。
图片25.png
接着我们来把译码器的信号转成我们显示屏的信号。
图片26.png
     1(号数码管)  最上的—
     2             左上的|  
     3             右上的|
     4             中间的—
     5             左下的|
     6             右下的|
     7             最下的—
我们要找出1个个位数字由哪些数码管组成,再把那个个位数字的数据线(译码器传来的)接到那些数码管上,就行了。
图片27.png
    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以内二进制输入十进制输出加法计算器吧。
加法器完成图:
图片28.png 图片29.png 图片30.png 图片31.png 图片32.png 图片33.png 图片34.png
    现在,我给大家演示一下加法计算:
8+7=15
先清零
图片35.png
输入8,屏幕上就有了8.   
图片36.png 图片37.png
加上7:
图片38.png
见证奇迹的时刻到了,“擦擦擦擦擦擦擦擦”的活塞声过后,0 突然变成了15!  
图片39.png
在这里,我要感谢明月庄主和·Chaos,有些东西就是从他们那儿学来的。
现在,你们总会做了吧,如果还是不会,可以参考我的存档哦。
(注:1.9版本,此图较大,可以到处逛逛,/tp 1000 60 600)
存档:(1.9+)(1.9+)(1.9+): 1.9_1.9_1.9.rar (1.9 MB, 下载次数: 6, 售价: 10 金币)
现在这个机器只能算加法,暑假里,我会把它变成能算乘法、除法的计算器的。
图片9.png
图片8.png
图片7.png
图片4.png
图片3.png
图片2.png
图片1.png
图片7.png
发表于 2016-12-20 21:36 | 显示全部楼层
哈哈哈,我以前玩的红石都是很基础的那种(用来杀怪刷铁啥的),这个计算器一下子看不懂不过我先用楼主的存档玩一玩先,嘻嘻。体验一把。谢谢分享!
发表于 2017-1-11 02:55 | 显示全部楼层
佩服佩服
发表于 2017-1-20 21:50 | 显示全部楼层
很有商业头脑
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 10:44 , Processed in 0.176175 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表