標題: error C141: syntax error near '1'請幫幫忙啊 [打印本頁]

作者: qwertyuiop1234/    時間: 2018-3-24 13:50
標題: error C141: syntax error near '1'請幫幫忙啊
#include <reg52.h>
#include <i2c.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^3;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
u8 num;
u8 disp[4];
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f,0x6f};
void delay(u16 i)
{   while(i--);
}
void keypros()
{  if(k1==0)
    {  delay(100);
           if(k1==0)
           {
         void  at24c02write(1,num);
             }
                  while(!k1);
                  }
        if(k2==0)
        {delay(100);
         if(k2==0)
         {          num=at24c02read(1);
             }while(!k2);
                 }
        if(k3==0)
        { delay(100);
          if(k3==0)
          { num++;
          if(num<255)num=0;
          }
          while(!k3);
          }
        if(k4==0)
        {delay(100);
          if(k4==0)
          { num=0;
          }
          while (!k4);
          }
          }
void datapros()
{   disp[0]=smgduan[num/1000];
     disp[1]=smgduan[num%1000/100];
         disp[2]=smgduan[num%1000%100/10];
         disp[3]=smgduan[num%1000%100%10];
         }
void smg()
{  u8 i;
    for(i=0;i<4;i++)
        {  switch (i)
           {case 0:LSA=0;LSB=0;LSC=0;break;
            case 1:LSA=1;LSB=0;LSC=0;break;
                case 2:LSA=0;LSB=1;LSC=0;break;
                case 3:LSA=1;LSB=1;LSC=0;break;
                }
                P0=disp[3-i];
                delay(100);
                P0=0x00;
                }}
void main()
{ while (1)
{            keypros();
datapros();
smg();}}
總是報錯:
Build target '目標 1'
compiling at24c02.c...
AT24C02.C(23): error C141: syntax error near '1'
目標未創(chuàng)建
作者: zhangxiaozi    時間: 2018-3-24 14:13

sbit LSB=P2^3;
sbit LSC=P2^3; 重復(fù)定義

AT24C02.C有錯誤的程序你沒發(fā)上來
作者: JACKLI    時間: 2018-3-24 16:27
格式好亂啊。。。。看著累。。。
作者: JACKLI    時間: 2018-3-24 16:28
應(yīng)該把格式弄好一點。。。。
作者: qwertyuiop1234/    時間: 2018-3-24 17:57
麻煩你再幫我看看,這是剩下的程序。非常感謝
#include<i2c.h>
void delay10(void)
{  unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);}
void i2cstart()
{  SDA=1;
    delay10();
        SCL=1;
        delay10();
        SDA=0;
        delay10();
        SCL=0;
        delay10();
        }
void i2cstop()
{   SDA=0;
   delay10();
   SCL=1;
   delay10();
   SDA=0;
   delay10();}


unsigned char i2csendbyte(unsigned char dat)
{           unsigned char a;
   for(a=0;a<8;a++)
   {SDA=dat>>7;
    dat=dat<<1;
        delay10();
        SCL=1;
        delay10();
        SCL=0;
        delay10();
        }
SDA=1;
delay10();
SCL=1;
while(SDA)
{unsigned char b=0;
  b++;
   if(b<200)
   {SCL=0;
    delay10();
        return 0;
        } }
SCL=0;
delay10();
return 1;
}
unsigned char i2creadbyte()
{  unsigned char a;
        unsigned char dat;
    SDA=1;
    delay10();
        dat=0;
        for(a=0;a<8;a++)
        {  SCL=1;
        delay10();
        dat=dat<<1;
        dat|=SDA;
        SCL=0;
        delay10();
        }return dat;
        }
void at24c02write(unsigned char adder,unsigned char dat)
{    i2cstart();
     i2csendbyte(0xa0);
         i2csendbyte(adder);
         i2csendbyte(dat);
         i2cstop();
         }
         unsigned char num;
unsigned char at24c02read(unsigned char adder)
{           i2cstart();
     i2csendbyte(0xa0);
         i2csendbyte(adder);
         i2cstart();
         i2csendbyte(0xa1);
         num=i2creadbyte();
         i2cstop();
         return num;}
這是另一個c文件。
#ifndef _i2c_h
#define _i2c_h
#include <reg52.h>
sbit SCL=P2^1;
sbit SDA=P2^0;
void atwrite(unsigned char adder,unsigned char dat);
unsigned char atread(unsigned char adder);
#endif
這是AT24C02的定義的頭文件

作者: zhangxiaozi    時間: 2018-3-24 20:04
一、sbit LSB=P2^3;
       sbit LSC=P2^3; 重復(fù)定義,但不算錯誤
二、void keypros()
{  if(k1==0)
    {  delay(100);
           if(k1==0)
           {
         at24c02write(1,num); //void  at24c02write(1,num); 函數(shù)定義可以加void ,引用時不能加
             }
                  while(!k1);
三、#ifndef _i2c_h
#define _i2c_h
#include <reg52.h>
sbit SCL=P2^1;
sbit SDA=P2^0;
//void atwrite(unsigned char adder,unsigned char dat);
//unsigned char atread(unsigned char adder);
void at24c02write(unsigned char adder,unsigned char dat);
unsigned char at24c02read(unsigned char adder);
#endif
i2c.h中定義的函數(shù)名稱不是i2c.c 和主程序調(diào)用的名字
作者: zhangxiaozi    時間: 2018-3-24 20:16
你在i2c.c中
         unsigned char num;
unsigned char at24c02read(unsigned char adder)
{           i2cstart();
     i2csendbyte(0xa0);
         i2csendbyte(adder);
         i2cstart();
         i2csendbyte(0xa1);
         num=i2creadbyte();
         i2cstop();
         return num;}
num 與主程序的num沖突了,改為其他名,如num1就可以了,否則出現(xiàn)*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS,編譯成功,但鏈接不成功
作者: zhangxiaozi    時間: 2018-3-24 20:25
幾點建議:程序書寫要規(guī)范,你將來就能感覺到好處,要加一定的注釋
上傳整個工程的壓縮包,方便別人幫你解決問題,不然別人還要建立工程,再模擬測試
作者: cutz    時間: 2018-3-24 20:50
sbit LSB=P2^3;
sbit LSC=P2^3;
作者: qwertyuiop1234/    時間: 2018-3-24 21:23
zhangxiaozi 發(fā)表于 2018-3-24 20:25
幾點建議:程序書寫要規(guī)范,你將來就能感覺到好處,要加一定的注釋
上傳整個工程的壓縮包,方便別人幫你解 ...

謝謝你的建議,我會改正的。
作者: 1063929204    時間: 2018-3-24 21:28
emmm...高手都不寫注釋的嗎。。。
作者: JACKLI    時間: 2018-3-24 21:50
qwertyuiop1234/ 發(fā)表于 2018-3-24 17:57
麻煩你再幫我看看,這是剩下的程序。非常感謝
#include
void delay10(void)

你這個錯誤可能是沒有新建項目(project),我在我這里編譯沒有什么問題。。。。

test.PNG (12.97 KB, 下載次數(shù): 43)

test.PNG





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1