DHT11实现温度湿度的数码管显示
来源:互联网 发布:linux c base64 解码 编辑:程序博客网 时间:2024/04/27 14:30
DHT11温湿度传感器:
温湿度只能精确到个位,主机发送一次开始信号,DTH11连续发送五个字节。
第一个字节,湿度的高位;
第二个字节,湿度的低位;
第三个字节,温度的高位;
第四个字节,温度的低位。
整个工程下载链接:http://download.csdn.net/detail/c1194758555/9580077
整个工程用到的全部头文件:
########################################################DHT11.h#define DAT P25#define uchar unsigned char#define uint unsigned intextern char WD_H; /*温度的高位*/extern char WD_L; /*温度的低位*/extern char SD_H; /*湿度的高位*/extern char SD_L; /*湿度的地位*/extern char Erron; /*出错*/void init_in_DHT(void);void init_out_DHT(void);uchar Read(uchar *a);void READ(void);#########################################################interrupt_time.hvoid display_ms(uint time);/*ms秒级*/void display_us(uint time);/*us级定时*/###########################################################led.h /*数码管的动态显示*/#define SCLK P00 #define RCLK P01#define DIO P02extern const unsigned char table[10];void led_on(unsigned char led_num);void led_one(unsigned char LEDNO, unsigned char NO);#############################################################
DHT11的数据传输及数据处理代码:
#include <STC15W4K58S4.h>#include "interrupt_time.h"#include "DHT11.h"char WD_H = 0; /*温度的高位*/char WD_L = 0; /*温度的低位*/char SD_H = 0; /*湿度的高位*/char SD_L = 0; /*温度的低位*/char Erron; /*出错标志*/void init_in_DHT(void){DAT = 1;}void init_out_DHT(void){DAT = 0;}uchar check(char *a) /*校验函数*/{if((a[4] & 0xf) == ((a[0] + a[1] + a[2] + a[3]) & 0xf))return 1;return 0;}char Readbit() /*读取一个bit*/{uchar i;uchar time;uchar temp = 0;uchar dat = 0;for(i = 0; i < 8; i++){time = 60;while(!DAT && --time) { display_us(1); /*延时4us*/ }if(!time) return 0xfe;display_us(30); /*延时30us*/temp = DAT ? 1 : 0;dat = dat << 1;dat |= temp;time = 50;while(DAT && --time) { display_us(1); /*延时4us*/ }if(!time) return 0xfe;}return dat;}uchar Read(uchar *a) /*读去一次,五个字节*/{uchar time;init_out_DHT();display_ms(20); /*延时20ms*/init_in_DHT();time = 50;while(DAT && time-- ) /*拉高等待20-40us*/{ display_us(1); }if(!time)return 0;time = 100;while(!DAT && --time) /*DHT响应拉低80us*/{ display_us(1); }if(!time)return 0;time = 100;while(DAT && --time) /*DHT响应拉高80us*/{ display_us(1); }if(!time)return 0;a[0] = Readbit(); /*读取输入值*/a[1] = Readbit();a[2] = Readbit();a[3] = Readbit();a[4] = Readbit();init_in_DHT();if(a[0] == 0xfe || a[1] == 0xfe || a[2] == 0xfe || a[3] == 0xfe) /*是否读出错误*/return 0;return check(a);}void READ(void) /*对读出的数据进行处理*/{uchar a[4];int A,B;Erron = Read(a);A = a[0];B = a[2]; SD_H = (A / 10) % 10; SD_L = A % 10; WD_H = (B / 10) % 10; WD_L = B % 10;}
LED动态显示源码:
#include <STC15W4K58S4.h>#include "led.h"const unsigned char table[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; /*段码*/void S_CLK(){ SCLK = 0; SCLK = 1;}void R_CLK(){RCLK = 0;RCLK = 1;}void led_on(unsigned char led_num) /{unsigned char i ;for(i = 0; i < 8; i++){ if(led_num & 0x80) DIO = 1; else DIO = 0; led_num <<= 1; S_CLK();}}void led_one(unsigned char LEDNO, unsigned char NO){ led_on(LEDNO); led_on(NO); R_CLK();}
#include <STC15W4K58S4.h>#include "DHT11.h"#include "led.h"void display_us(uint time)/*us级延时*/{while(time--);}void display_ms(uint time)/*ms级延时*/{time = 12 * time * 1000;while(time --);}
使用12MZH时钟,STC15W4K58S4的速度是传统单片机的12倍。
主函数
/* ******************************************************************************************** * * * 程序功能:DHT11温湿度测量并用数码管显示 * * 最后更改时间:2016-7-19 * * 问 题:读取数据时有必须的延时,<span style="font-family: Arial, Helvetica, sans-serif;">所以刷新时会出现数码管的轻微闪烁 *</span> [cpp] view plain copy 在CODE上查看代码片派生到我的代码片******************************************************************************************** */ #include <STC15W4K58S4.h> #include "interrupt_time.h" #include "led.h" #include "DHT11.h" int main() { uint time = 2000; display_ms(time); /*延时两秒*/ READ(); /*读取数据*/ while(1) { time = 3000000*12; while(time--) /*每隔3秒读取一次*/ { led_one(table[WD_H], 2); led_one(table[WD_L], 1); led_one(table[SD_H], 8); led_one(table[SD_L], 4); } READ(); } }
效果:
注:前两位为湿度,后两位位温度。
0 0
- DHT11实现温度湿度的数码管显示
- 温度、湿度传感器dht11
- DHT11温度湿度模块读取温湿度
- (13)树莓派B+ 读取DHT11温度湿度模块的数值
- 树莓派通过DHT11温湿度传感器获得当前的温度和湿度
- 数码管显示的温湿度计——DHT11
- 基于 Arduino 的温度+湿度传感器
- DHT11湿度传感器开发
- 20141119 【 Arduino - DHT11 - 单片机 】 利用单片机数码管 显示 DHT11温湿度
- 18b20温度数码管显示
- 在树莓派上使用Python实现对温度,湿度以及光照强度的实施测量
- LCD5110实时显示温度、湿度、光照度、颗粒物
- 20141115 【 Arduino - LM35 - 4位八段数码管 】 数码管显示温度
- 如何用电脑控制感知周围环境的温度和湿度
- 51-DHT11实现温湿度的检测显示于Lcd1602
- 数码管显示电路的Verilog HDL实现
- LED数码管的显示
- 数码管的显示
- Vue.js入门学习(2)
- [374] Guess Number Higher or Lower
- iOS 开发 -- Pch 文件的使用
- ODOO发邮件失败解决方法
- C语言位域(位段)
- DHT11实现温度湿度的数码管显示
- 1065. A+B and C (64bit) (20)
- Redis 学习笔记2:redis.conf配置文件详解
- MongoDB学习笔记(1)HelloWorld(增删改查)
- Apache+php在windows下的安装和配置
- 自定义view以及事件处理
- 《Thinkinginjava》第17章-容器深入研究
- vue框架使用积累
- 代码校验工具 SublimeLinter 的安装与使用