基于51单片机MQ135气体检测的代码
时间: 2023-06-20 17:08:20 浏览: 85
以下是基于51单片机的MQ135气体检测代码,可以根据需要进行调整:
```c
#include<reg52.h>
#include<intrins.h>
sbit MQ_pin = P2^0; //定义MQ135的引脚
unsigned int ADC_Result = 0; //定义ADC采样结果
unsigned int ppm_Value = 0; //定义ppm值
void Delay10us() //延时函数
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void ADC_Init() //初始化ADC函数
{
P1ASF = 0x01; //P1.0选择为ADC输入
ADC_RES = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ADC_CH0;
}
unsigned int Get_ADC_Result() //获取ADC采样结果函数
{
unsigned int ADC_Result_H = 0; //定义高8位ADC采样结果
unsigned int ADC_Result_L = 0; //定义低8位ADC采样结果
unsigned int ADC_Result = 0; //定义ADC采样结果
ADC_RES = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ADC_CH0;
while (!ADC_RES);
ADC_Result_H = ADC_RESH;
ADC_Result_L = ADC_RESL;
ADC_Result = ADC_Result_H << 8 | ADC_Result_L;
return ADC_Result;
}
void main() //主函数
{
ADC_Init(); //初始化ADC
while (1)
{
MQ_pin = 1; //使气敏传感器预热10s
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
Delay10us();
MQ_pin = 0;
ADC_Result = Get_ADC_Result(); //获取ADC采样结果
ppm_Value = (float)ADC_Result / 1024 * 5000 / 2000 * 1000; //计算ppm值
if (ppm_Value <= 200)
{
//在这里进行相应的操作
}
else if (ppm_Value > 200 && ppm_Value <= 400)
{
//在这里进行相应的操作
}
else if (ppm_Value > 400 && ppm_Value <= 800)
{
//在这里进行相应的操作
}
else if (ppm_Value > 800 && ppm_Value <= 1500)
{
//在这里进行相应的操作
}
else if (ppm_Value > 1500 && ppm_Value <= 2500)
{
//在这里进行相应的操作
}
else if (ppm_Value > 2500 && ppm_Value <= 3500)
{
//在这里进行相应的操作
}
else if (ppm_Value > 3500)
{
//在这里进行相应的操作
}
}
}
```
说明:
1. 本代码是基于51单片机的MQ135气体检测代码,需要连接MQ135传感器,将其输出引脚连接到P2.0引脚。
2. 在主函数中,先进行气敏传感器的预热,然后获取ADC采样结果,并通过一系列计算得到ppm值。
3. 根据不同的ppm值,可以在相应的if语句中进行相应的操作,比如控制LED灯亮灭等。