收藏 分享(赏)

DHT11程序代码.doc

上传人:精品资料 文档编号:11220536 上传时间:2020-02-20 格式:DOC 页数:7 大小:38KB
下载 相关 举报
DHT11程序代码.doc_第1页
第1页 / 共7页
DHT11程序代码.doc_第2页
第2页 / 共7页
DHT11程序代码.doc_第3页
第3页 / 共7页
DHT11程序代码.doc_第4页
第4页 / 共7页
DHT11程序代码.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、/现象是循环显示温度和湿度各显示三秒(小数位显示 0)/若需将 dht11.c 和其他的硬件结合使用,只需在需用到温湿度值的文件加下面声明/extern int wendu, shidu;(wendu 是温度值,shidu 是湿度值, 比实际的温湿度值扩大了十倍)/一、/文件名保存为 main.c/*/除了 dht11 的接口外,其他的电路原理图与天祥的 C51 板对应/现象是循环显示温度和湿度各显示三秒#include “dht11.h“#include sbit DULA = P26; /数码管位定义sbit WELA = P27;static unsigned char flag; /中

2、断计数标志static unsigned char code array= /数码管编码0x3f,0x06,0x5b,0x4f,0x6,0x6d,0x7d,0x07,0x7f,0x6f;extern int wendu, shidu;static void InitTime(void);void Delay_1ms(unsigned int ms);static void SMG_Display(unsigned int value);int main(void)unsigned char mark = 0;/先等上电稳定Delay_1ms(1000);/因为读一次数据 dht11 才会触发一

3、次采集数据./即在先使用数据时采集一次数据ReadTempAndHumi();/因为在两次采集数据需一定的时间间隔,这里还可减少 Delay_1ms(3000);/设定定时器InitTime();while(1)/三秒读一次温湿度if(flag = 60)flag = 0;mark+;/*/读温湿度,可检测函数调用是否失败,/函数返回 OK(1)表示成功,返回 EROR(0)表示失败/OK 和 EROR 是在 dht11.H 中定义的宏*/ReadTempAndHumi();if(mark % 2 = 0)/显示温度SMG_Display(wendu);else/显示湿度SMG_Display

4、(shidu);return 0;/设定定时器static void InitTime(void)TH0 = (unsigned char)(65535 - 50000) 8);TL0 = (unsigned char)(65535 - 50000) ;TMOD = 0X01;TR0 = 1;ET0 = 1;EA = 1;/数码管显示函数static void SMG_Display(unsigned int value) unsigned char ge, bai, shi;ge = value % 10;shi = value % 100 / 10;bai = value % 1000 /

5、 100;WELA = 1;P0 = 0XFE;WELA = 0;P0 = 0XFF;DULA = 1;P0 = arraybai;DULA = 0;Delay_1ms(2);WELA = 1;P0 = 0XFD;WELA = 0;P0 = 0XFF;DULA = 1;P0 = arrayshi;P0 |= 0x80; /*显示小数点*/DULA = 0;Delay_1ms(2);WELA = 1;P0 = 0XFB;WELA = 0;P0 = 0XFF;DULA = 1;P0 = arrayge;DULA = 0;Delay_1ms(2);/中断函数void timer(void) inte

6、rrupt 1TH0 = (unsigned char)(65535 - 50000) 8);TL0 = (unsigned char)(65535 - 50000);flag+;/*/二、保存文件名 dht11.h(保存时必须命名为 dht11.h)/*/*/#ifndef _dht11_H_#define _HDT11_H_/设定标志(static unsigned char status)的宏值#define OK 1#define EROR 0extern void Delay_1ms(unsigned int ms);/函数的返回值表示读取数据是否成功 OK 表示成功 EROR 表示

7、失败extern unsigned char ReadTempAndHumi(void);#endif/*/*/三、保存的文件名是 dht11.c/*/*/*/单片机时钟为 11.0592M#include “dht11.h“#include /请根据自己的 dht11 接的 IO 口来改动位定义sbit dht11 = P20;/防止在与硬件通信时发生死循环的计数范围#define NUMBER 20#define SIZE 5static unsigned char status;/存放五字节数据的数组static unsigned char value_arraySIZE;/*可在其他的

8、文件引用温湿度值 ,实际是温度的整数的 10 倍如 dht11 读回的温度是 26,则 wendu = 260, 湿度同理*/int wendu, shidu;static unsigned char ReadValue(void);extern void Delay_1ms(unsigned int ms)unsigned int x, y;for(x = ms; x 0; x-)for(y = 124; y 0; y-);static void Delay_10us(void)unsigned char i;i-;i-;i-;i-;i-;i-;/*读一个字节的数据*/static unsi

9、gned char ReadValue(void)unsigned char count, value = 0, i;status = OK; /设定标志为正常状态for(i = 8; i 0; i-)/高位在先value = NUMBER)status = EROR; /设定错误标志return 0; /函数执行过程发生错误就退出函数/26-28us 的高电平表示该位是 0,为 70us 高电平表该位 1Delay_10us();Delay_10us();Delay_10us();/延时 30us 后检测数据线是否还是高电平if(dht11 != 0) /进入这里表示该位是 1value+;

10、/等待剩余(约 40us)的高电平结束while(dht11 != 0 /设定错误标志return 0;return (value);/读一次的数据,共五字节extern unsigned char ReadTempAndHumi(void)unsigned char i = 0, check_value = 0,count = 0;EA = 0;dht11 = 0; /拉低数据线大于 18ms 发送开始信号Delay_1ms(20); /需大于 18 毫秒dht11 = 1; /释放数据线,用于检测低电平的应答信号/延时 20-40us,等待一段时间后检测应答信号 ,应答信号是从机拉低数据线

11、 80usDelay_10us();Delay_10us();Delay_10us();Delay_10us();if(dht11 != 0) /检测应答信号,应答信号是低电平/没应答信号EA = 1;return EROR;else/有应答信号while(dht11 = 0 EA = 1; return EROR; /读数据出错,退出函数count = 0;dht11 = 1;/释放数据线/应答信号后会有一个 80us 的高电平,等待高电平结束while(dht11 != 0 EA = 1;return EROR; /退出函数/读出湿.温度值for(i = 0; i SIZE; i+)val

12、ue_arayi = ReadValue();if(status = EROR)/调用 ReadValue()读数据出错会设定 status 为 ERORdht11 = 1;EA = 1;return EROR;/读出的最后一个值是校验值不需加上去if(i != SIZE - 1)/读出的五字节数据中的前四字节数据和等于第五字节数据表示成功check_value += value_arayi;/end for/在没用发生函数调用失败时进行校验if(check_value = value_arraySIZE - 1)/将温湿度扩大 10 倍方便分离出每一位shidu = value_aray0 * 10;wendu = value_aray2 * 10;dht11 = 1;EA = 1;return OK; /正确的读出 dht11 输出的数据else/校验数据出错EA = 1; return EROR;/*/*/*/

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报