单片机c语言编程

while(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<<i;
b=temp>>(8-i);
P1=a|b;
其中b=temp>>(8-i);
P1=a|b;
是什么意思?这样做有什么好处呢!!

用于 做流水灯
可以让一盏灯 一直从左边移到右边
我们用 当i=1的时候 来分析 temp=0xfe=(1111 1110)
执行 a=temp<<i ;a=1111 1100 ;(因为着不是循环左移)
如果只有这样的话 最右边的那盏等也会亮。就不能达到只开一盏灯的目的
所以 还要 b=temp>>7; b=0000 0001
p1=a|b; P1=1111 1101;
所以 p1就丛 1111 1110 变化成了 1111 1101
这样等就左移了一位。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-02
这是个流水灯程序。
这两句,看来是多余的。
第2个回答  2009-11-02
可能它移动的时候,比如左移右边就补0.然后就或上一个b,b正好是右移8-i,那么结果就是整个循环只有一个0在每一个位上移动了。不这样做就一个一个灯亮不会只是一个灯亮了暗再下一个亮了,到最后就是全亮。
第3个回答  2009-11-03
循环左移操作,相当于RL指令。
想象不出来的可以看51的累加器循环移位指令。