流水灯的一点儿困惑

2020-02-01 16:31发布

如何用较为精悍的代码实现这个功能呢?

共有8颗LED,编号依次是1、2……8

实现目标:1流到8再1流到7再1流到6依次到全亮(10000000 、01000000……00000001、10000001、01000001……00000011、10000011、01000011……00000111依次到11111111)

如果用右移的办法不太合适,因为会冲掉右端显示的LED,如果用采用最笨的办法,代码量又很大,有没有较为简单的办法呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
Tliang
2020-02-02 18:48
int main(void)
{
        unsigned char i, j, value;
        while(1)
        {
                for(i = 0;i < 8;i++)
                {
                        value = ~(0xff >> i);
                        for(j = 0;j < 8 - i;j++)
                        {
                                P1 = (1 << j) | value;
                                delay(200);                               
                        }
                       
                }
        }
        return 0;
}
  1. int main(void)
  2. {
  3.         unsigned char i, j, value;
  4.         while(1)
  5.         {
  6.                 for(i = 0;i < 8;i++)
  7.                 {
  8.                         value = ~(0xff >> i);
  9.                         for(j = 0;j < 8 - i;j++)
  10.                         {
  11.                                 P1 = (1 << j) | value;
  12.                                 delay(200);                               
  13.                         }
  14.                        
  15.                 }
  16.         }
  17.         return 0;
  18. }
复制代码

一周热门 更多>