本帖最后由 719823597 于 2013-5-18 16:13 编辑

此教程只是为了实践此贴里第四弹的简化思想,和少量第五弹的设计思想

先简单介绍一下格雷码,如有兴趣可以到百度百科或维基百科查看

从表中可以看出格雷码每位之间的变化了的数值只有一个,而二进制却不一定,最糟糕的情况是000-111011-100等,有多个数值一起变化
简单来说,格雷码可以在信号传输时防止出错

十进制数


二进制码


格雷码


0


000


000


1


001


001


2


010


011


3


011


010


4


100


110


5


101


111


6


110


101


7


111


100


二进制转格雷码的算法是:G = (B/2) XOR B  其中G为格雷码  B为二进制码

二进制中的除法运算可以用移位代替,除二就是把原码向右移动一位。如果最右边是0那还好,直接舍去;但是如果是11(十进制的3)等数字怎么办呢?解决办法就是去尾法,也就是照样右移,忽略最右边的1,11就变成了01(10进制中的1),也就是低精度的除法,直接忽略余数。

碰到移位呢,很多人可能又会想到移位寄存器,但是在组合电路中加入个时序电路你不觉得很慢很麻烦吗,所以我们开始分析算法(分析中会用到Logisim):

算法中有XOR(异或)的运算(不懂的可以打开计算器去研究),所以我们需要用到异或门


然后我们连接好二进制数的输入端口,这些线就是算法中的第二个B,也就是原码


(B/2)呢 我刚刚说过可以看作是把原码右移一位,所以可以这样接线


然后我们贴上开关和灯


然后就完成了,可以测试下转换结果是否正确


可以按照这个设计图在mc里做个

这个是我做的 左边两个是单独的模块  主体由两个模块交替拼成

格雷码.zip (253.45 KB, 下载次数: 57)