单片机数码管流动显示的C语言程序中,为什么要按位取反

unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};

void main(void)
{
unsigned char i = 0;

while(1)
{
GPIO_DIG = ~DIG_CODE[i];//这里为什么要取反呢?
i++;
if(i == 16)
{
i = 0;
}
Delay10ms(50);
}
}

这是一个变通的方法,你程序中定义的段码表是共阴极数码管的段码表,如果你的电路硬件上实际是共阳极数码管,而你又不想重写段码表,就可以通过按位反的形式转换。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-28
估计是共阳码和共阴码的转换
第2个回答  2015-01-30
因为你数码管是共阳极的
第3个回答  2015-01-28
关注这个问题