异星工厂吧 关注:63,345贴子:410,798
  • 26回复贴,共1

#电路讨论#【用逻辑电路制作电子表】振荡器/脉冲交替传输/等等

只看楼主收藏回复

新人报道,发个帖,冒个泡。发一个用逻辑电路制作电子表的方法,以及一些逻辑电路使用过程中的一些技巧。
ps.更新可能会很慢
ps.条条大路通罗马,但最优的路只有一条,所以如果一些想法与他人重复,实属正常。
ps.因为刚接触这个游戏,所以会有很多错误的地方,欢迎大家指正与讨论。


IP属地:浙江1楼2018-05-25 10:11回复
    制作电子表,我们分3步走:
    1、信号模拟:根据目前时刻输入三组数据h(时)、m(分)、s(秒)。每过一秒s+1;s=60时s清零,m+1;m=60时h+1;h=24时h清零。
    2、信号转换:由于hms时分秒是两位数,显示困难,故分离个位与十位,转换为ABCDEF6个数字。
    3、信号输出:将ABCDEF6个数字分别用灯显示在地图上。


    IP属地:浙江2楼2018-05-25 10:23
    收起回复
      2025-12-07 12:17:48
      广告
      不感兴趣
      开通SVIP免广告
      先从第三步入手:
      1、数字显示:
      为了显示0-9,至少需要13盏灯:如下图

      分别用字母A-J表示,所有灯泡用红线串联,并设置灯亮条件为对应字母=1。其中标记为A的有3盏灯,因为这三盏灯亮灭状态是完全一样的。
      要显示一个数字,就用到A-J则10个数据。现在把0-9分别用A-j组成的数组来表示:如下图

      现在我们就把问题转变为:如何将0-9转换为A-J数组。
      例如:要显示数字0,我们就要将其转变为数组1111111011,将该信号输入灯泡电路,就能显示0。
      (不知道还有没有更简单的方法,我是不是把简单的问题复杂化了?)


      IP属地:浙江3楼2018-05-25 10:45
      回复(2)
        加油。可以加下中间:的闪烁,效果更棒些


        来自Android客户端4楼2018-05-25 10:49
        收起回复
          简化版:
          收到买菜计算器的启发,发现数字可以用更少的字母来表示,如下:
          放置282盏灯,分为7个区域,所有灯串联,7个区域的灯分别设置为对应字母=1时灯亮。

          0-9分别对应的A-G数组如下:

          这样就可以用7个字母组成的数组来表示0-9虽然用的灯多了很多,但所用的字母少了两个,节约了运算器。而且数字显示的更清晰明亮。
          此时0就可以表示为1111110。


          IP属地:浙江5楼2018-05-25 10:53
          收起回复
            为了让初始时灯全亮,且减少运算器,亮灯条件重设为对应字母=0。
            那么如何将0-9转变A-J呢,我用了以下电路:

            ps.X=1,B=1(表示判断运算器运算,满足X=1时,输出B=1)。
            将得到的数组信号接入灯,就能显示数字X了。
            具体接线方式如下:

            改变输入器中的数字,就可以在显示器上显示出来。你也可以将常量运算器替换为一个箱子作为输入器,读取箱子中铁片数量(0-9),显示器就会显示出铁片数量。


            IP属地:浙江7楼2018-05-25 11:44
            回复
              接下来是信号模拟:
              用AB:CD:EF来表示时:分:秒,两位字母分别代表个位与十位。
              这时候需要引入一个振荡器,不断输出脉冲信号X=1,间隔是1/60s(也就是处理器处理一次信号的时间。)

              做电子表的话,需要1s发出一次脉冲,来计时,所有还需要对这个振荡器进行改进:

              具体布线如下:


              IP属地:浙江8楼2018-05-25 12:06
              回复(2)
                下面就要做秒针,做一个计数器,从0开始,每一秒钟+1,直到59复位。

                同样进行接灯测试,可以发现,每60s,会有X=60的脉冲信号。(该方法可以改良做成过任意整数秒,发一个脉冲信号的运算器组)
                需要对其进行改进,对多余的,那个脉冲进行消除,方法如下:
                经过分析,X=60的脉冲信号为1/60s,而这1/60s原本是属于X=0的,也就是说X=0只有59/60s,所以要把X=60消减为X=0即可。可以同步添加一个X=-60的脉冲。
                但更简单的方法是X<59,X单元的输出端用另一种颜色的线,使得原脉冲信号不会影响到X<59,X单元的输出端。
                具体布线如下:

                这样秒针就完成了。
                (有些错误造成的脉冲只有1/60s,很难观测到,不知道这个方法还有没有其他错误,欢迎指正,以及提出更优方案)


                IP属地:浙江9楼2018-05-25 13:01
                回复(3)
                  2025-12-07 12:11:48
                  广告
                  不感兴趣
                  开通SVIP免广告
                  看不懂,进来看看贴。太专业了吧。。。。。


                  IP属地:北京10楼2018-05-25 13:53
                  回复
                    ...被吞了一楼,算了周一再更。后续讲如何用X=60这个废脉冲计时分针


                    IP属地:浙江来自Android客户端12楼2018-05-25 15:05
                    回复
                      算数运算器支持通配符移位和AND运算的 没必要那么多运算器
                      用常量箱存好预编码的字库
                      然后通配符批量移位输出给灯即可
                      windows的运算器可以很方便的帮你在二进制和十进制之间转换 便于你自己制作字库
                      比如说 按照你一开始的A-J分区的灯
                      A区的灯全部设置为信号A>0亮灯
                      B区的灯全部设置为信号B>0亮灯
                      ...
                      J区的灯全部设置为信号J>0亮灯
                      然后手工制作字库 比如你现在是0~9 一共10个字
                      我以B区为例 因为A区好象全部是1 不方便说明
                      0的时候B区亮 所以是1
                      1的时候B区暗 所以是 01
                      2的时候B区亮 所以是101
                      3的时候B区亮 所以是1101
                      4的时候B区暗 所以是01101
                      5的时候B区亮 所以是101101
                      6的时候B区亮 所以是1101101
                      7的时候B区暗 所以是01101101
                      8的时候B区亮 所以是101101101
                      9的时候B区亮 所以是1101101101
                      所以最后是常量箱中B信号的值应该是二进制的 1101101101
                      自己拿windows计算器把1101101101转换为10进制是877 手工填到常量箱中即可 B信号值为877
                      把A到J所有的值都做一样的处理填入常量箱 这就叫做预编码字库
                      然后 比如说你现在输入信号是N 要显示N的值
                      先用/和%运算取好N要显示的十进制位
                      比如你要显示N在百位上的值 就是先N/100 然后再N%10 我们以M称呼去特定位后的这个值
                      这就确定了M的值在0~9之间 属于上面预编码字库的显示范围内 这样才不会缺字
                      然后只要用一个算数运算器将常量箱的所有信号 >> M位 然后将移位后的值拿去&1 就得出A~J一串信号
                      都是单独一位的二进制值 把这所有信号通通输出给所有区的灯
                      他们自然会按照到底是1还是0 亮和暗 即可达到显示数字的目的


                      IP属地:日本13楼2018-05-25 15:44
                      回复(1)