基于51单片机、TLC549做温湿度和烟雾报警器代码
时间: 2023-10-02 19:06:04 浏览: 101
这里提供一个参考代码,供您参考:
```c
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11=P1^4; //DHT11数据连接口
sbit BEEP=P1^5; //蜂鸣器连接口
sbit LED=P1^6; //LED灯连接口
sbit SMK=P1^7; //烟雾传感器连接口
uchar T_data[5]; //温度数据
uchar RH_data[5]; //湿度数据
void delay_us(uint us) //微秒延时
{
while(us--)
_nop_();
}
void delay_ms(uint ms) //毫秒延时
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<125;j++);
}
void start_DHT11(void) //开始信号
{
DHT11=0; //拉低数据线
delay_ms(20); //延时20ms
DHT11=1; //拉高数据线
delay_us(30); //延时30us
}
void check_DHT11(void) //等待响应
{
while(DHT11==1); //等待DHT11响应
while(DHT11==0); //等待DHT11回应
while(DHT11==1); //等待DHT11回应结束
}
uchar read_DHT11(void) //读取数据
{
uchar i,res;
for(i=0;i<8;i++)
{
while(DHT11==0); //等待高电平信号结束
delay_us(30); //延时30us
res<<=1; //左移一位
if(DHT11==1) res++; //如果高电平期间数据线为1,则将res的最低位设置为1
while(DHT11==1); //等待低电平信号结束
}
return res;
}
void get_DHT11(void) //获取温湿度数据
{
uchar i;
start_DHT11(); //发送开始信号
check_DHT11(); //等待DHT11响应
for(i=0;i<5;i++) T_data[i]=read_DHT11(); //读取温度数据
check_DHT11(); //等待DHT11响应
for(i=0;i<5;i++) RH_data[i]=read_DHT11(); //读取湿度数据
}
void main()
{
uchar T_H,T_L,RH_H,RH_L,check_sum;
while(1)
{
get_DHT11(); //获取温湿度数据
T_H=T_data[0]; //温度整数部分高八位
T_L=T_data[1]; //温度整数部分低八位
RH_H=RH_data[0]; //湿度整数部分高八位
RH_L=RH_data[1]; //湿度整数部分低八位
check_sum=T_data[0]+T_data[1]+RH_data[0]+RH_data[1]; //计算校验和
if(check_sum==T_data[2] && check_sum==RH_data[2]) //校验和正确
{
if(SMK==0) //如果烟雾传感器检测到烟雾
{
BEEP=0; //蜂鸣器响
LED=0; //LED亮
}
else //否则
{
BEEP=1; //蜂鸣器不响
LED=1; //LED灭
}
}
delay_ms(500); //延时500ms
}
}
```
代码中使用的是DHT11温湿度传感器和烟雾传感器模块,通过读取温湿度数据和烟雾传感器的信号来判断是否需要触发报警器。其中,DHT11温湿度传感器需要进行数据采集和校验和计算,烟雾传感器直接读取信号即可。代码中还包括了微秒和毫秒延时函数的实现。
阅读全文