oled显示浮点数 stm32f103
时间: 2023-07-27 14:06:08 浏览: 448
在STM32F103微控制器上,可以通过以下步骤来在OLED上显示浮点数:
1. 引入必要的库文件,如STM32F1xx_HAL_Driver和SSD1306 OLED库。
2. 初始化OLED屏幕和I2C通信。
3. 定义要显示的浮点数并将其转换为字符串。
4. 在OLED屏幕上输出字符串。
以下是示例代码:
```
#include "stm32f1xx_hal.h"
#include "ssd1306.h"
float num = 3.14159;
char str[10];
int main(void)
{
// 初始化OLED屏幕和I2C通信
SSD1306_Init();
// 将浮点数转换为字符串
sprintf(str, "%.2f", num);
// 在OLED屏幕上输出字符串
SSD1306_GotoXY(0, 0);
SSD1306_Puts(str, &Font_7x10, 1);
SSD1306_UpdateScreen();
while (1)
{
// 程序循环
}
}
```
这段代码将在OLED屏幕上显示浮点数3.14。你可以根据需要更改num的值和sprintf函数的格式化字符串,以显示不同的浮点数。
相关问题
stm32f103c8t6读取dht11OLED显示
STM32F103C8T6是一款基于Cortex-M3内核的微控制器,常用于嵌入式系统中,DHT11是一种温湿度传感器,而OLED则是一个可以显示文本、图形的小型电子屏幕。要在这个平台上读取DHT11的数据并在OLED上显示,你需要遵循以下步骤:
1. **硬件连接**:
- 将DHT11的VCC连接到STM32的3.3V电源,DOUT连接到GPIO引脚(通常使用PA0或者PB4),DATA线连接到另一个GPIO引脚(例如PA1或者PB5)。
- OLED需要连接到STM32的SPI接口,通常选择PD12-PD15作为数据线(SCK/MISO/MOSI)、PD11作为CS(Chip Select)线以及PD8/PD9作为电压参考。
2. **软件配置**:
- 首先,需要初始化GPIO和SPI模块。对于GPIO,设置好输入输出模式,比如将DHT11的信号线设为输入;对于SPI,开启并配置相应的频率。
- 安装驱动程序库以支持DHT11传感器(如Adafruit_DHT库)和OLED显示(如SSD1306库)。
3. **读取DHT11数据**:
- 调用库函数读取DHT11传感器的数据,函数通常会返回温度和湿度的值。
4. **处理数据**:
- 解析从DHT11获取的数值,可能需要进行浮点数转换。
5. **显示在OLED上**:
- 渲染数据到字符串格式,包括温度和湿度,并使用OLED库将它们写到屏幕上。你可以选择特定的行和列来显示信息。
6. **循环执行**:
- 设置一个定时任务定期(比如每秒)读取并更新显示数据,保持实时更新。
STM32F103VCT编写程序,在串口助手中输入电压值,OLED屏幕上显示相应电压
这里提供一个简单的程序框架,可以根据具体需要进行修改。
首先,需要初始化串口和OLED屏幕,以及ADC模块。假设使用的是USART1,OLED屏幕使用的是I2C接口,ADC模块使用的是PA0通道:
```c
#include "stm32f10x.h"
#include "stdio.h"
#include "oled.h"
void USART1_Init(void);
void ADC1_Init(void);
int main(void)
{
float voltage = 0.0;
char buffer[32] = {0};
USART1_Init();
OLED_Init();
ADC1_Init();
while(1)
{
// 读取ADC采样值并计算电压值
uint16_t adc_value = ADC_GetConversionValue(ADC1);
voltage = adc_value * 3.3 / 4096.0;
// 将电压值转换为字符串并发送到串口
sprintf(buffer, "Voltage: %.2fV\r\n", voltage);
USART_SendString(USART1, buffer);
// 在OLED屏幕上显示电压值
OLED_Clear();
OLED_ShowString(0, 0, "Voltage:");
OLED_ShowFloat(64, 0, voltage, 2);
OLED_ShowString(96, 0, "V");
OLED_Refresh();
// 延时一段时间
Delay_ms(500);
}
}
void USART1_Init(void)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void ADC1_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
void Delay_ms(uint32_t ms)
{
uint32_t i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 7200; j++);
}
```
在上面的程序中,使用了一个自定义函数USART_SendString()用于向串口发送字符串,以及一个自定义函数OLED_ShowFloat()用于在OLED屏幕上显示浮点数。这两个函数的具体实现可以根据实际情况进行修改。
此外,程序中还使用了一个简单的延时函数Delay_ms()来控制程序的运行速度。如果需要更精确的延时,可以使用定时器或者操作系统提供的延时函数。
阅读全文