LED=0xfe; LED = LED << 1; // 左移 LED = LED | 0x01; // 移位后后面的位为高电平;

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,而实际上此程序验证是对的

0xfc=1111 1100 //哪里来的0xfc? 是这个1111 1011 =0xfb
左移一位=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也往左流水了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-20
0xfb=1111 1011 左移一位=1111 0110 0x01=0000 0001
相与=1111 0111
在循环中不会出现0XFC

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网