STM32F103实验板,用KEIL5编码实现:利用温度和亮度传感器传回LED1、LED2基本亮灭情况、将灯光信息显示在OLED屏幕上,使用标准库函数,请给出具体实现代码
时间: 2024-03-24 20:40:04 浏览: 81
好的,下面是具体的实现代码,包括初始化各个模块、读取温度和亮度传感器数据、控制LED灯亮灭、在OLED屏幕上显示灯光信息等功能。
```c
#include "stm32f10x.h"
#include "delay.h"
#include "i2c.h"
#include "oled.h"
#include "adc.h"
#include "gpio.h"
int main(void)
{
// 初始化各个模块
I2C_Init();
OLED_Init();
ADC_Init();
GPIO_Init();
while (1)
{
// 读取温度和亮度传感器数据并转换为实际值
uint16_t temp_raw = ADC_Read(ADC_Channel_16);
uint16_t light_raw = ADC_Read(ADC_Channel_17);
float temp = (temp_raw * 3.3f / 4096.0f - 0.76f) / 0.0025f + 25.0f;
float light = light_raw * 3.3f / 4096.0f;
// 控制LED灯亮灭
if (temp > 30.0f)
GPIO_SetPin(GPIOB, GPIO_Pin_12);
else
GPIO_ResetPin(GPIOB, GPIO_Pin_12);
if (light < 1.0f)
GPIO_SetPin(GPIOB, GPIO_Pin_13);
else
GPIO_ResetPin(GPIOB, GPIO_Pin_13);
// 在OLED屏幕上显示灯光信息
OLED_Clear();
OLED_ShowString(0, 0, "LED1:");
if (GPIO_ReadPin(GPIOB, GPIO_Pin_12))
OLED_ShowString(48, 0, "ON");
else
OLED_ShowString(48, 0, "OFF");
OLED_ShowString(0, 1, "LED2:");
if (GPIO_ReadPin(GPIOB, GPIO_Pin_13))
OLED_ShowString(48, 1, "ON");
else
OLED_ShowString(48, 1, "OFF");
OLED_ShowString(0, 2, "Temp:");
OLED_ShowFloat(48, 2, temp, 1);
OLED_ShowChar(72, 2, 'C');
OLED_ShowString(0, 3, "Light:");
OLED_ShowFloat(48, 3, light, 2);
OLED_ShowChar(72, 3, 'V');
// 延时一段时间
Delay_ms(1000);
}
}
```
需要注意的是,这段代码中使用了一些自定义的库函数,如`Delay_ms`、`I2C_Init`、`OLED_Init`、`ADC_Init`、`GPIO_Init`、`ADC_Read`、`GPIO_SetPin`、`GPIO_ResetPin`、`GPIO_ReadPin`、`OLED_Clear`、`OLED_ShowString`和`OLED_ShowFloat`等。这些库函数的实现可以参考相应的库文件。
阅读全文