for(x=0;x<3;x++) //大循环三次即依次点亮依次熄灭三次
{
P2=0xff; //熄灭所有LED
for(y=0;y<8;y++)
{
P2=P2<<1;
delay(500);
} //将1111 1111依次移除循环八次
z=0x7f; //0111 1111
for(y=0;y<8;y++) //同上,运用移位依次熄灭
{
P2=~z;
z =z>>1;
delay(500);
}
}
需要实现LED从左往右依次点亮依次熄灭三次,请问这个移位函数为什么是先向左移嘞,左移不应该p2.7先置0吗,后面一个移位和赋值也不太明白
1.由于你的灯,从左到右依次是D0~D7分别对应P2.0~P2.7。要实现从左到右的点亮,肯定要先让P2.0为低电平,直到P2.7为低电平,因此在计算P2的时候要向左移动才能实现以上功能;
2.第二应该写错了,z=0xfe;z=z<<1;后一个移位,先按位取反,给P2再左移;首先0xfe按位取反为0x01,让P2.0为高电平,然后依次让P2.7为高电平。
这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。