本帖最后由 719823597 于 2013-5-18 16:13 编辑
此教程只是为了实践此贴里第四弹的简化思想,和少量第五弹的设计思想
先简单介绍一下格雷码,如有兴趣可以到百度百科或维基百科查看
从表中可以看出格雷码每位之间的变化了的数值只有一个,而二进制却不一定,最糟糕的情况是000-111,011-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里做个
这个是我做的 左边两个是单独的模块 主体由两个模块交替拼成