




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、共2个文件:DHT11.c和DHT11.hDHT11.c#include "DHT11.h"/* 函数名称: Set_32MHZ* 功能 : 设置系统时钟为32MHZ* 参数列表: 无 * 返回值 : 无*/void Set_32MHZ(void) CLKCONCMD &= 0x40; /系统时钟源为32MHZ晶振; while(CLKCONSTA & 0x40); /等待时钟稳定; CLKCONCMD &= 0x47; /系统主时钟频率:32MHZ;/* dht11.c*/32MHZ us延时函数;#pragma optimize=nonevoid
2、 dht11_delay_us(unsigned int n) n>>=1; while(n-) asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm
3、("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); void delay_ms(uint32_t time) while(time-) dht11_delay_us(1000); unsigned char dht11_read_byte(void) unsigned char r_val = 0; unsigned char t_count = 0; /计时器,防止超时; unsigned char i; for(i = 0 ; i < 8 ; i+) t_count
4、= 0; /低电平50us后开始一个数据位读取; while( !DHT11_PIN ) asm("NOP"); t_count+; if(t_count > 250) /超时; return 100; t_count = 0; dht11_delay_us(32); /高电平2628us表示'0',70us表示'1' if( DHT11_PIN = 1 ) r_val <<= 1; r_val |= 1; else r_val <<= 1; continue; /等待DHT11数据输出结束; while( DH
5、T11_PIN = 1) asm("NOP"); t_count+; if(t_count>250) return 100; return r_val; char dht11_value(unsigned char *temp , unsigned char *humi , unsigned char flag) unsigned char t_count = 0; /计时器; unsigned char h_i = 0 , h_f = 0; unsigned char t_i = 0 , t_f = 0; unsigned char check_sum = 0; D
6、HT11_PIN_OUT(); DHT11_PIN_L(); /输出低电平; /低电平持续时间必须大于18ms; delay_ms(40); /40ms; DHT11_PIN_H(); /主机结束信号; /主机等待20us40us,读取DHT11响应输出; dht11_delay_us(30); DHT11_PIN_IN(); if(DHT11_PIN = 0) /正确的响应输出; while( !DHT11_PIN ) asm("NOP"); t_count+; if(t_count > 250) /超时; return -1; t_count = 0; dht11
7、_delay_us(50); /DHT11给出响应输出后会拉高总线80us; while( DHT11_PIN ); /等待接收; asm("NOP"); t_count+; if(t_count > 250) /超时; return -1; h_i = dht11_read_byte(); /湿度整数部分; h_f = dht11_read_byte(); /湿度小数部分; t_i = dht11_read_byte(); /温度整数部分; t_f = dht11_read_byte(); /温度小数部分; check_sum = dht11_read_byte()
8、; /校验和; /校验和正确或者温湿度整数部分获取正确即表示获取成功! if(check_sum = ( h_i + h_f + t_i + t_f ) | (h_i != 100 && t_i != 100) ) if(flag = DHT11_STRING) temp0 = t_i/10+0x30; temp1 = t_i%10+0x30; humi0 = h_i/10+0x30; humi1 = h_i%10+0x30; else *temp = t_i; *humi = h_i; else if(flag = DHT11_STRING) temp0 = '0
9、39; temp1 = '0' humi0 = '0' humi1 = '0' else *temp = 0; *humi = 0; return -1; else if(flag = DHT11_STRING) temp0 = '0' temp1 = '0' humi0 = '0' humi1 = '0' else *temp = 0; *humi = 0; return -1; return 0;DHT11.h#ifndef _DHT11_H#define _DHT11_H#in
10、clude <iocc2530.h>#include "zComDef.h"#define DHT11_PIN P0_7 /数据引脚/引脚配置为输出;#define DHT11_PIN_OUT() P0DIR |= 1<<7; asm("NOP"); /引脚配置为输入;#define DHT11_PIN_IN() P0DIR &= (1<<7); asm("NOP"); /拉高数据线;#define DHT11_PIN_H() DHT11_PIN = 1; asm("NOP&quo
11、t;); /拉低数据线;#define DHT11_PIN_L() DHT11_PIN = 0; asm("NOP"); void Set_32MHZ(void);/* 32MHZ us延时函数;*/void dht11_delay_us(unsigned int n);void delay_ms(uint32_t time);/* 读DHT11传感器; 读取成功返回读取值,失败返回100(超过DHT11范围);*/unsigned char dht11_read_byte(void);/* 获取温湿度数值;读取成功返回0,失败返回-1 第一个参数为温度,第二个参数为湿度,第三个参数为类型(DHT11_STRING or DHT11_UINT8)用法举例:例一:unsigned char temp , humi;char r_val;r_val = dht11_value(&temp , &humi , DHT11_UINT8);例二:unsigned char temp2,humi2;char r_va
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业规划中的生活质量评估与调整策略
- 项目进度管理中跨部门协作的重要性
- 高效办公技巧小学生也能掌握
- 高效、便捷的客户服务流程设计研究
- 跨领域合作下的康复医学科研成果转化模式
- 金融科技驱动的小微企业信贷服务优化研究
- 设备操作规范在医疗领域的应用
- 艺术与技术的融合儿童设计师的创意世界
- 跨境电商中的客户画像构建与应用
- 跨境电商市场拓展与竞争策略
- 2025年中国外运股份有限公司招聘笔试参考题库含答案解析
- 《儿童插画的设计》课件
- 2025年西昌市公开招聘国企业工作人员高频重点提升(共500题)附带答案详解
- 2025届湖北武汉市高考仿真模拟数学试卷含解析
- 《艾滋病患者的护理》课件
- 工业园区火灾隐患整改管理制度
- 2024年浙江化工行业职业技能竞赛(化工总控工赛项)理论考试题库及答案
- 马工程管理学自测题
- 小学足球基本技术动作教案
- TSGD7002-2023-压力管道元件型式试验规则
- 超声引导下的星状神经节阻滞
评论
0/150
提交评论