格雷码(GRAY)

本文介绍了格雷码的特性,由于其变权特性,不适用于直接比较和算术运算。为转换为液位信号,需先将其解码为自然二进制码。文中提供了一种Pascal实现的格雷码解码程序,并详细阐述了格雷码到二进制数的转换方法,通过逐位异或操作完成转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(英文:Gray Code, 又称作 葛莱码 ,二进制循环码)是1880年法国工程师Jean-Maurice-Emlle Baudot曾用过的一种编码,因Frank Gray申请专利而得名。它是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于风向的转角位移量-数字量的转换中,当风向的转角位移量发生微小变化(而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性。

  但格雷码是一种变权码,每一位码没有固定的大小,很难直接进行比较大小和算术运算,也不能直接转换成液位信号,要经过一次码变换,变成自然二进制码,再由上位机读取。解码的方法是用‘0’和采集来的4位格雷码的最高位(第4位)异或,结果保留到4位,再将异或的值和下一位(第3位)相异或,结果保留到3位,再将相异或的值和下一位(第2位)异或,结果保留到2位,依次异或,直到最低位,依次异或转换后的值(二进制数)就是格雷码转换后自然码的值.

  一、格雷码解码的Pascal 程序:

  var
  x,i,n:longint;
  begin
  readln(n);
  x:=n;
  for i:=1 to 31 do
  begin
  x:=x shr 1;
  n:=n xor x;
  end;
  writeln(n);
  end.

二、格雷码转换快速方法

  (假设以二进制为0的值做为格雷码的0)
  G:格雷码 B:二进位码
  G(N) = B(n+1) XOR B(n)

三、格雷码转二进位数

  二进位码第n位 = 二进位码第(n+1)位+格雷码第n位。因为二进位码和格雷码皆有相同位数,所以二进位码可从最高位的左边位元取0,以进行计算。(注:遇到1+1时结果视为0)
  例如: 格雷码0111,为4位数,所以其所转为之二进位码也必为4位数,因此可取转成之二进位码第五位为0,即0 b3 b2 b1 b0。
  0+0=0,所以b3=0
  0+1=1,所以b2=1
  1+1取0,所以b1=0
  0+1取1,所以b0=1
  因此所转换为之二进位码为0101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值