为什么我用C51里左移的指令不能实现流水灯的循环?

2024-11-30 18:32:28
推荐回答(3个)
回答(1):

程序写的不对,你主函数里面
void main()
{
aa=0xde;
while(1)
{

P1=aa;
delayms(500);
aa=aa<<1; //右移一位,移8次出去,还在往右移动,都移动出界了哈哈!
}
}

在程序里面写个判断语句移动完成后,在从新开始移动程序如下:

int main(void)
{
aa=0xde;
while(1)
{
P1=aa;
delayms(500);
aa=aa<<1;
if(P1 == 0x00) //判断LED全部移动完成后
{
aa =0xde; //aa变量重新赋值
}
}
}

回答(2):

因为普通的左移是右补零的,所以移动到最后,aa就等于0了。而_crol_是循环左移,aa的最高位左移后会写入aa的最低位,所以灯看起来是流动的。
aa=0x1;
while(1)
{

P1=~aa;
delayms(500);
aa=aa<<1;
if(aa=00)
{
aa=1;
}
}

回答(3):

你用的左移就是在移动一次后,在补上一个零,最后七次移完都是零