lsmCC 发表于 2023-12-10 20:51:34

led灯进行移位时,为什么一开始有几个灯不亮

#include <REGX52.H>
// ????delay?????
void Delay(unsigned int xms)                //@12.000MHz
{
        unsigned char i, j;
        while(xms)
        {
                i = 2;
                j = 239;
                do
                {
                        while (--j);
                } while (--i);
                xms--;
        }

}
unsigned char LEDNum;
// ½øÐа´Î»×óÒƵIJÙ×÷

void main()
{
       P1_0=0;
       Delay(40);
       P1_0=1;
       Delay(40);
       P1_1=0;
       while(1)
       {
               if(P3_4==0)
               {
                       Delay(20);//°´¼üÏû¶¶
                       while(P3_4==0);
                       Delay(20); //ËÉ¿ªÏû¶¶
                       LEDNum++;
                       if(LEDNum>=8)
                       {
                               LEDNum=0;
                       }
                       P1=~(0x01<<LEDNum);
               }
               
       }
}




// 0000 0001
// 0000 0010
// 0000 0100

FishC 发表于 2023-12-10 20:52:34

问题出在LEDNum变量的初始值没有赋值。在程序的开始部分,LEDNum应该被初始化为0,这样才能保证LED灯的移位正常进行。

修改后的代码如下:

#include <reg52.h>

void Delay(unsigned int xms)                //@12.000MHz
{
    unsigned char i, j;
    while(xms)
    {
      i = 2;
      j = 239;
      do
      {
            while (--j);
      } while (--i);
      xms--;
    }
}

unsigned char LEDNum = 0; // 初始化LEDNum为0

void main()
{
    P1_0=0;
    Delay(40);
    P1_0=1;
    Delay(40);
    P1_1=0;
    while(1)
    {
      if(P3_4==0)
      {
            Delay(20);//按键消抖
            while(P3_4==0);
            Delay(20); //延时
            LEDNum++;
            if(LEDNum>=8)
            {
                LEDNum=0;
            }
            P1=~(0x01 << LEDNum); // 移位控制LED灯亮起的位置
      }
    }
}

在这个例子中,我们通过按下P3_4口的按钮来移位控制LED灯的亮起位置。按下按钮后,LEDNum变量会自增1,并通过位运算将对应的LED灯亮起。当LEDNum超过7时,会被重置为0,这样就能循环移位显示LED灯。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: led灯进行移位时,为什么一开始有几个灯不亮