标题: 基于STM32F411CEU6的sht20温湿度检测程序,在OLED屏上显示 [打印本页]

作者: 黄思远    时间: 2019-4-11 11:11
标题: 基于STM32F411CEU6的sht20温湿度检测程序,在OLED屏上显示
主控芯片是STM32F411CEU6,附件包含有1.3寸OLED屏和SHT20温湿度传感器资料,还有STM32F4XX参考手册,原理图只用到了部分元器件。我还用Word写了个编程步骤用作参考。

  1. //以下是sht20.c文件内容
复制代码
  1. #include "sht20.h"

  2. float Humidity,Temperature;
  3. TempHumiValue_t temp_humi_Value;
  4.   /*******************************************************************************
  5. * 函数名:SHT20_writeOneByte
  6. * 功能描述:写一个字节
  7. * 作者:Jahol Fan  
  8. * 参数说明:  写一个字节的数据
  9. * 返回值说明:返回的是应答信号
  10. * 修改记录:
  11. *******************************************************************************/
  12. static u8 SHT20_writeOneByte(u8 dataToWrite)
  13. {
  14.     u8 ack;
  15.     IIC_Send_Byte(dataToWrite);
  16.     ack=IIC_Wait_Ack();
  17.     return ack;
  18. }

  19. /*******************************************************************************
  20. * 函数名:SHT20_softReset
  21. * 功能描述:SHT20软件复位,主函数中调用
  22. * 作者:Jahol Fan  
  23. * 参数说明:  
  24. * 返回值说明:
  25. * 修改记录:
  26. *******************************************************************************/
  27. void SHT20_softReset(void)
  28. {
  29.     IIC_Start();
  30.     SHT20_writeOneByte(SHT20_adder&0xfe);
  31.     SHT20_writeOneByte(0xfe);
  32.     IIC_Stop();
  33. }

  34. /*******************************************************************************
  35. * 函数名:SHT20_Init
  36. * 功能描述:初始化iic总线
  37. * 作者:Jahol Fan  
  38. * 参数说明:  
  39. * 返回值说明:成功返回测量的结果,失败返回 1
  40. * 修改记录:
  41. *******************************************************************************/
  42. void SHT20_Init(void)
  43. {
  44.     IIC_Init();
  45.     SHT20_softReset();
  46. }

  47. /*******************************************************************************
  48. * 函数名:SHT20_readOneByte
  49. * 功能描述:读一个字节
  50. * 作者:Jahol Fan  
  51. * 参数说明:  
  52. * 返回值说明:
  53. * 修改记录:
  54. *******************************************************************************/
  55. u8 SHT20_readOneByte(u8 ack)
  56. {
  57.     u8 temp;
  58.     temp=IIC_Read_OneByte();
  59.     iic_put_ack(ack);
  60.     return temp;
  61. }

  62. /*******************************************************************************
  63. * 函数名:SHT20_setResolution
  64. * 功能描述:写寄存器,设置帧率
  65. * 作者:Jahol Fan  
  66. * 参数说明:  
  67. * 返回值说明:
  68. * 修改记录:
  69. *******************************************************************************/
  70. static void SHT20_setResolution(void)
  71. {
  72.     IIC_Start();
  73.     if(SHT20_writeOneByte(SHT20_adder&0xfe)==ACK)
  74.     {
  75.         if(SHT20_writeOneByte(0xe6)==ACK)
  76.         {
  77.             if(SHT20_writeOneByte(0x83)==ACK);
  78.         }
  79.     }
  80.     IIC_Stop();         
  81. }

  82. /*******************************************************************************
  83. * 函数名:SHT20_readTemOrHum
  84. * 功能描述:读取SHT20的温度或读取湿度测量值  
  85. * 作者:Jahol Fan  
  86. * 参数说明:  
  87. * 返回值说明:成功返回测量的结果,失败返回 1
  88. * 修改记录:
  89. *******************************************************************************/
  90. float SHT20_readTemOrHum(u8 commod)
  91. {
  92.     float temp;
  93.     u8 ack=1;
  94.     u8 MSB,LSB;
  95.     float Humidity,Temperature;
  96.     SHT20_setResolution();
  97.     IIC_Start();
  98.     ack=SHT20_writeOneByte(SHT20_adder&0xfe);
  99.     if(ack == ACK)                      //写地址,并等待ACK
  100.     {
  101.         if(SHT20_writeOneByte(commod)==ACK)
  102.         {
  103.             do{
  104.                 delay_ms(6);
  105.                 IIC_Start();
  106.             }while(SHT20_writeOneByte(SHT20_adder|0x01)==NACK);

  107.             MSB = SHT20_readOneByte(ACK);//读Data(MSB),给应答
  108.             LSB = SHT20_readOneByte(ACK);//读Data(MSB),给应答
  109.             SHT20_readOneByte(NACK);
  110.             IIC_Stop();
  111.             LSB &= 0xfc;
  112.             temp=MSB*256+LSB;
  113.             if(commod==((u8)Hum_Comd))
  114.             {
  115.                 Humidity=(temp*125)/65536-6;
  116.                 return Humidity;
  117.             }
  118.             else if(commod==((u8)Tem_Comd))
  119.             {
  120.                 Temperature=(temp*175.72f)/65536-46.85f;
  121.                 return Temperature;
  122.             }
  123.         }
  124.     }
  125.     return FAIL;
  126. }

  127. /*******************************************************************************
  128. * 函数名:SHT20_readTemAndHum
  129. * 功能描述:读取SHT20的温度和湿度测量值  
  130. * 作者:Jahol Fan  
  131. * 参数说明:  
  132. * 返回值说明:成功返回测量的结果,失败返回 1
  133. * 修改记录:
  134. *******************************************************************************/
  135. TempHumiValue_t * SHT20_readTemAndHum(void)
  136. {
  137.         temp_humi_Value.humidity = SHT20_readTemOrHum(Hum_Comd);//读取湿度
  138.         temp_humi_Value.temperature = SHT20_readTemOrHum(Tem_Comd);//读取温度
  139.         return &temp_humi_Value;
  140. }
复制代码

全部资料51hei下载地址:
代码: STM32F4_OLED_SHT20.7z (450.16 KB, 下载次数: 270)
pdf资料: 温湿度检测所有资料.7z (15.97 MB, 下载次数: 228)

作者: xcAxZxxzxczxczc    时间: 2019-5-6 19:11
好资料,51黑有你更精彩!!!
作者: 就想学好单片机    时间: 2019-5-11 11:13
很棒,可以学习
作者: 木东    时间: 2019-5-11 17:56

很棒
作者: 312923971    时间: 2019-10-22 17:31
谢谢分享
作者: welzyk    时间: 2019-12-20 11:57
顶!!!
作者: 冬暖不等夏凉    时间: 2020-2-22 21:39
很棒,值得下载
作者: zed115368    时间: 2020-5-8 17:34
怎么没有测试代码
作者: 9187640908    时间: 2020-6-8 22:13
厉害啊写寄存器

作者: 371015220    时间: 2021-4-14 00:10
温度读取的速度比湿度慢很多,不是很灵敏。并且温度小数都是3或者7的往上升或下降,都没有其它小数了
作者: 黄啾啾    时间: 2022-3-18 16:00

好资料,51黑有你更精彩!!!
作者: fen913oxuan    时间: 2022-10-17 17:22
很棒,值得下载
作者: 小白艾世雄    时间: 2022-10-25 14:13
好资料!收藏了慢慢看。
作者: MirrAKe    时间: 2023-2-9 00:54
我读温度的时候,LSB经常就是0xFF,这正常吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1