error C141: syntax error near 'void', expected '__asm'

img

#include //使用线反转扫描法 检测按键按下 按下后在数码管上显示音调 并调动蜂鸣器发声 

typedef unsigned char u8;
typedef unsigned int u16;

#define GPIO_key P1
#define GPIO_smg P0

sbit buzzer = P2^0;//蜂鸣器

u8 keyvalue;//存键值

u8 code smgduan[16]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};//显示0-9、A-F。 

u16 code buzzerbeep[16]={100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600};
//用来产生各频率延时信号

void delay(u16 i)        //约10us
{
  while(i--);
}


void keypros()//检测是否有按键按下并输出键值
{
    u8 i;
    GPIO_key=0xF0;   //检测行
    if(GPIO_key!=0xF0)
    {
        delay(1000);
        if(GPIO_key!=0xF0)
        {
            switch(GPIO_key)
            {
                case(0x70):keyvalue=0;break;
                case(0xB0):keyvalue=4;break;
                case(0xD0):keyvalue=8;break;
                case(0xE0):keyvalue=12;break;
                default:break;
            }
        GPIO_key=0x0F;   //检测列
        switch(GPIO_key)
          {
               case(0x07):keyvalue=keyvalue;break;
               case(0x0B):keyvalue=keyvalue+1;break;
               case(0x0D):keyvalue=keyvalue+2;break;
              case(0x0E):keyvalue=keyvalue+3;break;
               default:break;
          }
            while((i<50)&&(GPIO_key!=0x0F))
            {
                i++;
              delay(1000);
            }
        }

}
    
void smgdisplay()//静态数码管显示0~F表示音调高低
{

        GPIO_smg=smgduan[keyvalue];
}    

void BEEP()//蜂鸣器发声
{
    u8 i=50;
  buzzer=1;
    while(i--)
    {
        delay(buzzerbeep[keyvalue]);
        buzzer=~buzzer;
    }
}

void main()
{
  while(1)
    {
        keypros();
        smgdisplay();
        BEEP();
    }
}

img

void smgdisplay()这个函数的前面那个函数,少了一个后花括号
if(GPIO_key!=0xF0)这句话对应的后花括号漏掉了。

看下这篇博客,也许你就懂了,链接:Keil C中 error C141: syntax error near ‘=‘, expected ‘__asm‘