用KEIL出现syntax error near 'void'一般是什么错误?

 #include"at89x52.h"
#include"intrins.h"
//************************************
#define uint unsigned int
#define uchar unsigned char
#define Nack_counter 10
//**************端口定义**************
//LCD 控制线接口
uchar flag1;
sbit RS=P3^5;
sbit RW=P3^6;
sbit LCDE=P3^4;
//mlx90614 端口定义
sbit SCL=P2^6;//时钟线
sbit SDA=P2^7;//数据线
//************数据定义****************
bdata uchar flag;//可位寻址数据
sbit bit_out=flag^7;
sbit bit_in=flag^0;
uchar DataH,DataL,Pecreg;
//************函数声明*****************************************
void startbit(); //MLX90614 发起始位子程序
void stopbit(); //MLX90614 发结束位子程序
uchar rx_byte(void); //MLX90614 接收字节子程序
void send_bit(void); //MLX90614 发送位子程序
void tx_byte(uchar dat_byte); //MLX90614 接收字节子程序
void receive_bit(void); //MLX90614 接收位子程序
void delay(uint N); //延时程序
uint memread(void); //读温度数据
void init1602(void); //LCD 初始化子程序
void chk_busy_flg(void); //LCD 判断忙子程序
void dis_cmd_wrt(uchar cmd); //LCD 写命令子程序
void dis_dat_wrt(uchar dat); //LCD 写数据子程序
//void display(uint Tem); //显示子程序
void LCD1602_Dis_Str(uchar x, uchar y, uchar *str);
void init1602(void); //初始化 LCD
uint NUM(uint Tem) ;  //处理温度
//*************主函数*******************************************
void main()
{  uchar TestStr[] = {"the num:"};
   uchar TestStr1[] = {"the temp:"};
     uchar LedBuff[4];
   uint Tem,Temend;
 //函数部分
 SCL=1;SDA=1;_nop_();
 _nop_();_nop_();_nop_();
 SCL=0;
 delay(1000);
 SCL=1;
 init1602();
 while(1)
 {
 Tem=memread();
// display(Tem);
   Temend=NUM(Tem);    //五位数的温度
    LedBuff[0]=Temend/10000%10;
    LedBuff[1]=Temend/1000%10;
     LedBuff[2]='.';
     LedBuff[3]=Temend/100%10;


 LCD1602_Dis_Str(1, 0,  &LedBuff[0])  ;
 delay(20);
 LCD1602_Dis_Str(0, 1,  &TestStr1[0])  ;
 }     }

 ////*********输入转换并显示*********
 uint MUN(uint Tem)
 {  
     uint T     ;     
      T=Tem*2;
      // if(T>=27315)
 {
 T=T-27315;
     return(T);
 }
//****************************************
//************************************
void startbit (void)
{
 SDA=1;
 _nop_();_nop_();_nop_();_nop_();_nop_();
 SCL=1;
 _nop_();_nop_();_nop_();_nop_();_nop_();
 SDA=0;
 _nop_();_nop_();_nop_();_nop_();_nop_();
 SCL=0;
 _nop_();_nop_();_nop_();_nop_();_nop_();
}
//------------------------------
//------------------------------
void stopbit(void)
{
 SCL=0;
 _nop_();_nop_();_nop_();_nop_();_nop_();
 SDA=0;
 _nop_();_nop_();_nop_();_nop_();_nop_();
 SCL=1;
 _nop_();_nop_();_nop_();_nop_();nop_();
 SDA=1;
}
//---------发送一个字节---------
void tx_byte(uchar dat_byte)
{
 char i,n,dat;
 n=Nack_counter;
TX_again:
 dat=dat_byte;
 for(i=0;i<8;i++)
 {
 if(dat&0x80)
 bit_out=1;
 else
 bit_out=0;
 send_bit();
 dat=dat<<1;
 }
 receive_bit();
 if(bit_in==1)
 {
 stop_bit();
 if(n!=0)
 {n--;goto Repeat;}
 else
 goto exit;
 }
 else
 goto exit;
Repeat:
 start_bit();
 goto TX_again;
exit: ;
}
//-----------发送一个位---------
void send_bit(void)
{
 if(bit_out==0)
 SDA=0;
 else
 SDA=1;
 _nop_();
 SCL=1;
 _nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
 SCL=0;
 _nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
}
//----------接收一个字节--------
uchar rx_byte(void)
{
 uchar i,dat;
 dat=0;
 for(i=0;i<8;i++)
 {
 dat=dat<<1;
 receive_bit();
 if(bit_in==1)
 dat=dat+1;
 }
 send_bit();
 return dat;
}
//----------接收一个位----------
void receive_bit(void)
{
 SDA=1;bit_in=1;
 SCL=1;
 _nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
 bit_in=SDA;
 _nop_();
 SCL=0;
 _nop_();_nop_();_nop_();_nop_();
 _nop_();_nop_();_nop_();_nop_();
}
//------------延时--------------
void delay(uint N)
{
 uint i;
 for(i=0;i<N;i++)
 _nop_();
}
//------------------------------
uint memread(void)
{
 startbit();
 tx_byte(0x00); //Send SlaveAddress
 tx_byte(0x07); //Send Command
 //------------
 startbit();
 tx_byte(0x01);
 bit_out=0;
 DataL=rx_byte();
 bit_out=0;
 DataH=rx_byte();
 bit_out=1;
 Pecreg=rx_byte();
 stopbit();
 return(DataH*256+DataL);
}


   //******************LCD 显示子函数***********************
void chk_busy_flg(void) //LCD 忙标志判断      1
{
 flag1=0x80;
 while(flag1&0x80)
 {
 P0=0xff;
 RS=0;
 RW=1;
 LCDE=1;
 flag1=P0;
 LCDE=0;
 }
}
void dis_cmd_wrt(uchar cmd) //写命令子函数     2
{
 chk_busy_flg();
 P0=cmd;
 RS=0;
 RW=0;
 LCDE=1;
 LCDE=0;
}
void dis_dat_wrt(uchar dat) //写数据子函数     3
{
 chk_busy_flg();
 if(flag1==16)
 {
 P0=0XC0;
 RS=0;
 RW=0;
 LCDE=1;
 LCDE=0;
 }
 P0=dat;
 RS=1;
 RW=0;
 LCDE=1;
 LCDE=0;
}

/*=================================================
*函数名称:LCD1602_Dis_Str
*函数功能:在指定位置显示字符串
*调用:LCD1602_Write_Cmd(); LCD1602_Write_Dat();
*输入:x:要显示的横坐标取值0-40,y:要显示的行坐标取值0-1(0为第一行,1为第二行)
        *str:需要显示的字符串
=================================================*/
void init1602( ) //初始化 LCD             4
{
 dis_cmd_wrt(0x01);
 dis_cmd_wrt(0x0c);
 dis_cmd_wrt(0x06);
 dis_cmd_wrt(0x38);
}

 

 

大佬帮我看一下,学生党,头都想破了