找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4621|回复: 10
收起左侧

DHT11模块stm32f103c8t6程序

  [复制链接]
ID:462603 发表于 2019-1-5 17:58 | 显示全部楼层 |阅读模式
DHT11模块stm32f103c8t6单片机驱动

源程序如下:
  1. /***************STM32F103C8T6**********************
  2. * 文件名  :DHT11.c
  3. * 描述    :DHT11传感器
  4. * 备注    : DHT11温度湿度传感器
  5. * 接口    :PA11-DATA

  6. ********************LIGEN*************************/

  7. #include "dht11.h"
  8. #include "delay.h"

  9. #define DT GPIO_Pin_11
  10.       
  11. //复位DHT11
  12. void DHT11_Rst(void)          
  13. {                 
  14.         DHT11_IO_OUT();         //SET OUTPUT
  15.         DHT11_DQ_OUT=0;         //拉低DQ
  16.         Delay_ms(20);            //拉低至少18ms
  17.         DHT11_DQ_OUT=1;         //DQ=1
  18.         Delay_us(30);             //主机拉高20~40us
  19. }

  20. //等待DHT11的回应
  21. //返回1:未检测到DHT11的存在
  22. //返回0:存在
  23. u8 DHT11_Check(void)           
  24. {   
  25.         u8 retry=0;
  26.         DHT11_IO_IN();//SET INPUT         
  27.     while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
  28.         {
  29.                 retry++;
  30.                 Delay_us(1);
  31.         };         
  32.         if(retry>=100)return 1;
  33.         else retry=0;
  34.     while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
  35.         {
  36.                 retry++;
  37.                 Delay_us(1);
  38.         };
  39.         if(retry>=100)return 1;            
  40.         return 0;
  41. }

  42. //从DHT11读取一个位
  43. //返回值:1/0
  44. u8 DHT11_Read_Bit(void)                          
  45. {
  46.         u8 retry=0;
  47.         while(DHT11_DQ_IN&&retry<100)//等待变为低电平
  48.         {
  49.                 retry++;
  50.                 Delay_us(1);
  51.         }
  52.         retry=0;
  53.         while(!DHT11_DQ_IN&&retry<100)//等待变高电平
  54.         {
  55.                 retry++;
  56.                 Delay_us(1);
  57.         }
  58.         Delay_us(40);//等待40us
  59.         if(DHT11_DQ_IN)return 1;
  60.         else return 0;                  
  61. }

  62. //从DHT11读取一个字节
  63. //返回值:读到的数据
  64. u8 DHT11_Read_Byte(void)   
  65. {        
  66.         u8 i,dat;
  67.         dat=0;
  68.         for (i=0;i<8;i++)
  69.         {
  70.                 dat<<=1;
  71.                 dat|=DHT11_Read_Bit();
  72.         }                                                    
  73.         return dat;
  74. }

  75. //从DHT11读取一次数据
  76. //temp:温度值(范围:0~50°)
  77. //humi:湿度值(范围:20%~90%)
  78. //返回值:0,正常;1,读取失败
  79. u8 DHT11_Read_Data(u8 *temp,u8 *humi)   
  80. {        
  81.         u8 buf[5];
  82.         u8 i;
  83.         DHT11_Rst();
  84.         if(DHT11_Check()==0)
  85.         {
  86.                 for(i=0;i<5;i++)//读取40位数据
  87.                 {
  88.                         buf[i]=DHT11_Read_Byte();
  89.                 }
  90.                 if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  91.                 {
  92.                         *humi=buf[0];
  93.                         *temp=buf[2];
  94.                 }
  95.         }
  96.         else return 1;
  97.         return 0;            
  98. }

  99. //初始化DHT11的IO口 DQ 同时检测DHT11的存在
  100. //返回1:不存在
  101. //返回0:存在             
  102. u8 DHT11_Init(void)
  103. {         
  104.         GPIO_InitTypeDef  GPIO_InitStructure;       
  105.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PG端口时钟
  106.         GPIO_InitStructure.GPIO_Pin = DT;                                 //PG11端口配置
  107.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  108.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  109.         GPIO_Init(GPIOA, &GPIO_InitStructure);                                 //初始化IO口
  110.         GPIO_SetBits(GPIOA,DT);                                                 //PG11 输出高
  111.                             
  112.         DHT11_Rst();  //复位DHT11
  113.         return DHT11_Check();//等待DHT11的回应
  114. }
复制代码

所有资料51hei提供下载:
DHT11温湿度检测.zip (285.43 KB, 下载次数: 221)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:462698 发表于 2019-1-5 20:39 | 显示全部楼层
很好,正好需要
回复

使用道具 举报

ID:82928 发表于 2019-3-8 19:38 | 显示全部楼层
现在还看不太懂,努力努力努力
回复

使用道具 举报

ID:508794 发表于 2019-4-19 14:28 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:219729 发表于 2019-4-19 23:18 | 显示全部楼层
敢问楼主使用的什么LCD?
回复

使用道具 举报

ID:479851 发表于 2019-4-21 06:09 | 显示全部楼层
这个 行不行啊
回复

使用道具 举报

ID:524448 发表于 2019-4-29 21:41 | 显示全部楼层
好用吗
回复

使用道具 举报

ID:477889 发表于 2019-5-17 20:48 | 显示全部楼层
为什么dht11初始化失败啊
回复

使用道具 举报

ID:309115 发表于 2019-7-6 15:05 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:421308 发表于 2019-7-12 09:26 | 显示全部楼层
这个只能是PA11口
回复

使用道具 举报

ID:421308 发表于 2019-7-12 09:27 | 显示全部楼层
寄存器写死了,怎么改啊,有谁知道吗???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表