自己寫的程序,顯示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, 下載次數: 644)
2023-4-14 22:24 上傳
點擊文件名下載附件
|