异星工厂吧 关注:60,299贴子:382,640

6、关于彩色显示器

只看楼主收藏回复

6、关于彩色显示器
我们已经做出了黑白电视,顺理成章下一步就要开始攻克彩色电视!先来个图压压惊:

嗯……看起来连线是有点多(其实这里可以只用绿线的,不过为了方便观察使用了红线),不过确实可以实现单点控制。
下面跟着我的节奏,一步一步给大家展示!
我们首先来说一点基础知识。
灯泡只要连上线路就会出现一个信号连接界面:

要做彩电这里就必须把使用颜色标识勾上,同时还要填写启用条件(根据需要)。也就是说在灯泡达到条件启用时,同时传给它一个颜色信号(信号值必须为正数),该灯泡就可以显示出颜色了。比如:

同学C:“如果在灯泡启用的前提下,同时传入两个或多个值为正数的颜色信号,那颜色怎么判定?会叠加色彩吗?”
我:“好问题,我们一起来研究下原理。”
比如这样:

居然显示的是红色!
再比如这样:

只显示绿色,蓝色和黄颜色都被忽略了(注意数值,我想说的是跟数值无关)!
我这里就不卖关子了,直接来看图:

最下面一行颜色是有顺序的(!敲黑板),红色的优先级最高,之后是绿色,再之后是蓝色,……,一直到第七个白色。优先级一直递减,最后两个是颜色界的耻辱,不会影响灯泡的颜色!把这两种颜色拖出去枪毙5分钟。
利用这个特性我们就可以入手了!!!


