while (1)
{ LED = 0xfe;
for (i = 0 ;i < 8 ; i++)
{
P2 = LED;
delay(500);
LED = LED << 1; // 左移
LED = LED | 0x01; // 移位后,后面的位为高电平
if (LED == 0x7f) break; //提前退出 FOR 循环
}
请问最这一句LED = LED | 0x01;LED与0x01相或怎样将后面都变高的?程序要进行8次移位比如:
0xfe=1111 1110
左移一位=1111 1100
0x01=0000 0001
相与=1111 1101 这次是后一位是高的
0xfd=1111 1101
左移一位=1111 1010
0x01=0000 0001
相与=1111 1011 这次后2位是高的
0xfc=1111 1100
左移一位=1111 1000
0x01=0000 0001
相与=1111 1001 这次就不对了,后位多了一个0,而实际上此程序验证是对的
左移一位=1111 1000
0x01=0000 0001
左移一位 = 1111 0110
相或 0000 0001
= 1111 0111追问
1111 1110
左移1 1111 1100
或0x01 1111 1101
1111 1101
左移1 1111 1010
或0x01 1111 1011
1111 1011
左移1 1111 0110
或0x01 1111 0111
1111 0111
左移1 1110 1110
或0x01 1110 1111
这样子的对吗?
对了,就是这样的。0 一直往左移,LED也往左流水了。
相与=1111 0111
在循环中不会出现0XFC