i.MX6ULL终结者DHT11温湿度模块例程程序设计

本实验的源码工程在开发板光盘资料的:i.MX6UL终结者光盘资料\04_裸机例程源码\20_dht11目录下。我们在Ubuntu系统下使用命令“mkdir 20_dht11”建立“20_dht11”文件夹,如图 1所示:
在这里插入图片描述

图 1

然后使用“cd 20_dht11”命令进入到20_dht11文件夹,如图 2所示:
在这里插入图片描述

图 2

然后使用命令“cp -r …/19_mpu6050/* ./”将上一章例程中的所有内容拷贝到刚刚新建的“20_dht11”里面,如图 3所示:
在这里插入图片描述

图 3

然后在drivers目录下建立dht11文件夹,用来保存dht11的驱动文件,然后在“drivers/dht11”目录中新建dht11.h和dht11.c两个文件,然后在dht11.h文件输入下面的代码:

 1 #ifndef __BSP_DHT11_H
  2 #define __BSP_DHT11_H
  3 #include "imx6ul.h"
  4 
  5 /* 函数声明 */
  6 void dht11_init(void);
  7 void dht11_send_start_cmd(void);
  8 unsigned char dht11_check_ack(void);
  9 void set_dht11_io_out(void);
 10 void set_dht11_io_in(void);
 11 void dht11_io_out(unsigned char value);
 12 unsigned char dht11_get_gpio_value(void);
 13 unsigned char dht11_get_bit(void);
 14 unsigned char dht11_get_byte(void);
 15 #endif

dht11.h文件里面主要是声明了一些函数。然后我们打开dht11.c文件,在里面输入下面的代码:

 1 #include "delay.h"
  2 #include "dht11.h"
  3 
  4 /*
  5  * @description : 初始化DHT11对应的GPIO
  6  * @param       : 无
  7  * @return      : 无
  8  */
  9 void dht11_init(void)
 10 {
   
 11         /* 1、初始化IO复用 */
 12         IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER2_GPIO5_IO02, 0);/* 复用为GPIO5_IO02 */
 13 
 14 
 15         /* 2、、配置GPIO1_IO03的IO属性  
 16          *bit 16:0 HYS关闭
 17          *bit [15:14]: 10 默认100K上拉
 18          *bit [13]: 0 kepper功能
 19          *bit [12]: 1 pull/keeper使能
 20          *bit [11]: 0 关闭开路输出
 21          *bit [7:6]: 10 速度100Mhz
 22          *bit [5:3]: 110 R0/6驱动能力
 23          *bit [0]: 0 低转换率
 24          */
 25         IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER2_GPIO5_IO02, 0X90B0);
 26 }
 27 
 28 /*
 29  * @description : 开启一次读取DHT11操作
 30  * @param       : 无
 31  * @return      : 无
 32  */
 33 void dht11_send_start_cmd(void)
 34 {
   
 35         /* 初始化GPIO,GPIO5_IO02设置为输出 */
 36         set_dht11_io_out();
 37 
 38         /* GPIO5_IO02输出低电平*/
 39         dht11_io_out(0);
 40         delayms(20);
 41         /* GPIO5_IO02输出高电平*/
 42         dht11_io_out(1);
 43         delayus(40);
 44 }
 45 
 46 /*
 47  * @description : 判断DHT11设备是否有应答
 48  * @param       : 无
 49  * @return      : 有应答:0,无应答:1
 50  */
 51 unsigned char dht11_check_ack(void)
 52 {
   
 53         unsigned char retry = 0;
 54 
 55         /* 设置GPIO5_IO02为输入模式 */
 56         set_dht11_io_in();
 57 
 58         /* DHT11会拉低40~80us */
 59         while(dht11_get_gpio_value() && (retry<100))
 60         {
   
 61                 retry++;
 62                 delayus(1);
 63         }
 64 
 65         if(retry>=100
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值