基于单片机的温湿度报警器的代码触摸按键触发连续温湿度采样采样周期变为100ms
时间: 2023-11-29 12:06:34 浏览: 62
基于单片机的温湿度控制报警系统
5星 · 资源好评率100%
以下是基于单片机的温湿度报警器的代码,触摸按键触发连续温湿度采样,采样周期变为100ms。
```c
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11=P3^3; //DHT11数据线
uchar code table[]="Temperature:%d.%d C Humidity:%d.%d%%"; //温湿度显示格式
uchar H_data,L_data,check_data; //DHT11读取数据
void delay(uint n) //延时函数
{
uint i,j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
void start_DHT11() //DHT11启动信号
{
DHT11=0;
delay(20);
DHT11=1;
delay(30);
}
uchar check_response() //DHT11响应信号
{
uchar response=0;
delay(40);
if(!DHT11)
{
delay(80);
if(DHT11)
response=1;
else
response=-1;
}
while(DHT11);
return response;
}
uchar read_DHT11() //读取DHT11数据
{
uchar data=0,i;
for(i=0;i<8;i++)
{
while(!DHT11);
delay(30);
if(DHT11)
data=(data<<1)|0x01;
else
data=data<<1;
while(DHT11);
}
return data;
}
void main()
{
uchar i;
float temp,hum;
TMOD=0x01; //定时器0工作在模式1下
TH0=0xff; //定时器计数初值
TL0=0xff;
TR0=1; //启动定时器0
while(1)
{
start_DHT11();
if(check_response()==1)
{
H_data=read_DHT11();
L_data=read_DHT11();
check_data=read_DHT11();
if(check_data==H_data+L_data) //检查校验和
{
hum=H_data; //计算湿度
temp=L_data; //计算温度
printf(table,(int)temp/10,temp%10,(int)hum/10,hum%10); //显示温湿度
}
else
printf("DHT11 read error!"); //校验和错误
}
else
printf("DHT11 no response!"); //未响应
for(i=0;i<10;i++) //延时
delay(10000);
}
}
void timer0() interrupt 1 //定时器0中断函数
{
static uchar count=0;
TH0=0xff; //重新赋初值
TL0=0xff;
count++;
if(count==100) //100ms
{
count=0;
start_DHT11(); //触发DHT11采样
}
}
```
在此代码中,使用了定时器0来实现100ms的定时功能,同时在定时器中断函数中触发DHT11采样。触摸按键可以在中断函数中添加相应的处理代码来实现。
阅读全文