首页 > 其他分享 >U8G2库使用案例(stm32)

U8G2库使用案例(stm32)

时间:2025-01-02 22:26:12浏览次数:8  
标签:U8G2 U8g2 波形 WU stm32 案例 OLED waveData

U8G2官网:

自己移植的U8g2库,OLED库超好用,自己封装了用户层不需要再去查资料使用,注释写的很多很详细,有示例上手就会,初始化也很简单

个人移植的U8g2库:

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="wX9IkQrG-1735825342740" src="https://player.bilibili.com/player.html?aid=113566183065920"></iframe>

超简单的stm32 U8g2移植

  大家可以自己去官网移植,也可以用我的         U8G2官网

 简单的波形生成和显示程序:

#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;
}

标签:U8G2,U8g2,波形,WU,stm32,案例,OLED,waveData
From: https://blog.csdn.net/WU1707640034/article/details/144895423

相关文章

  • STM32学习之通信协议2: I2C
    I2C(Inter-IntegratedCircuit)一种串行数字总线接口,只有两根信号线,总线上可以连接多个设备,硬件实现简单,可拓展性强SCL串行时钟线:在I2C通信中由主设备(如微控制器或处理器)产生,用于同步数据传输,确定数据传输的速率和时序,确保所有设备在SCL上保持同步,从而正确地进行数......
  • 【stable diffusion教程】AI绘画最强SD(Stable Diffusion)玩法实操教学案例及商业变现项
    前言AI绘画现在越来越火爆了,很多人无论大人小孩都在玩,还有的很多电商老板也在使用辅助生成产品主图和详情页,可以说是非常的实用。而其中最让人追捧和好评的就是SD(StableDiffusion)这款AI绘图软件了,StableDiffusion是一款基于深度学习的图像生成工具,它可以根据文本描述生成......
  • RoboMaster电控 STM32开发环境搭建
     STM32介绍 开发方式介绍 CPU工作频率可以达到168MHz,基本可以满足比赛中所有的控制需求。stm32的主流开发方式包括寄存器开发,标准库开发,HAL库(LL库)开发。寄存器开发即直接控制32的寄存器,工程运行效率高,但是开发难度大,可读性与可移植性差;标准库开发即使用ST官方开源的一......
  • 人工智能知识分享第五天-正则化.损失函数案例
    正则化欠拟合与过拟合过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在测试数据集上却不能很好地拟合数据(体现在准确率下降),此时认为这个假设出现了过拟合的现象。(模型过于复杂)欠拟合:一个假设在训练数据上不能获得更好的拟合,并且在测试数据集上也不......
  • 单片机学习————STM32单片机入门(五)
    5.3.6外部时钟源特性来自外部振荡源产生的高速外部用户时钟下表中给出的特性参数是使用一个高速的外部时钟源测得,环境温度和供电电压符合表9的条件。 1.由设计保证,不在生产中测试。来自外部振荡源产生的低速外部用户时钟下表中给出的特性参数是使用一个低速的外部时钟......
  • 基于STM32的智能照明系统设计(论文+源码)
    1系统方案设计根据系统功能的设计要求,展开基于STM32的智能照明系统设计。如图2.1所示为系统总体设计框图。系统以STM32单片机作为主控制器,利用光敏传感器、红外传感器实现环境光照强度以及人体检测。只有当检测到环境中有人且光照强度低于阈值时,点亮LED灯进行补光照明。系统具......
  • STM32学习之 TIM定时器
    理论知识较多,由于51学过相关知识,不赘述,江协科技视频有详细解读,CSDN博主也有详细文案笔记,视频跳转、文案跳转//STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长......
  • 小程序组件 —— 23 组件案例 - 轮播图图片添加
    上一节实现了轮播图的最外层结构,但是没有通过轮播图来渲染图片,这一节我们先讲一下小程序中怎么来渲染图片,讲解完之后会通过轮播图来展示图片;在微信小程序中,如果需要渲染图片,需要使用image组件,常用的属性有4个:src属性:图片资源地址;mode:图片裁剪、缩放的模式;show-menu-b......
  • 小程序组件 —— 22 组件案例 - 轮播区域绘制
    这一节我们实现轮播图最外层的盒子,也就是把轮播图的最外层搭好,先不给轮播图添加图片,因为图片属于新的组件,组件里面有一些知识点,需要单独分开讲;回顾一下,在进行传统网页开发时,实现轮播图的时候,我们首先使用html、css实现轮播图的结构样式,然后使用JS控制轮播图的效果,或者......
  • 单片机学习————STM32单片机入门(七)
    5.3.12I/O端口特性通用输入/输出特性除非特别说明,下表列出的参数是按照表9的条件测量得到。所有的I/O端口都是兼容CMOS和TTL。 1.FT=5V容忍。2.施密特触发器开关电平的迟滞电压。由综合评估得出,不在生产中测试。3.至少100mV。4.如果在相邻引脚有反向电流倒灌,则漏......