自己写的程序,显示SHT30温湿度模块的温湿度。
既有OLED(IIC接口)屏幕的温湿度显示,也有串口数据输出。
为了作对比,我顺便把DS18B20的温度显示也写进去了,然后改下注释也可输出DS18B20温度数据。
在此感谢51hei论坛的SHT30例程,把原来有错误的地方改了,写了个完整的例程。
代码没怎么整理,不过加了必要的注释,发出来分享下成果
制作出来的实物图如下:
单片机源程序如下:
- //////////////////////////////////////////////////////////////////////////////////
- //
- // 作 者 : Fish
- // 生成日期 : 2018-12-14
- // 最近修改 :
- // 功能描述 : 0.96寸OLED显示SHD30温湿度程序。
- // 显示SHT30传感器温湿度数据,串口1也可以显示。(USART1 PA9 PA10)
- // 单片机:STM32F103ZET6 晶振:72M
- // 说明: 串口发送温湿度数据,我把DS18B20的程序也写好了,
- // 简单改改程序即可使用,默认使用SHD30传感器显示数据
- // ----------------------------------------------------------------
- // OLED屏
- // GND 电源地
- // VCC 接5V或3.3v电源
- // SCL 接PB13(SCL)
- // SDA 接PB15(SDA)
- // RES 接PB11 如果是用4针iic接口这个脚可以不接
- // SHD30温湿度传感器
- // GND 电源地
- // VCC 接5V或3.3v电源
- // SCL 接PB6(SCL)
- // SDA 接PB7(SDA)
- // DS18B20传感器
- // GND 电源地
- // VCC 接5V或3.3v电源
- // DAT 接PB6(SCL)
- // ----------------------------------------------------------------
- // 注意:部分源码参考网上及论坛代码,仅供学习交流使用 2018-12-14
- //////////////////////////////////////////////////////////////////////////////////
- #include "sys.h"
- #include "oled.h"
- #include "usart.h"
- #include "bmp.h"
- #include "sht30_dis.h"
- #include "bsp_SysTick.h"
- #include "bsp_ds18b20.h"
- extern float TemValue;
- extern float RhValue;
- char Tempbuf[100],RHbuf[100];
- int main(void)
- {
- uint8_t uc, ucDs18b20Id [8];
- u8 t;
- char Temp[50];
- SysTick_Init();
- uart_init(115200);
- NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init(); //LED端口初始化
- Delay_ms(200);
- OLED_Init(); //初始化OLED
- OLED_Clear();
- Delay_ms(200);
- OLED_DrawBMP(0,0,128,8,BMP1); //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
- Delay_ms(3000);
- OLED_Clear();
- OLED_DrawBMP(0,0,128,8,BMP2);
- t=' ';
-
- printf("\r\n this is a SHT30 test demo \r\n");
-
- // while( DS18B20_Init() )
- // printf("\r\n no ds18b20 exit \r\n");
- //
- // printf("\r\n ds18b20 exit \r\n");
- //
- //
- // DS18B20_ReadId ( ucDs18b20Id );
- //
- // printf("\r\nDS18B20 xuliehao: 0x");
- // for ( uc = 0; uc < 8; uc ++ )
- // printf ( "%.2x", ucDs18b20Id [ uc ] );
- Delay_ms(5000);
- OLED_Clear();
- while(1)
- {
- //温度显示电子时钟
- OLED_ShowCHinese(0,0,7);
- OLED_ShowCHinese(16,0,8);
- OLED_ShowCHinese(32,0,9);
- OLED_ShowCHinese(48,0,10);
- OLED_ShowCHinese(64,0,11);
- OLED_ShowCHinese(80,0,12);
- OLED_ShowCHinese(96,0,13);
- OLED_ShowCHinese(112,0,14);
-
- printf ( "\r\nDS18b20 temp: %.2f'C\r\n", DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) ); //DS18B20温度显示
- // sprintf(Temp,"Temp:%.2f'C\r\n",DS18B20_GetTemp_MatchRom ( ucDs18b20Id ));
- // OLED_ShowString(6,3,Temp,16);
- SHT_GetValue();
- printf ("%s\r\n",Tempbuf);
- printf ("%s\r\n",RHbuf);
- OLED_ShowString(6,3,Tempbuf,16);
- OLED_ShowString(6,6,RHbuf,16);
- Delay_ms(500);
- }
-
- }
-
复制代码
所有资料51hei提供下载:
Keil代码0.96OLED_STM32F103ZE_IIC.7z
(259.54 KB, 下载次数: 633)
|