在做单片机程序的时候,不可避免的要涉及BCD码
和 HEX码
的相互转换和计算。下面简单介绍一下两者的转换。
1. BCD码转HEX
/********** BCD to HEX **********/
//数值范围:0~9999
unsigned long BCD2HEX(unsigned long bcd)
{
unsigned long temp;
temp = (((bcd>>12) & 0x000f) * 1000)
+ (((bcd>>8) & 0x000f) * 100)
+ (((bcd>>4) & 0x000f) * 10)
+ (bcd& 0x000f);
return temp;
}
2. HEX码转BCD码
/********** BCD to HEX **********/
//数值范围:0~9999
unsigned long HEX2BCD(unsigned long hex)
{
unsigned long bcd;
bcd = ((HEXtoBCD((hex/100))) << 8);
bcd += HEXtoBCD(hex%100);
return bcd;
}
3. 调用示例
我们的例子主要功能位:将BCD编码
的数据2099
加2之后再转换为BCD编码
int main()
{
unsigned char b[2]={0};
b[0] = 0x20;
b[1] = 0x99;
unsigned int c = 0;
c = b[0] << 8;
c += b[1];
//转换为HEX码
c = BCD2HEX(c);
printf("\n hex=%d", c);
c+=2;
printf("\n c+2=%d", c);
//在转换为BCD编码
c = HEX2BCD(c);
printf("\n% c=02x", c);
}
运行结果为:
Comments