如何使用OLED显示图片

以下文章来源于:公_众_号开源电子网
读取更多技术文章,请扫码关注
在这里插入图片描述

如何使用OLED显示图片

前言
这篇文章不过多描述OLED工作原理及驱动过程,仅从实用性出发,如何使用OLED显示图片。这里我们以正点原子战舰板OLED实验例程为基础。

使用OLED显示图片分为两步:
1.图像取模
2.编写oled显示图片函数

一、图像取模

图片格式转换,将图片转化为单色,并且对单色图片进行取模。
①首先准备好要操作的图片,然后使用Image2Lcd软件进行格式转换,输出数据类型为BMP格式,并且尺寸大小转换为128*64,具体操作如下图所示:
在这里插入图片描述

②BMP单色图片进行取模,获取图形数据,具体操作如下:
在这里插入图片描述

③在工程某个文件中定义一个数组接收图形数据数组,如下图所示:
在这里插入图片描述

(注意:我们已经知道图片尺寸是64*64 即数组的大小得需要512字节大小(64 * 8 byte))

二、编写oled显示图片函数

/**
 * @brief       OLED显示图片
 * @param       x  : 0~127
 * @param       y  : 0~63
 * @param       width  : 0~127
 * @param       height  : 0~63
 * @param       *pic  : 图片的起始地址
 * @param       mode: 1 正常显示 0,反向显示
 * @retval      无
 */
void oled_show_picture(uint8_t x, uint8_t y, uint8_t width, uint8_t height, const uint8_t *pic, uint8_t mode)
{
    uint8_t temp, j;
    uint8_t y0 = y;
    uint8_t *g_pic = NULL;
    uint16_t i, psize = 0;

    /* 获取该图片的总字节数 */
    psize = (height / 8 + ((height % 8) ? 1 : 0)) * width;  

    /* 超出范围 直接返回 */
    if ((x + width > 128) || (y + height > 64))  return;    

    g_pic = (uint8_t *)pic;

    for (i = 0; i < psize; i++)
    {
        temp = g_pic[i];

        for (j = 0; j < 8; j++) /* 对一个字节中的8个位数据进行判断 */
        {
            if (temp & 0x80)    /* 高位存放的是低坐标 */
            {
                OLED_DrawPoint(x, y, mode);
            }
            else
            {
                oled_DrawPoint(x, y, !mode);
            }

            temp <<= 1;
            y++;

            if ((y - y0) == height) /* 一列数据已经处理完毕 */
            {
                y = y0;
                x++;
                break;
            }
        }

    }
}

显示图片函数,思路参照显示字符函数:按照从上到下(先y++),从左到右(再x++)的取模方式来编写,先得到最高位,然后判断是写1还是0,进行画点;接着读第二位,如此循环,直到数组数据全部读取完成。这里涉及到里地址和行地址的自增,根据取模方式来理解,就不难了。
下载运行,最终的效果如下图所示:
网上很火的使用OLED播放bad_apple或者太空人都是将视频转为一帧帧图像进行快速播放进行实现,有兴趣的小伙伴可以尝试实现一下。
OLED还有支持一些硬件滚动效果,大家感兴趣的话,可以留言点赞,可以多写一些关于OLED屏幕的推文。
以上用到的软件以及工程源码大家可以通过网盘链接进行下载。

复制链接,打开浏览器下载工程文件。

链接:https://pan.baidu.com/s/1L8V1ehuh_rJRyoR_FV5b5A
提取码:dnbu

  • 10
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值