用c语言实现独立按键LED移位

为什么我用以下代码,把Label定义在main里面,会出现编译错误,定义成全局变量就能编译成功呢?


#include <REGX52.H>

void Delay1ms(unsigned int x)        //@11.0592MHz
{
    unsigned char i, j;
  while(x)
    {
    i = 11;
    j = 190;
    do
    {
        while (--j);
    } while (--i);
    x--;
    }

}

void main()
{
    P2=~0x01;
    unsigned char Label=0;
    while(1)
    {
            if(P3_1==0)
        {
            Delay1ms(20);
            while(P3_1==0)
            {;}
            Delay1ms(20);
            Label++;
            if(Label>=8)
                Label=0;
            P2=~(0x01<<Label);
        }
    }

}

img

定义label这一句上移一行,也就是放在main的第一行

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 文章:【单片机】独立按键控制LED显示二进制以及移位 中也许有你想要的答案,请看下吧
  • 以下回答来自chatgpt:

    这个问题与C语言的作用域有关。在C语言中,变量和函数都有各自的作用域(scope),决定了它们可以被访问的范围。全局变量可以在文件内的所有函数中访问,而在main函数内部定义的变量只能在该函数内部访问。当你在使用这个Label时没有将其定义为全局变量时,其他函数无法访问到这个变量,就会抛出编译错误。

    如果你想在main函数内部定义变量,并且使其在其他函数中也可用,你可以使用指针来实现。定义一个指向该变量的指针,然后在需要访问它的其他函数中传递这个指针。举个例子:

    #include <stdio.h>
    
    void print_label(int *label);
    
    int main() {
        int label = 0;
        print_label(&label);
        return 0;
    }
    
    void print_label(int *label) {
        printf("Label value is: %d\n", *label);
    }
    

    在这个例子中,我在main函数中定义了一个label变量,并将其地址传递给了print_label函数。在print_label函数中,通过指针访问了label变量的值,并打印出来了。这样就不需要将label定义为全局变量了。

    如果你能提供更具体的代码和错误信息,我可以为你提供更具体的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^