for(i=0;i<=7;i++) //轮流
{
PORTA=~(1<<i); //各位依次置 0
_delay_ms(200); //延是200ms
}
这个好像依次不起来吧
i=0时,i变成二进制为0000 0000左移一位还是0000 0000再取反PORTA变为1111 1111,灯全灭
i=1时,i变成二进制为0000 0001左移一位是0000 0010再取反PORTA变为1111 1101,第二个灯亮
i=2时,i变成二进制为0000 0010左移一位是0000 0100再取反PORTA变为1111 1011,第三个灯亮
i=3时,i变成二进制为0000 0011左移一位是0000 0110再取反PORTA变为1111 1001,第二个和第三个灯同时亮
i=4时,i变成二进制为0000 0100左移一位是0000 1000再取反PORTA变为1111 0111,第四个灯亮
i=5时,i变成二进制为0000 0101左移一位是0000 1010再取反PORTA变为1111 0101,第二个和第四个灯同时亮
i=6时,i变成二进制为0000 0110左移一位是0000 1100再取反PORTA变为1111 0011,第三个和第四个灯同时亮
i=7时,i变成二进制为0000 0111左移一位是0000 1110再取反PORTA变为1111 0001,第二个、第三个和第四个灯同时亮
改成这样应该可以
int i,j,k;
i=1;
for(j=0;j<8;j++) //循环8次,8位LED轮流点亮
{
PORTA=~i; //反向输出
_delay_ms(200); //延时200ms
i=1<<i; //左移一位
} |