找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7658|回复: 17
打印 上一主题 下一主题
收起左侧

基于STM32温湿度(DHT11)加OLED(IIC)显示

  [复制链接]
跳转到指定楼层
楼主
ID:548189 发表于 2020-3-8 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.硬件准备:
DHT11模块
OLED(IIC)模块
核心板STM32F103C8T6

2.硬件接线:
OLED SCL---PB12    SDA---PB13  VCC---3.3V

DHT11   DAT---14


程序源码:


  1. #include "dht11.h"
  2. //////////////////////////////////////////////////////////////////////////////////  
  3. #include "delay.h"         
  4. //////////////////////////////////////////////////////////////////////////////////
  5. //复位DHT11
  6. void DHT11_Rst(void)   
  7. {                 
  8. DHT11_IO_OUT();  //SET OUTPUT
  9.     DHT11_DQ_OUT=0;  //拉低DQ
  10.     delay_ms(20);     //拉低至少18ms
  11.     DHT11_DQ_OUT=1;  //DQ=1
  12. delay_us(30);      //主机拉高20~40us
  13. }
  14. //等待DHT11的回应
  15. //返回1:未检测到DHT11的存在
  16. //返回0:存在
  17. u8 DHT11_Check(void)     
  18. {   
  19. u8 retry=0;
  20. DHT11_IO_IN();//SET INPUT  
  21.     while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
  22. {
  23.   retry++;
  24.   delay_us(1);
  25. };  
  26. if(retry>=100)return 1;
  27. else retry=0;
  28.     while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
  29. {
  30.   retry++;
  31.   delay_us(1);
  32. };
  33. if(retry>=100)return 1;     
  34. return 0;
  35. }
  36. //从DHT11读取一个位
  37. //返回值:1/0
  38. u8 DHT11_Read_Bit(void)     
  39. {
  40.   u8 retry=0;
  41. while(DHT11_DQ_IN&&retry<100)//等待变为低电平
  42. {
  43.   retry++;
  44.   delay_us(1);
  45. }
  46. retry=0;
  47. while(!DHT11_DQ_IN&&retry<100)//等待变高电平
  48. {
  49.   retry++;
  50.   delay_us(1);
  51. }
  52. delay_us(40);//等待40us
  53. if(DHT11_DQ_IN)return 1;
  54. else return 0;     
  55. }
  56. //从DHT11读取一个字节
  57. //返回值:读到的数据
  58. u8 DHT11_Read_Byte(void)   
  59. {        
  60.     u8 i,dat;
  61.     dat=0;
  62. for (i=0;i<8;i++)
  63. {
  64.      dat<<=1;
  65.      dat|=DHT11_Read_Bit();
  66.     }         
  67.     return dat;
  68. }
  69. //从DHT11读取一次数据
  70. //temp:温度值(范围:0~50°)
  71. //humi:湿度值(范围:20%~90%)
  72. //返回值:0,正常;1,读取失败
  73. u8 DHT11_Read_Data(u8 *temp,u8 *humi)   
  74. {        
  75.   u8 buf[5];
  76. u8 i;
  77. DHT11_Rst();
  78. if(DHT11_Check()==0)
  79. {
  80.   for(i=0;i<5;i++)//读取40位数据
  81.   {
  82.    buf[i]=DHT11_Read_Byte();
  83.   }
  84.   if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  85.   {
  86.    *humi=buf[0];
  87.    *temp=buf[2];
  88.   }
  89. }else return 1;
  90. return 0;     
  91. }
  92. //初始化DHT11的IO口 DQ 同时检测DHT11的存在
  93. //返回1:不存在
  94. //返回0:存在      
  95. u8 DHT11_Init(void)
  96. {  
  97.   GPIO_InitTypeDef  GPIO_InitStructure;
  98.   
  99.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能PG端口时钟

  100.   GPIO_InitStructure.GPIO_Pin = DHT11_PIN;     //PG11端口配置
  101.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出
  102.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  103.   GPIO_Init(DHT11_IO, &GPIO_InitStructure);     //初始化IO口
  104.   GPIO_SetBits(DHT11_IO,DHT11_PIN);       //PG11 输出高
  105.       
  106. DHT11_Rst();  //复位DHT11
  107. return DHT11_Check();//等待DHT11的回应
  108. }
  109. //DHT11_Read_Data(&temperature,&hum);
  110. //printf("%d  %d\r\n",temperature,hum);
复制代码

全部资料51hei下载地址:
OLED+DHT11.7z (148.94 KB, 下载次数: 654)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏16 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:699194 发表于 2020-3-9 08:53 | 只看该作者
程序是错的
都没有显示





回复

使用道具 举报

板凳
ID:699194 发表于 2020-3-9 09:37 | 只看该作者
可以显示的,说错了 不好意思







回复

使用道具 举报

地板
ID:699194 发表于 2020-3-9 10:29 | 只看该作者
我叫小大打 发表于 2020-3-9 08:53
程序是错的
都没有显示

可以显示的,我刚刚弄错了,不好意思哈


回复

使用道具 举报

5#
ID:221340 发表于 2020-3-9 17:31 | 只看该作者
正好需要这个程序,非常感谢
回复

使用道具 举报

6#
ID:87006 发表于 2020-3-25 11:34 | 只看该作者
资料很全,适合新手
回复

使用道具 举报

7#
ID:341098 发表于 2020-4-19 19:36 | 只看该作者
这是0.96寸的oled吗?
回复

使用道具 举报

8#
ID:372477 发表于 2020-4-20 17:03 | 只看该作者
想问一下楼主,DHT11单总线模式下,SCL引脚是直接接GND吗
回复

使用道具 举报

9#
ID:372477 发表于 2020-4-20 17:04 | 只看该作者
想问一下楼主,DHT11的SCL引脚怎么接单片机
回复

使用道具 举报

10#
ID:372477 发表于 2020-4-20 17:35 | 只看该作者
getlikeme 发表于 2020-4-20 17:04
想问一下楼主,DHT11的SCL引脚怎么接单片机

因为在看到你程序中,并没有定义PB12引脚功能,是直接接到一个未定义的引脚?
回复

使用道具 举报

11#
ID:410071 发表于 2020-4-28 17:02 | 只看该作者
getlikeme 发表于 2020-4-20 17:35
因为在看到你程序中,并没有定义PB12引脚功能,是直接接到一个未定义的引脚?

请问 你 怎么 解决 连接 的 ,dht11接的是 哪个引脚
回复

使用道具 举报

12#
ID:548189 发表于 2020-5-8 14:44 | 只看该作者
DHT11 的 SCL接的是 PB14
回复

使用道具 举报

13#
ID:368810 发表于 2020-5-14 10:33 | 只看该作者
楼主用的是那个版本的proteus?
回复

使用道具 举报

14#
ID:80799 发表于 2020-9-15 08:55 | 只看该作者
很棒让人很舒服
回复

使用道具 举报

15#
ID:637342 发表于 2021-5-18 00:26 | 只看该作者
为什么我的oled显示呢
回复

使用道具 举报

16#
ID:806401 发表于 2021-5-20 23:15 | 只看该作者
为什么我的显示不了 keil5
回复

使用道具 举报

17#
ID:933907 发表于 2021-6-8 13:46 | 只看该作者
请问里面只有程序吗 有仿真部分吗
回复

使用道具 举报

18#
ID:809949 发表于 2021-6-24 11:10 | 只看该作者
高清基础,不断提高
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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