dht11温湿度传感器STC8A8K64D4代码
时间: 2023-07-02 15:06:00 浏览: 297
以下是基于STC8A8K64D4单片机的DHT11温湿度传感器代码:
```c
#include <STC8.H>
#define uchar unsigned char
#define uint unsigned int
uchar humi_data_H, humi_data_L, temp_data_H, temp_data_L, checkdata;
bit checkflag;
//定义变量
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start() //开始信号
{
DHT11_IO=0;
delay(20); //延时20ms
DHT11_IO=1;
delay(30); //延时30us
}
bit check() //检查响应信号
{
uint i;
checkflag=0;
for(i=0;i<1000;i++)
{
if(DHT11_IO==0)
{
checkflag=1;
delay(80);
if(DHT11_IO==1) break;
}
}
if(checkflag==1) return 1;
else return 0;
}
uchar read_byte() //读取一个字节
{
uchar i,dat;
dat=0;
for(i=0;i<8;i++)
{
while(DHT11_IO==0);
delay(30);
if(DHT11_IO==1)
{
dat|=(uchar)(1<<(7-i));
}
while(DHT11_IO==1);
}
return dat;
}
void main()
{
P3M0=0XFF; //将P3口设为推挽输出
P3M1=0X00;
while(1)
{
start(); //开始信号
if(check()) //检查响应
{
humi_data_H=read_byte(); //读取湿度高八位
humi_data_L=read_byte(); //读取湿度低八位
temp_data_H=read_byte(); //读取温度高八位
temp_data_L=read_byte(); //读取温度低八位
checkdata=read_byte(); //读取校验位
if(checkdata==(humi_data_H+humi_data_L+temp_data_H+temp_data_L)) //校验
{
P3_7=1; //校验成功,P3.7输出高电平
}
else
{
P3_7=0; //校验失败,P3.7输出低电平
}
}
delay(200); //延时200ms
}
}
```
在上述代码中,通过定义start()、check()、read_byte()等函数实现对DHT11传感器的操作,同时,通过P3.7口输出校验结果,以实现对DHT11温湿度传感器的读取和校验。
阅读全文