STM32测温 oled 按键
时间: 2025-03-03 17:31:25 浏览: 55
### STM32 单片机使用 OLED 显示屏和按键实现温度测量
#### 项目概述
本项目旨在利用 STM32 微控制器、OLED 显示屏和按键来完成温度测量功能。STM32 将通过 ADC 获取来自温度传感器的数据,并将其显示在 OLED 屏幕上。用户可以通过按键切换不同的操作模式或查看其他信息。
#### 硬件配置
- **MCU**: STM32F103C8T6 或者类似的型号
- **显示器**: SSD1306 I2C 接口的 0.96 英寸 OLED 屏幕
- **温度传感器**: DS18B20 数字温度计或者其他兼容设备
#### 软件环境搭建
为了简化开发过程并提高效率,在 Keil MDK 中创建一个新的工程文件夹,并导入必要的库函数和支持包:
```c
// main.c 文件头部包含部分
#include "stm32f1xx_hal.h"
#include "ssd1306.h" // 添加oled驱动头文件
#include "ds18b20.h" // 如果选用的是DS18B20则需加入此行
```
初始化硬件资源如下所示:
```c
void SystemClock_Config(void);
static void MX_GPIO_Init(void); // 初始化GPIO端口
static void MX_I2C1_Init(void); // 初始化IIC通信总线
static void MX_ADC1_Init(void); // 配置ADC通道采集外部信号
int main(void){
HAL_Init();
SystemClock_Config(); // 设置系统时钟频率
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
MX_ADC1_Init();
ssd1306_Init(SSD1306_SWITCHCAPVCC,SSD1306_I2C_ADDRESS); // 初始化屏幕对象
}
```
编写读取温度数据的方法:
```c
float readTemperature(){
float temperature;
ds18b20_StartConvertion(DS18B20_PIN); // 开始一次新的转换周期
while(!ds18b20_IsConversionComplete(DS18B20_PIN)); // 等待直到转换结束
temperature = ds18b20_ReadTemp(DS18B20_PIN); // 获取当前温度值
return temperature; // 返回浮点型的结果
}
```
更新 OLED 上的内容以反映最新的温度读数:
```c
void updateDisplay(float tempValue){
char buffer[20];
sprintf(buffer,"Temp:%.2f C",tempValue);
ssd1306_ClearScreen(); // 清除旧的信息
ssd1306_SetCursor(0,0); // 定义光标的起始位置
ssd1306_WriteString(buffer,Font_7x10,White); // 输出字符串到指定坐标处
ssd1306_UpdateScreen(); // 刷新整个画面缓冲区中的图像
}
```
最后,在 `main` 函数内循环调用上述两个方法来进行持续性的监测工作:
```c
while (1) {
static uint8_t buttonPressedFlag=0;
if(HAL_GPIO_ReadPin(KEY_BUTTON_PORT,KEY_BUTTON_PIN)==RESET && !buttonPressedFlag){
buttonPressedFlag=1;
float currentTemp=readTemperature(); // 执行实际的温度检测流程
updateDisplay(currentTemp); // 更新显示屏上的数据显示
HAL_Delay(500); // 延迟一段时间防止抖动误触
}else{
if(buttonPressedFlag==1&&HAL_GPIO_ReadPin(KEY_BUTTON_PORT,KEY_BUTTON_PIN)!=RESET){
buttonPressedFlag=0;
}
}
HAL_Delay(1000); // 每秒刷新一次界面
}
```
以上就是基于 STM32 的简单温度监控系统的完整代码框架[^2]。
阅读全文
相关推荐



















