找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5096|回复: 11
收起左侧

error C141: syntax error near '1'请帮帮忙啊

[复制链接]
ID:296320 发表于 2018-3-24 13:50 | 显示全部楼层 |阅读模式
#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'
目标未创建
回复

使用道具 举报

ID:287575 发表于 2018-3-24 14:13 | 显示全部楼层

sbit LSB=P2^3;
sbit LSC=P2^3; 重复定义

AT24C02.C有错误的程序你没发上来

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:223788 发表于 2018-3-24 16:27 | 显示全部楼层
格式好乱啊。。。。看着累。。。
回复

使用道具 举报

ID:223788 发表于 2018-3-24 16:28 | 显示全部楼层
应该把格式弄好一点。。。。
回复

使用道具 举报

ID:296320 发表于 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的定义的头文件

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:287575 发表于 2018-3-24 20:04 | 显示全部楼层
一、sbit LSB=P2^3;
       sbit LSC=P2^3; 重复定义,但不算错误
二、void keypros()
{  if(k1==0)
    {  delay(100);
           if(k1==0)
           {
         at24c02write(1,num); //void  at24c02write(1,num); 函数定义可以加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中定义的函数名称不是i2c.c 和主程序调用的名字

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:287575 发表于 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就可以了,否则出现*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS,编译成功,但链接不成功

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:287575 发表于 2018-3-24 20:25 | 显示全部楼层
几点建议:程序书写要规范,你将来就能感觉到好处,要加一定的注释
上传整个工程的压缩包,方便别人帮你解决问题,不然别人还要建立工程,再模拟测试

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:296505 发表于 2018-3-24 20:50 | 显示全部楼层
sbit LSB=P2^3;
sbit LSC=P2^3;

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:296320 发表于 2018-3-24 21:23 | 显示全部楼层
zhangxiaozi 发表于 2018-3-24 20:25
几点建议:程序书写要规范,你将来就能感觉到好处,要加一定的注释
上传整个工程的压缩包,方便别人帮你解 ...

谢谢你的建议,我会改正的。
回复

使用道具 举报

ID:296516 发表于 2018-3-24 21:28 | 显示全部楼层
emmm...高手都不写注释的吗。。。
回复

使用道具 举报

ID:223788 发表于 2018-3-24 21:50 | 显示全部楼层
qwertyuiop1234/ 发表于 2018-3-24 17:57
麻烦你再帮我看看,这是剩下的程序。非常感谢
#include
void delay10(void)

你这个错误可能是没有新建项目(project),我在我这里编译没有什么问题。。。。
test.PNG

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表