基于DHT11制作的简易温湿度测量设备
时间:10-02
整理:3721RD
点击:
最近心血来潮想用温湿度传感器DHT11和数码管做一个简易的温湿度测量设备,刚好手边有闲置的传感器和STC单片机,做了一下简单的焊接和编程。设计思路是DHT11用于采集数据,数码管显示当前温度和湿度,蜂鸣器可以在预设的温度或湿度下报警。DHT11属于单总线设备,只要时序正确,数据读取还是没问题的。
下面是DHT11实现数据读取的程序:
- void Signal_request(void) //信号请求函数
- {
- DHTIO = 0;
- Delay10ms();
- Delay10ms(); //拉低数据线至少18ms
- DHTIO = 1;
- Delay30us(); //拉高数据线20~40us
- }
- u8 Respond(void) //信号响应
- {
- u8 retry=100;
- while(DHTIO && retry--); //等待数据线被拉低
- retry = 100;
- while(!DHTIO && retry--);
- return 1; //响应正确
- }
- u8 Data_Read_Bit(void) //按位接收数据
- {
- u8 retry=100;
- while(DHTIO && retry--); //等待开始位
- retry =100;
- while(!DHTIO && retry--); //等待数据位
- retry =100;
- Delay30us();
- if(DHTIO)
- {
- return 1; //接收到的数据为1
- }
- else return 0;
- }
- u8 Data_Read_Byte(void) //按字节接收数据
- {
- u8 i;
- u8 Data_Byte,Data_Bit;
- for(i=0;i<8;i++)
- {
- Data_Bit = Data_Read_Bit();
- Data_Byte <<= 1;
- Data_Byte |= Data_Bit;
- }
- return Data_Byte;
- }
- void Data_Receive(void) //接收数据
- {
- u8 HZ,HX,TZ,TX,Check;
- u8 respond;
- Signal_request(); //信号请求
- respond = Respond(); //响应结果
- if(respond)
- {
- HZ = Data_Read_Byte();
- HX = Data_Read_Byte();
- TZ = Data_Read_Byte();
- TX = Data_Read_Byte();
- Check = Data_Read_Byte();
- if(HZ+HX+TZ+TX == Check)
- {
- Humidity_Z = HZ; //湿度整数部分
- Humidity_X = HX; //湿度小数部分
- Temperature_Z = TZ; //温度整数部分
- Temperature_X = TX; //温度小数部分
- }
- }
- }
在实际使用中还存在不足的地方,DHT11和单片机通信时间在3ms左右,而如果以此频率刷新数码管的话人眼就会明显感觉到数据在不断的跳变,目前正在尝试不同的解决办法,如果大家有好的解决方法的话还望指点一下。
不错
搞半天木有20楼
这个值得学习,下载中
怎么没有完整程序?
只是提供了DHT11的驱动程序,使用时直接调用相关函数就行了
你用的7960驱动的数码管?
用三极管驱动的,浪费了好多引脚
这个太好了 最近正在学着用dht11 希望也能做一个和小编一样的东西出来
值得参考
不错不错
怎么变松4~20mA输出