标题: STM32+SHT30(DS18B20)+0.96寸OLED(IIC)的温度湿度显示程序 [打印本页]

作者: 1092648746    时间: 2018-12-24 21:42
标题: STM32+SHT30(DS18B20)+0.96寸OLED(IIC)的温度湿度显示程序
自己写的程序,显示SHT30温湿度模块的温湿度。
既有OLED(IIC接口)屏幕的温湿度显示,也有串口数据输出。
为了作对比,我顺便把DS18B20的温度显示也写进去了,然后改下注释也可输出DS18B20温度数据。
在此感谢51hei论坛的SHT30例程,把原来有错误的地方改了,写了个完整的例程。
代码没怎么整理,不过加了必要的注释,发出来分享下成果

制作出来的实物图如下:




单片机源程序如下:
  1. //////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  作    者   : Fish
  4. //  生成日期   : 2018-12-14
  5. //  最近修改   :
  6. //  功能描述   : 0.96寸OLED显示SHD30温湿度程序。
  7. //              显示SHT30传感器温湿度数据,串口1也可以显示。(USART1 PA9 PA10)
  8. //  单片机:STM32F103ZET6         晶振:72M
  9. //  说明: 串口发送温湿度数据,我把DS18B20的程序也写好了,
  10. //        简单改改程序即可使用,默认使用SHD30传感器显示数据
  11. //              ----------------------------------------------------------------
  12. //              OLED屏
  13. //              GND   电源地
  14. //              VCC   接5V或3.3v电源
  15. //              SCL   接PB13(SCL)
  16. //              SDA   接PB15(SDA)
  17. //              RES   接PB11 如果是用4针iic接口这个脚可以不接

  18. //              SHD30温湿度传感器
  19. //              GND   电源地
  20. //              VCC   接5V或3.3v电源
  21. //              SCL   接PB6(SCL)
  22. //              SDA   接PB7(SDA)

  23. //              DS18B20传感器
  24. //              GND   电源地
  25. //              VCC   接5V或3.3v电源
  26. //              DAT   接PB6(SCL)
  27. //              ----------------------------------------------------------------
  28. //   注意:部分源码参考网上及论坛代码,仅供学习交流使用         2018-12-14

  29. //////////////////////////////////////////////////////////////////////////////////

  30. #include "sys.h"
  31. #include "oled.h"
  32. #include "usart.h"
  33. #include "bmp.h"
  34. #include "sht30_dis.h"
  35. #include "bsp_SysTick.h"
  36. #include "bsp_ds18b20.h"

  37. extern float TemValue;
  38. extern float RhValue;
  39. char Tempbuf[100],RHbuf[100];

  40. int main(void)
  41.   {        
  42.                 uint8_t uc, ucDs18b20Id [8];               
  43.                 u8 t;
  44.                 char Temp[50];
  45.                 SysTick_Init();
  46.     uart_init(115200);         
  47.                 NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级         LED_Init();                             //LED端口初始化
  48.                 Delay_ms(200);
  49.                 OLED_Init();                        //初始化OLED  
  50.                 OLED_Clear();
  51.     Delay_ms(200);

  52.                 OLED_DrawBMP(0,0,128,8,BMP1);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
  53.                 Delay_ms(3000);
  54.           OLED_Clear();
  55.     OLED_DrawBMP(0,0,128,8,BMP2);                        
  56.                 t=' ';
  57.                
  58.   printf("\r\n this is a SHT30 test demo \r\n");
  59.         
  60. //        while( DS18B20_Init() )        
  61. //                printf("\r\n no ds18b20 exit \r\n");
  62. //        
  63. //        printf("\r\n ds18b20 exit \r\n");
  64. //        
  65. //        
  66. //        DS18B20_ReadId ( ucDs18b20Id  );           
  67. //        
  68. //        printf("\r\nDS18B20 xuliehao: 0x");

  69. //        for ( uc = 0; uc < 8; uc ++ )            
  70. //         printf ( "%.2x", ucDs18b20Id [ uc ] );
  71.         Delay_ms(5000);
  72.         OLED_Clear();
  73.         while(1)
  74.         {               
  75.                   //温度显示电子时钟
  76.             OLED_ShowCHinese(0,0,7);
  77.                   OLED_ShowCHinese(16,0,8);
  78.                   OLED_ShowCHinese(32,0,9);
  79.                   OLED_ShowCHinese(48,0,10);
  80.                   OLED_ShowCHinese(64,0,11);
  81.                   OLED_ShowCHinese(80,0,12);
  82.                   OLED_ShowCHinese(96,0,13);
  83.                   OLED_ShowCHinese(112,0,14);
  84.                
  85.                 printf ( "\r\nDS18b20 temp: %.2f'C\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) );                //DS18B20温度显示        
  86. //                sprintf(Temp,"Temp:%.2f'C\r\n",DS18B20_GetTemp_MatchRom ( ucDs18b20Id ));
  87. //                OLED_ShowString(6,3,Temp,16);
  88.                 SHT_GetValue();
  89.                 printf ("%s\r\n",Tempbuf);
  90.                 printf ("%s\r\n",RHbuf);
  91.                 OLED_ShowString(6,3,Tempbuf,16);
  92.                 OLED_ShowString(6,6,RHbuf,16);

  93.                 Delay_ms(500);

  94.         }         
  95.         
  96. }
  97.         
复制代码


所有资料51hei提供下载:
Keil代码0.96OLED_STM32F103ZE_IIC.7z (259.54 KB, 下载次数: 644)



作者: 钻牛尖滴刘尖尖    时间: 2019-3-7 11:00
很好,值得学习与探讨!
作者: 好久好久1    时间: 2019-4-6 20:12
多谢分享
作者: madmanll    时间: 2019-4-8 15:32
很不错
作者: madmanll    时间: 2019-4-8 15:32
好久好久1 发表于 2019-4-6 20:12
多谢分享

多谢分享
作者: nb1123    时间: 2019-4-10 12:07
感谢分享
作者: liumeizhoufind7    时间: 2019-4-14 00:42
很好 东西不错
作者: ymcdzh12    时间: 2019-5-2 09:03
需要看下。。。。
作者: 苦心人    时间: 2019-5-3 23:08
多谢分享
作者: 15808190021    时间: 2019-5-6 14:59
学习学习,谢谢楼主
作者: 18235197143    时间: 2019-10-11 15:54
我用这个程序出不来第二张图是为什么?一直卡在第一张图
作者: kantcao126    时间: 2020-2-5 16:29
好贴,感谢分享,想拿来测试一下是否可以使用
作者: guzzjh    时间: 2020-4-8 16:14
Keil uVision4打不开
作者: Alfred123    时间: 2020-4-17 01:43
谢谢楼主分享 受教了
作者: wifingtta    时间: 2020-4-26 22:00
很好的程序,直接运行完全不用改。
感谢楼主!
作者: yy800119    时间: 2020-4-27 16:19
不错的资料,有空试试
作者: zyy1100    时间: 2020-5-14 10:44
wifingtta 发表于 2020-4-26 22:00
很好的程序,直接运行完全不用改。
感谢楼主!

里面只是程序吗,带仿真吗?
作者: rsdml1    时间: 2020-5-15 09:28
正在学习,谢谢分享
作者: rsdml1    时间: 2020-5-15 09:35
很好的软件设计,谢谢分享!
作者: rsdml1    时间: 2020-5-15 14:51
大神,代码中 sht30_dis_init( ) 初始化函数在哪调用的?是否工程不完整?我移植到STM32F407上读不到数据!
作者: caiji1    时间: 2020-6-20 15:53
只有DS18B20也可以吧
作者: 闲云野鹤啊    时间: 2020-7-4 11:05
不错,代码有点乱
作者: 王者小黑子    时间: 2022-11-15 17:39
楼主为啥我这点三个画面没有显示数据,你的最终数据保存在哪里呀
作者: tanzhi    时间: 2022-11-23 17:33
很好,值得学习与探讨!
作者: afasga    时间: 2023-4-10 21:09
为什么F10x.h编译缺少“}”




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