keil出现c129错误,但未缺少分号


#include "reg52.h"
#include "intrins.h"

#define  k1_press 1
#define  k2_press 2
#define  k3_press 3
#define  k4_press 4
#define  key_unpress 0

#define  LED P2

sbit k1 = P3^1;
sbit k2 = P3^0;
sbit k3 = P3^2;
sbit k4 = P3^3;

u8 k1 = 1;//MAIN.C(17): error C129: missing ';' before 'k1'
u8 k2 = 1;
u8 k3 = 1;
u8 k4 = 1;

sbit l1 = P2^0;
sbit l2 = P2^1;
sbit l3 = P2^2;
sbit l4 = P2^3;
sbit l5 = P2^4;
sbit l6 = P2^5;
sbit l7 = P2^6;
sbit l8 = P2^7;

typedef unsigned char u8;
typedef unsigned int u16;

u16 ten_us;

void delay_10us(u16 ten_us)
{while(ten_us--);}

u8 key_scanf(u8 mode)
{
 static u8 key = 1;

 if(mode)key = 1;
 if(key = 1&&(k1 = 0| k2 = 0| k3 = 0|k4 = 0))
 {
  delay_10us(1000);
  key = 0;
  if(k1 = 0)return k1_press;
  if(k2 = 0)return k2_press;
  if(k3 = 0)return k3_press;
  if(k4 = 0)return k4_press;
  }
  else if(k1 = 1 && k2 = 1 && k3 = 1 && k4 = 1)
  key = 1;
  return key_unpress;
}

u8 water led left to right()//´Ó×óÍùÓÒ
{
   u8 i = 0;

   while(1)
   {
    for(i = 0;i < 8;i++)
    {
      LED= ~(0x01<50000);
     }
  }
}

void water led right to left()//´ÓÓÒÍù×ó
{
 u8 i = 0;

   while(1)
   {
    for(i = 0;i<8;i++)
    {
     LED = ~(0x80>>i);
     delay_10us(50000);
    }
  }
}

void water led return()//˫ȯ
{
  u8 i;

 LED = ~0x01;
 delay_10us(50000);
 while(1)
 {
  for(i=0;i<7;i++)
  {
   LED = _crol_(LED_PORT,1);
   delay_10us(50000);
  }
  for(i=0;i<7;i++)
  {
   LED = _cror_(LED_PORT,1);
   delay_10us(50000);
  }
 }
}

void water led mid()//´ÓÖмäÏòÁ½±ß
{
 while(1)
 {
   l4 = 0;
   l5 = 0;
  delay_10us(50000);
   l4 = 1;
   l5 = 1;

   l3 = 0;
   l6 = 0;
  delay_10us(50000);
   l3 = 1;
   l6 = 1;

   l2 = 0;
   l7 = 0;
  delay_10us(50000);
   l2 = 1;
   l7 = 1;

   l1 = 0;
   l8 = 0;
  delay_10us(50000);
   l1 = 1;
   l8 = 1;
  }
}
 void main()
 {
      switch(u8 key_scanf(0))
    {
     case(1){water led right to left();break;}
     case(2){water led right to left();break;}
     case(3){water led return();break;}
     case(4){water led mid();break;}
    }
} 

第一次使用u8的时候,u8这个类型还没有定义,你写到后面去了。
有时候编译器提示的错误并不是你真正的错误,编译器的思维方式和人不太一样。

应该把u8的那几个参数的定义放在typedef后面,如下图所示,仅修改部分代码。
如果放在前面,由于u8这个类型没有被重定义,所以识别到的是未知类型。

#include "reg52.h"
#include "intrins.h"

#define  k1_press 1
#define  k2_press 2
#define  k3_press 3
#define  k4_press 4
#define  key_unpress 0

#define  LED P2

sbit k1 = P3^1;
sbit k2 = P3^0;
sbit k3 = P3^2;
sbit k4 = P3^3;



sbit l1 = P2^0;
sbit l2 = P2^1;
sbit l3 = P2^2;
sbit l4 = P2^3;
sbit l5 = P2^4;
sbit l6 = P2^5;
sbit l7 = P2^6;
sbit l8 = P2^7;

typedef unsigned char u8;
typedef unsigned int u16;

u8 k1 = 1;//MAIN.C(17): error C129: missing ';' before 'k1'
u8 k2 = 1;
u8 k3 = 1;
u8 k4 = 1;

不知道你这个问题是否已经解决, 如果还没有解决的话:

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