在之前的博客里:在主函数里是这样的:
void main()
{
u8 i=0;
while(1)
{
for(i=0;i<8;i++)
{
LED_PORT=~(0x01<<i);
delay_10us(40000);
}
}
中的:
LED_PORT=~(0x01<<i);
0X指的是十六进制的前缀,不用管,就加在前面就行。
0x01<<i指的就是把01向左移i个单位
在这里一共有8个灯,序号分别为0 1 2 3 4 5 6 7(这里没指出顺序)
开始时是01,即第一个灯量
01指的就是0000 0001,i=1时,向左移动i个单位,即1,就0000 0010,然后第二个灯就亮了
之后就循环下去了,第八个亮了进行下一个循环了,又重新开始了一遍,
别忘了要取个反才能让灯逐个亮,要不然就是逐个灭
流水灯从左向右逐个亮起
那么如何让灯从8开始向左移动呢
首先肯定要改成右移>>,然后开始状态就得设置为只有第八个灯亮呗,就1000 0000呗,这个是80,所以就改成0x80即:
void main()
{
u8 i=0;
while(1)
{
for(i=0;i<8;i++)
{
P2=~(0x80>>i);
delay_10us(40000);
}
}
其他的都不需要改,i不需要改,还是从0到8传下去就可以