问题:在学习51单片机的时候,由于用的新版是STC89C52RC,LED模块D1~D8最低位并不在最右边,在进行独立按键控制LED显示二进制加法时,会出现0000 0001的二进制显示变成最左边亮,使视觉上颠倒为1000 0000。
解决方法:可以使用二进制逆序将灯亮的顺序再颠倒过来即可。
思路:
示例原数为1101 0011
1. 通过位的分离再重组实现
2. 通过相邻位的值互换实现
3. 通过高低位分别往中间遍历换位实现
代码:
第一种:
unsigned char reverseByte(unsigned char byte) {
unsigned char reversedByte = 0;
int i;
for (i = 0; i < 8; i++) {
reversedByte <<= 1;
reversedByte |= (byte & 1);
byte >>= 1;
}
return reversedByte;
}
第二种:
unsigned char reverseByte(unsigned char byte)
{
byte = ((byte & 0xAA) >> 1) | ((byte & 0x55) << 1);
byte = ((byte & 0xCC) >> 2) | ((byte & 0x33) << 2);
byte = ((byte & 0xF0) >> 4) | ((byte & 0x0F) << 4);
return byte;
}
第三种:
unsigned char reverseByte(unsigned char byte)
{
int i;
unsigned char tmpByte;
tmpByte = byte;
byte = 0x00;
for(i = 0 ; i < 4; i++)
{
byte = byte | (tmpByte &(0X80>>i))>>(7-2*i);
byte = byte | (tmpByte &(0X01<<i))<<(7-2*i);
}
return byte;
}
结果展示: