OLED显示图片

前言

本文主要介绍了使用单片机如何在Oled12864上显示图片,以及相关的注意事项,若文章有不当之处,欢迎在评论区交流讨论.(又水了一篇文章~)

图像取模

打开Img2Lcd软件,然后载入目标jpg图片

按照图片上面的选项设置

  1. 输出数据类型:C语言数组
  2. 扫描模式: 数据水平,字节垂直(列行式)
  3. 输出灰度:单色(黑白)
  4. 最大宽度和高度: 128*64
    • 字节内像素数据反序

注意观察下边的输入图像尺寸和输出图像的尺寸大小,否者Oled显示乱码

我们设置好之后点击上方栏的保存,然后它会自动打开记事本,这时候我们就去复制数据

在你代码中定义同等大小的数组(当然你可以全部复制黏贴)即可.我们可以采用结构体方式,这样方便定位图像数据,如下所示.

显示图像

/**
 * @brief 在OLED上绘制位图
 *
 * 根据给定的位图参数,在指定位置绘制相应的图像。
 *
 * @param x 位图左上角的X坐标。
 * @param y 位图左上角的Y坐标。
 * @param l 位图的长度。
 * @param w 位图的宽度。
 */
void oled_draw_bmp(uint8_t x, uint8_t y, uint8_t l, uint8_t w) {
    // 计算位图每行的字节数,flag用于标记是否有剩余的不足一个字节的位
    uint8_t flag = (l % 8 == 0) ? 0 : 1;
    // 计算位图总共有多少行
    uint8_t rows = l >> 3;
    // 循环遍历每一行
    for (uint8_t row = 0; row < rows + flag; row++) {
        // 循环遍历每一列
        for (uint8_t column = 0; column < w; column++) {
            // 获取位图中相应位置的字节数据
            uint8_t bmp_byte = bmp_init.oled_ui[row * w + column];
            // 循环遍历字节中的每个位
            for (uint8_t bit = 0; bit < 8; bit++) {
                // 检查当前位是否为1,如果是则在OLED上绘制点
                if (bmp_byte & (1 << bit)) {
                    oled_draw_point(x + column, y + row * 8 + bit);//这里为你的画点函数
                }
            }
        }
    }
}

如果最后Oled屏幕显示乱码,请检查是否按照如上设置,以及输出图像的尺寸是否正确

仅供测试代码

oled_draw_bmp(0,0,64,128);

效果展示

讨论

虽然网上有很多不同的取模软件,但如果我们熟悉了解四种扫描模式,并掌握Oled屏幕的显示原理,其实都是通用的,作者本人就不在这详细介绍了T_T

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kk_阿白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值