代码报错、adc0832烟雾

我今天刚刚学会了多文件编程的一个写法,但是在实践中遇到点问题。
能不能帮我解答一下:就是代码中不缺少‘;’,但是就是报错。
报错内容:

compiling MQ-2.c...
MQ-2.h(3): error C129: missing ';' before 'Get_AD_Result1'
compiling main.c...
MQ-2.h(3): error C129: missing ';' before 'Get_AD_Result1'
Target not created.
Build Time Elapsed:  00:00:00

下面是我的程序:我的程序实现的是改变电阻值,模拟烟雾传感器的工作状态,adc0832
则接收并转换数据,然后进行一个判别,确定电压范围,对应输出三个led。
第一个是我main.c中的代码

#include<reg52.h>
#include<stdio.h>
#include"MQ-2.h"
#include"delay.h"
#define uchar unsigned char
#define uint  unsigned int
sbit led1 = P3^0;
sbit led2 = P3^1;
sbit led3 = P3^2;
void main(void)
{
    uchar AD1;
    uint vt1;
    uint while_times = 0;
    delayms(100);
    ET0  = 1;
    TR0  = 1;
    ET1  = 1;
    TR1  = 1;
    EA   = 1;     
    CLK = 0;      
    CS   = 1;   
    while(1)
    {
        
       AD1 = Get_AD_Result1();
       vt1= (500.0/256.0)*AD1;
       if(vt1>=440)//4.4v-5v
       {
       led1=0;
       led2=1;
       led3=1;
             button=0;
       }
       else if(vt1>=390&&vt1<440)//3.9v-4.4v
       {
       led1=1;
       led2=0;
       led3=1;
       button=1;                 
       }
       else if(vt1<390)//3.3v-3.9v
       {
       led1=1;
       led2=1;
       led3=0;
             button=0;
       }
    }
}


第二个是我在 MQ-2.c中的代码

#include<MQ-2.h>
#define uchar unsigned char
#define uint  unsigned int
uchar Get_AD_Result1();
uchar Get_AD_Result2();
sbit CS   = P1^0;
sbit CLK  = P1^1;
sbit DIDO = P1^2;
sbit button = P1^3;
sbit CS   = P1^0;
sbit CLK  = P1^1;
sbit DIDO = P1^2;
sbit button = P1^3;

uchar Get_AD_Result1()
{
    uchar i, dat;
    CS = 1;
    CLK =1;
    CS = 0;
    DIDO = 1; CLK = 0;  CLK = 1;
    DIDO = 1; CLK = 0;  CLK = 1;
    DIDO = 0; CLK = 0;  CLK = 1;
    DIDO = 1;
    for(i = 0; i < 8; i++)
    {
        CLK = 0;                          
        if(DIDO) dat |= 0x01;  
        CLK = 1;                
        dat <<= 1;  
    }
    return (dat);
}


第三是我在MQ-2.h中的代码

#ifndef _MQ_2_h_
#define _MQ_2_h_
uchar Get_AD_Result1();
uchar Get_AD_Result2();
#endif

最后,目前的报错,好像还就是出在.h文件中,请大家帮帮忙!
这问题真的困扰我挺久了!

在 MQ_2.h 文件里,需要 uchar 数据类型的定义,将下面两句加入到这个文件里:
#define uchar unsigned char
#define uint unsigned int

根据你提供的代码和报错信息,问题可能出在MQ-2.h头文件中的重复定义。在MQ-2.h文件中,你重复定义了sbit、CS、CLK、DIDO和button等变量。

你可以尝试将MQ-2.h文件中的重复定义的部分去除,只保留函数声明部分。修改后的MQ-2.h文件应如下所示:

#ifndef _MQ_2_h_
#define _MQ_2_h_

uchar Get_AD_Result1();
uchar Get_AD_Result2();

#endif

请注意,头文件应该只包含函数声明、宏定义、结构体和外部变量的声明,而不应包含变量的定义。变量的定义应该放在.c文件中。

另外,你在MQ-2.c文件中也有重复定义的部分,可以将其中的重复定义部分去除。

修改后的MQ-2.c文件应如下所示:

#include "MQ-2.h"

uchar Get_AD_Result1()
{
    uchar i, dat;
    CS = 1;
    CLK = 1;
    CS = 0;
    DIDO = 1;
    CLK = 0;
    CLK = 1;
    DIDO = 1;
    CLK = 0;
    CLK = 1;
    DIDO = 0;
    CLK = 0;
    CLK = 1;
    DIDO = 1;
    for(i = 0; i < 8; i++)
    {
        CLK = 0;
        if(DIDO)
            dat |= 0x01;
        CLK = 1;
        dat <<= 1;
    }
    return (dat);
}

请尝试进行以上修改,并重新编译你的代码,看看问题是否解决了。如果还有其他问题,请提供详细的报错信息和代码,以便进一步帮助你解决问题。

【以下回答由 GPT 生成】

在报错信息中,提到了MQ-2.h(3): error C129: missing ';' before 'Get_AD_Result1'。这意味着在"MQ-2.h"头文件中的第3行,缺少了一个分号之前应该是'Get_AD_Result1',导致报错。

根据您提供的代码,我无法看到"MQ-2.h"头文件的内容。但是,可以通过修复头文件中的问题来解决这个编译错误。

首先,打开"MQ-2.h"头文件,确保在Get_AD_Result1函数声明的末尾添加了正确的分号,如下所示:

// MQ-2.h 头文件

#ifndef MQ_2_H
#define MQ_2_H

// 其他代码

extern uchar Get_AD_Result1(); // 确保在这行的末尾加上 ';'

// 其他代码

#endif  // MQ_2_H

接下来,保存头文件并重新编译您的代码。如果这是唯一的问题,那么您的代码应该能够通过编译,并且没有报错。

如果问题仍然存在或者您无法检查"MQ-2.h"头文件的内容,请将完整的"MQ-2.h"头文件内容提供给我,以便我更好地帮助您解决该问题。


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

把程序的行号显示出来,看对应行号上下的代码是否有问题!