找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于STM32最小系统板的温湿度收集器程序,并用XCOM串口显示

[复制链接]
跳转到指定楼层
楼主
ID:664329 发表于 2020-10-28 18:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
烧录程序,将温湿度传感器模块输入接口连接在STM32F103C8T6最小系统板PA0端口上,即可使用

单片机源程序如下:
  1. #include "bsp_dht11.h"
  2.       
  3. //复位DHT11
  4. void DHT11_Reset(void)          
  5. {                 
  6.         DHT_Direction_O;        
  7.     O_DHT_DAT = 0;        
  8.     delay_ms(20);           
  9.     O_DHT_DAT = 1;        
  10.         delay_us(30);     
  11. }

  12. //等待DHT11的回应
  13. //返回1:未检测到DHT11的存在
  14. //返回0:存在
  15. uint8_t DHT11_IsOnline(void)           
  16. {   
  17.         uint8_t retry = 0;
  18.         DHT_Direction_I;
  19.        
  20.     while (I_DHT_DAT && retry < 100)//DHT11会拉低40~80us
  21.         {
  22.                 retry ++;
  23.                 delay_us(1);
  24.         }
  25.        
  26.         if(retry >= 100)
  27.         {
  28.                 return 1;
  29.         }
  30.         else
  31.         {
  32.                 retry = 0;
  33.         }
  34.        
  35.     while (!I_DHT_DAT && retry < 100)//DHT11拉低后会再次拉高40~80us
  36.         {
  37.                 retry ++;
  38.                 delay_us(1);
  39.         }
  40.        
  41.         if(retry >= 100)
  42.         {
  43.                 return 1;
  44.         }            
  45.         return 0;
  46. }

  47. uint8_t DHT11_ReadBit(void)                          
  48. {
  49.         uint8_t retry = 0;
  50.         while(I_DHT_DAT && retry < 100)
  51.         {
  52.                 retry ++;
  53.                 delay_us(1);
  54.         }
  55.         retry = 0;
  56.         while(!I_DHT_DAT && retry < 100)
  57.         {
  58.                 retry ++;
  59.                 delay_us(1);
  60.         }
  61.        
  62.         delay_us(40);//等待40us
  63.        
  64.         if(I_DHT_DAT)
  65.         {
  66.                 return 1;
  67.         }
  68.         else
  69.         {
  70.                 return 0;       
  71.         }               
  72. }


  73. uint8_t DHT11_ReadByte(void)   
  74. {        
  75.     uint8_t i,dat;
  76.     dat = 0;
  77.         for (i = 0; i < 8; i ++)
  78.         {
  79.                    dat <<= 1;
  80.             dat |= DHT11_ReadBit();
  81.     }                                                    
  82.     return dat;
  83. }

  84. //从DHT11读取一次数据
  85. //temp:温度值(范围:0~50°)
  86. //humi:湿度值(范围:20%~90%)
  87. //返回值:0,正常;1,读取失败
  88. uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)   
  89. {        
  90.         uint8_t buf[5];
  91.         uint8_t i;
  92.        
  93.         DHT11_Reset();
  94.        
  95.         if(DHT11_IsOnline() == 0)
  96.         {
  97.                 for(i = 0; i < 5; i ++)//读取40位数据
  98.                 {
  99.                         buf[i] = DHT11_ReadByte();
  100.                 }
  101.                 if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])
  102.                 {
  103.                         *humi = buf[0];
  104.                         *temp = buf[2];
  105.                 }
  106.         }
  107.         else
  108.         {
  109.                 return 1;
  110.         }
  111.        
  112.         return 0;            
  113. }

  114. void DHT11Configuration(void)
  115. {         
  116.         GPIO_InitTypeDef  MyGPIO;
  117.        
  118.         RCC_APB2PeriphClockCmd(DHTCLKLINE, ENABLE);         
  119.        
  120.         MyGPIO.GPIO_Pin = DHT_DAT_Pin;                                 
  121.         MyGPIO.GPIO_Mode = GPIO_Mode_Out_PP;                  
  122.         MyGPIO.GPIO_Speed = GPIO_Speed_50MHz;
  123.         GPIO_Init(DHTPORT, &MyGPIO);                                 
  124.         O_DHT_DAT = 1;               
  125.                             
  126.         DHT11_Reset();  //复位DHT11
  127. }
复制代码

所有资料51hei提供下载:
温湿度.7z (414.84 KB, 下载次数: 24)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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