点道为止 发表于 2018-11-30 19:54:57

LED流水灯程序,但我看不懂其中说的,能不能来个小白版的讲解,并指导下小白我

--------------------------------------------------------------------------------



#include <reg52.h>          
#include <intrins.h>


void Delay10ms(unsigned int c);   




main()
{
        unsigned char LED;

        LED = 0xfe;       
        while (1)
        {
           P0 = LED;
               Delay10ms(50);
               LED = LED << 1;                 if (P0 == 0x00)       
               {
                       LED = 0xfe;        // 0xfe = 1111 1110
               }
                                 
        }
}



void Delay10ms(unsigned int c)   
{
    unsigned char a, b;

       
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }
         
        }      
}

rencaixiaomeng 发表于 2018-11-30 20:13:27

程序确定没敲错?亮7个灯到灯全灭,再重亮7个灯?

点道为止 发表于 2018-11-30 20:23:44

rencaixiaomeng 发表于 2018-11-30 20:13
程序确定没敲错?亮7个灯到灯全灭,再重亮7个灯?

是我看不懂其中的一个依次后退那个    就是 LED=LED<<1

rencaixiaomeng 发表于 2018-11-30 20:31:38

<<左移运算符,LED<<1就是把LED向左移1位,右边填0,LED一开始是FE,二进制是1111 1110,左移一位,右边填0就是 1 111 11100,因为LED只能存8元,最高位舍弃掉,就是111 11100

lkp1115 发表于 2018-11-30 20:34:07

点道为止 发表于 2018-11-30 20:23
是我看不懂其中的一个依次后退那个    就是 LED=LED

比如 0Xfe 就是1111 1110 LED=LED << 1; 执行之后也就是左移一位 就是1111 1100 左移完由于只有8位数据,所以最高位截断,最低位补0 。也就是0xfc。

点道为止 发表于 2018-11-30 20:40:18

lkp1115 发表于 2018-11-30 20:34
比如 0Xfe 就是1111 1110 LED=LED

谢谢大佬指点 谢谢
页: [1]
查看完整版本: LED流水灯程序,但我看不懂其中说的,能不能来个小白版的讲解,并指导下小白我