IP属地:四川1楼2018-07-21 20:12回复
    抢占广告位


    IP属地:福建来自Android客户端2楼2018-07-22 16:43
    回复
      发串了?还是之前帖子不更啦


      IP属地:福建3楼2018-07-22 17:02
      收起回复
        终于有大佬开这方面贴了,等太久咯。。。快两年了吧


        IP属地:重庆来自Android客户端4楼2018-07-23 11:28
        回复
          这游戏卖你们90r简直亏死了,还得涨


          IP属地:北京5楼2018-07-23 12:23
          回复
            能看新闻联播吗


            IP属地:福建来自手机贴吧6楼2018-07-23 14:32
            回复
              哇,终于等到大佬出现了,小板凳拿过来,好好学习,天天向上!


              IP属地:北京7楼2018-07-25 11:22
              回复
                原贴《【电路探究】电路不明白的?那就研究研究呗!》地址https://tieba.baidu.com/p/5802259398
                为了完整性,索性就把原贴的相关内容贴过来,然后……再加点内容。


                IP属地:四川8楼2018-07-25 23:30
                回复
                  再来说一下红线连接的距离是10:

                  再长就连不到了(不要跟我说电线杆可以加长距离,我不听):

                  由于灯泡启用条件不能运算(弱爆了),颜色又是启用后的附加判断,所以我们只能对每个灯泡加一个判断运算器帮助其判断颜色(真是操碎了心)。
                  为了演示原理,我们这里用4个灯泡和4个判断运算器来掩饰:

                  比如第1个灯泡,我们管它叫[1],如果信号[1]<8它就启用,具体颜色是有与其相连的判断运算器来辅助判断的,所以我们在判断运算器里也看到了[1]的影子。之后的3个都一样,只不过信号改为[2]、[3]、[4]而已。
                  为了便于理解,下面我放了2个常量箱:

                  左边的是一个固定内容,对每个颜色进行编号(就是数值,看清楚颜色是有数值的)。右边的是存放数据地方,比如灯泡1播放颜色1(就是红色),灯泡2播放颜色4(就是绿色),大家可以自己验证。
                  这到底是怎么实现的呢,大家请再看上面的判断运算器。灯泡1相连的判断运算器的判断参数是[黄色*]>=[1],输出为[黄色*]输入数值。大家应该已经心领神会了(不会的再看一遍前面内容)。
                  不过呢,如果要灯泡1不亮怎么搞?简单,在常量箱里把[1]改为8,由于灯泡启用条件限制,灯泡会灭掉的。


                  IP属地:四川9楼2018-07-25 23:31
                  收起回复
                    好了,讲解完彩电的制造机理,我们就可以自己动手造一台了:

                    诶,这好像不对呀,感觉好像比上面讲的要复杂一点呀!咋回事儿?
                    其实嘛,就多加了一个功能。对,就是压缩数据!(最下方的是硬盘,[T]1播放第1个扇区,[T]2播放第2个扇区,以此类推)
                    黑白电视只用二进制的1位就可以表示,但是加入色彩就需要用3位(8种排列)来表示!
                    由于红线最多距离10,所以中间灯泡有9行,前4行与上面相连,后5行与下面相连。用到的东西就是黑白电视里面的“二进制分解器”(当然别忘记该参数哈)。
                    只强调一点,二进制分解器按3位分解出来的数范围是0~7,0代表不启动,所以灯泡的启用条件改为>0较好(比上面讲原理时<8要好)。

                    好了,彩电的“砖”抛完了,坐等“玉”自动上钩的(偷笑)。


                    IP属地:四川10楼2018-07-25 23:31
                    回复
                      番外篇:
                      鉴于有对彩色显示感兴趣的,既然误打误撞开贴,就多聊聊心得或者思考历程。顺便吐槽下系统图片审查,不是一般的坑。为防止吞楼事故,采用减少图片+短内容多楼策略应对,再逼我的话只有给图片加料了(什么椒盐噪声、乘性噪声、高斯噪声咱们挨个来),顺便说下音乐播放器的帖子“申请恢复贴子失败,再次申请恢复”已经申诉过2次了,算了我在修改修改,有空再上。
                      可能有朋友还不是特别明白上面的操作,我再捡重要或有趣的东西说一下吧。


                      IP属地:四川11楼2018-07-25 23:32
                      回复
                        (1)灯泡和红绿线的限制
                        灯泡只能有一个判断条件(即什么情况下开启),没有运算功能,所以说利用灯泡的逻辑判断比较低级,只能是某个信号->判断符号->判断值->启用。而颜色作为附加属性,不在灯泡的判断中出现,所以我没办法在灯泡里运用本身的逻辑判断实现控制颜色。要想控制颜色必须加入额外的判断运算器,这个就不太友好了(?为什么)。理想的显示器(灯泡阵列)应该是连续的,同一个线路(即红线或绿线并联)里信号总是相同的,所以每个灯泡必须单独连判断运算器(输出端)。判断运算器(输入端)在灯泡阵列里面每一列我们是可以并联的,然后利用此判断运算器分离输入端线路中的数据即可。但是,灯泡与判断运算器连线的距离是有限制的(长度为10个单位),每列下方的判断运算器应该竖放(否则由于显示器连续性会影响下一列判断运算器的位置),即每列最多5行(考虑上下对称排放应该是10行)。实际上我们做的是9行显示器(什么?这么矮!只能叫灯带吧……),因为上半部分要和下面相连,为走线方便只能这么高了,要不然电线杆走线会相当麻烦。


                        IP属地:四川12楼2018-07-25 23:34
                        回复
                          (2)颜色和灯泡启用技巧
                          这只是耍个小聪明,因为颜色有优先级且和数值无关(当然必须是正数),所以我没可以按颜色优先级对其排序并将数值从1标到7。这样做的好处是可以根据控制信号只用一个判断运算器就可以对颜色进行控制,比如想要显示绿色(数值2)&控制信号为[X],那么事先常量箱中如果存储[X]2,我们就可以在判断运算器里面写上判断参数“[黄色*]>=[X]”,输出“[黄色*]输入数值”。当然,判断运算器(输入端)始终连着一个颜色常量箱(就是上述颜色加数值1~7的那7个信号),再加[X]上所以输入端线路里就有8个信号了。现在的[X]数值是2,也就是判断运算器输出所有大于等于2的信号,即输出端信号有[X]2、绿色2、蓝色3……等7个信号(注意红色已经过滤掉了),故灯泡显示优先级最高的绿色,实现了目的。如果要让灯泡关闭怎么办?很简单,灯泡的启用条件写“[X]>0”即可。即使有各种颜色,但是启用条件达不到的话灯泡是不会亮的(废话!)。就是有这样的一个小手段才简化了灯泡颜色判断的电路,才有做彩电的动力(世界的进步在于懒惰!)。
                          其实吧,要是灯泡的颜色可以设置成“根据信号数值决定”(一下就想到喇叭了,音高由数值决定),可以肯定贴吧里面彩电满天飞。但是嘛,游戏就是带着枷锁跳舞(现实生活中也是),没必要要求太高,况且乐趣也在其中吧(痛并快乐着)。(^_^)


                          IP属地:四川13楼2018-07-25 23:35
                          回复
                            (3)难道不能有更强大的显示器吗!
                            不,我们不能放弃自我!应该放飞自我!
                            基于上述种种限制,我们可以打开思路(开始天马行空胡乱操作)。想想现实里的电视是怎么工作的(我说的是显像管),扫描!一行一行扫描,也就是电视机在一个时间点是现实一行(或一列)的(严格说是一个点接一个点)。我们可以想象一个灯泡矩阵,每一行用红线控制颜色,每一列用绿线控制开关。虽然颜色对于行来说必须相同,但是同一时间只要只有一列灯泡为开,我们就能准确的在显示器上显示正确的颜色!如果游戏里的灯泡也有荧光残留,如果游戏里的最小时间单位足够小,我们的显示器应该会是成功的(然而游戏不是这样的)!

                            再想想,其实最小单位不默视为一个灯泡,可以将“左边两个竖排灯泡+右边一个判断运算器”作为最小的显示单位,这样我们就可以突破上述限制将显示器做的超大!

                            继续想,现在的液晶显示器里都是三基色表示颜色,RBG即红蓝绿。我们也可以四个灯泡组成的方块为一组(绿色为环保色,可以对角线为两绿灯,剩余两个灯泡分别为红蓝),这样分组的好处就是我们不必再思考颜色问题,只要集中思路搞开关及协同问题就好了。

                            使劲想,红绿蓝随思路简单粗暴,但是每种颜色的色深问题没解决,这样就组不出几种(2的立方种)颜色来。但是我们可以利用闪烁来降低颜色!比如常亮强度记为1,那么1t亮1t暗则强度应为1/2,那么1t亮2t暗则强度应为1/3,那么2t亮1t暗则强度应为2/3,……
                            吐血想,……嗯……,剩下的100种方法留给读者去发现吧……(就是这么调皮!)


                            IP属地:四川14楼2018-07-25 23:37
                            收起回复
                              难道接下来还要讲视频解码


                              IP属地:浙江15楼2018-07-27 10:42
                              回复