STM32+SHT30(DS18B20)+0.96寸OLED(IIC)的温度湿度显示程序
2020-08-12 来源:51hei
自己写的程序,显示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('rn this is a SHT30 test demo rn');
// while( DS18B20_Init() )
// printf('rn no ds18b20 exit rn');
//
// printf('rn ds18b20 exit rn');
//
//
// DS18B20_ReadId ( ucDs18b20Id );
//
// printf('rnDS18B20 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 ( 'rnDS18b20 temp: %.2f'Crn', DS18B20_GetTemp_MatchRom ( ucDs18b20Id ) ); //DS18B20温度显示
// sprintf(Temp,'Temp:%.2f'Crn',DS18B20_GetTemp_MatchRom ( ucDs18b20Id ));
// OLED_ShowString(6,3,Temp,16);
SHT_GetValue();
printf ('%srn',Tempbuf);
printf ('%srn',RHbuf);
OLED_ShowString(6,3,Tempbuf,16);
OLED_ShowString(6,6,RHbuf,16);
Delay_ms(500);
}
}