自己移植的U8g2库,OLED库超好用,自己封装了用户层不需要再去查资料使用,注释写的很多很详细,有示例上手就会,初始化也很简单
超简单的stm32 U8g2移植
大家可以自己去官网移植,也可以用我的 U8G2官网
简单的波形生成和显示程序:
cpp
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include "../../WU/OLED_U8g2/U8g2/WU_U8g2_Init.h"
#include "USER_OLED.h"
#include "../../WU/OLED_U8g2/U8g2/u8g2.h"
// 定义屏幕的宽度和高度
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// 定义波形参数
#define WAVE_AMPLITUDE 20 // 波形的振幅
#define WAVE_FREQUENCY 0.2 // 波形的频率(加快频率)
// 初始化波形数据
void InitWave(void) {
// 无需初始化,因为每次都会重新计算正弦波
}
// 更新波形数据(生成正弦波)
void UpdateWave(uint8_t *waveData, float time) {
for (int i = 0; i < SCREEN_WIDTH; i++) {
// 计算正弦波的值,并将其映射到屏幕范围内
float value = WAVE_AMPLITUDE * sin(WAVE_FREQUENCY * (i + time));
waveData[i] = SCREEN_HEIGHT / 2 + (uint8_t)value;
}
}
// 绘制波形
void DrawWave(uint8_t *waveData) {
// 清空屏幕
WU_OLED_U8G2_ClearBuffer();
// 绘制波形
for (int i = 0; i < SCREEN_WIDTH; i++) {
// 确保波形在屏幕范围内
if (waveData[i] < SCREEN_HEIGHT) {
WU_OLED_U8G2_DrawPixel(i, waveData[i]);
}
}
// 刷新发送缓冲区
WU_OLED_U8G2_SendBuffer();
}
// 主函数
int main(void) {
uint8_t waveData[SCREEN_WIDTH]; // 存储每个像素点的Y坐标
float time = 0; // 时间变量,用于生成动态波形
// 初始化OLED
WU_OLED_U8G2_Init();
// 主循环
while (1) {
// 更新波形数据
UpdateWave(waveData, time);
// 绘制波形
DrawWave(waveData);
// 更新时间(加快波形移动速度)
time += 1.0;
// 延时一段时间,控制波形刷新速度(减少延时时间)
// 这里假设有一个延时函数 delay_ms
//delay_ms(20); // 将延时时间从50ms减少到20ms
}
return 0;
}