51单片机初学,流水灯左移问题

#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
void main()
{
uint8 j = 0;
uint16 i;
while(1)
{
P3 = ~(0x01 << j++);
for(i = 0;i< 20000;i++);
if(8 == j)
{
j = 0;
}
}
}

其中“P3 = ~(0x01 << j++);” 这一行为什么要用~ 用了的话不是应该亮的灯反而灭了,其他灯全亮了吗?? 比如左移一位时:P3=11111101

你看看电路图,你的电路图应该是二极管的阴极接了单片机的I/O引脚,这样的话,当相应引脚输出低电平时,LED会被点亮。
左移取反之后,只有一位为0,对应的LED被点亮。
温馨提示:答案为网友推荐,仅供参考
相似回答