51单片机,DS18B20温度及MQ-2烟雾
时间: 2024-05-19 21:15:43 浏览: 98
程序_DS18B20测温度以及MQ-2测烟雾_
5星 · 资源好评率100%
传感器的代码
以下是51单片机通过DS18B20温度传感器和MQ-2烟雾传感器获取数据的代码:
1. DS18B20温度传感器代码
#include<reg51.h>
#define DS18B20_DQ P1_4
unsigned char code temp[16]="Temp="; //定义“Temp=”字符串
void delay(unsigned int i) //延时函数
{
while(i--);
}
void init_ds18b20() //初始化DS18B20
{
DS18B20_DQ=1; //DQ置1
delay(10); //延时
DS18B20_DQ=0; //DQ置0
delay(500); //延时
DS18B20_DQ=1; //DQ置1
delay(50); //延时
}
unsigned char read_ds18b20() //读取DS18B20的数据
{
unsigned char i=0,dat=0;
for(i=0;i<8;i++)
{
DS18B20_DQ=0; //DQ置0
dat>>=1; //数据右移一位
DS18B20_DQ=1; //DQ置1
if(DS18B20_DQ) //如果DQ为1,则把dat的最高位赋值为1
{
dat|=0x80;
}
delay(5); //延时
}
return dat; //返回读取的数据
}
void write_ds18b20(unsigned char dat) //写入数据到DS18B20
{
unsigned char i=0;
for(i=0;i<8;i++)
{
DS18B20_DQ=0; //DQ置0
DS18B20_DQ=dat&0x01; //写入最低位
delay(5); //延时
DS18B20_DQ=1; //DQ置1
dat>>=1; //数据右移一位
}
}
void ds18b20_start() //启动DS18B20
{
init_ds18b20(); //初始化DS18B20
write_ds18b20(0xcc); //跳过ROM操作
write_ds18b20(0x44); //启动温度转换
}
void ds18b20_read(unsigned char *temp) //读取DS18B20的温度数据
{
unsigned char i=0;
unsigned char dat1=0,dat2=0;
ds18b20_start(); //启动DS18B20
init_ds18b20(); //初始化DS18B20
write_ds18b20(0xcc); //跳过ROM操作
write_ds18b20(0xbe); //读取温度数据
dat1=read_ds18b20(); //读取低字节
dat2=read_ds18b20(); //读取高字节
*temp=dat1; //返回温度数据
*(temp+1)=dat2;
}
void main()
{
unsigned char temp_data[2];
unsigned char i=0;
while(1)
{
ds18b20_read(temp_data); //读取温度数据
printf("%s",temp); //输出“Temp=”字符串
for(i=0;i<2;i++)
{
printf("%d",temp_data[i]); //输出温度数据
}
printf("\n"); //换行
delay(500); //延时
}
}
2. MQ-2烟雾传感器代码
#include<reg51.h>
#define MQ2_DOUT P1_4
void delay(unsigned int i) //延时函数
{
while(i--);
}
unsigned int read_mq2() //读取MQ-2的模拟信号
{
unsigned int i=0;
unsigned int temp=0;
MQ2_DOUT=1; //DOUT置1
delay(5); //延时
MQ2_DOUT=0; //DOUT置0
delay(5); //延时
MQ2_DOUT=1; //DOUT置1
while(!MQ2_DOUT); //等待DOUT变低
while(MQ2_DOUT) //等待DOUT变高
{
delay(1); //延时
i++; //计数器加1
if(i>100) //超时退出
{
break;
}
}
temp=i; //记录下MQ-2的模拟信号
return temp; //返回MQ-2的模拟信号
}
void main()
{
unsigned int mq2_data=0;
while(1)
{
mq2_data=read_mq2(); //读取MQ-2的模拟信号
printf("MQ-2 Data=%d\n",mq2_data); //输出MQ-2的模拟信号
delay(500); //延时
}
}
注意:以上代码仅供参考,实际使用时需要根据具体情况进行调整。同时,在使用MQ-2烟雾传感器时需要注意安全,避免产生危险。
阅读全文