keil5单片机代码问题

#include <Reg52.h>
void delay(int n);
int main ()
{
int i, m;
char Font []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x38,0x37,0x3E,0x73,0x5C,0x40,0x00};
i=0;
m = 0x01;
P1 = m;
while(1){
P0 = Font[i];
delay(50) ;
if(i==3) {
i=0;
m = 0x01;
}else{
i++;
m <<=1;
P1 = m;
}
return 0;
}
void delay(int n)
{
  int i,j;
  for(i=0;i<n;i++)
  for (j=0;j<1000;j++);
}
}

23行总是报错syntax error是为什么?

你的代码中有一个多余的右大括号(})在第 22 行之后,导致编译器无法识别该右大括号的作用域,从而引发了 syntax error 错误。

这个问题可以通过将第 22 行的右大括号删掉来解决

#include <Reg52.h>

void delay(int n);

int main ()
{
    int i, m;
    char Font []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x38,0x37,0x3E,0x73,0x5C,0x40,0x00};
    i = 0;
    m = 0x01;
    P1 = m;
    while(1) {
        P0 = Font[i];
        delay(50);
        if(i == 3) {
            i = 0;
            m = 0x01;
        } else {
            i++;
            m <<= 1;
            P1 = m;
        }
    }
    return 0;
}

void delay(int n)
{
    int i,j;
    for(i=0;i<n;i++)
        for (j=0;j<1000;j++);
}

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:使用keil 报错 syntax error near ‘;‘
  • 以下回答由chatgpt基于相关博客总结生成:

    问题可能的原因有以下几种: 1. 语法错误:检查第23行的代码是否符合编程语言的语法规则,如缺少分号、括号不匹配等。可以在编程软件中的错误提示窗口中查看详细的错误信息,并根据错误提示进行修正。 2. 烧录器配置问题:根据参考资料中的描述,烧录器的配置可能导致代码无法调试或运行。在烧录器配置中检查是否有选项错误或冲突,并尝试修改配置来解决问题。 3. 注册表设置问题:如果在Windows系统中使用Keil和开发板进行开发时出现问题,可能是因为注册表中的一项内容没有正确设置,导致调试器无法正常工作。可以通过参考资料中提供的方法检查和修复注册表设置。 4. 标准库版本不匹配:如果使用了不同版本的标准库文件,可能会导致代码中引用的函数或变量无法找到而导致语法错误。确保使用的标准库与项目环境中的固件库版本相匹配,避免版本不匹配引起的问题。

    解决问题的步骤如下: 1. 检查第23行的代码是否符合编程语言的语法规范,修正可能存在的语法错误。可以使用编程软件提供的错误提示功能来帮助查找错误。 2. 检查烧录器的配置,确保没有选项错误或冲突。将可能与问题相关的选项设置还原到默认值,然后逐个尝试修改配置,以找到导致问题的设置项。 3. 根据参考资料中提供的方法检查和修复注册表设置。按照方法描述逐步进行操作,确保注册表中的设置正确。 4. 检查标准库版本是否与项目环境中的固件库版本相匹配。如果存在不匹配的情况,建议使用与项目环境中的固件库版本相同的标准库文件,或者更新固件库版本保持一致。

    如果以上步骤不能解决问题,可能需要进一步分析代码和调试环境,或者咨询相关领域的专业人士来解决问题。