OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8189|回复: 1

如何使用OLED显示图片!

[复制链接]

1118

主题

1129

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4671
金钱
4671
注册时间
2019-5-8
在线时间
1224 小时
发表于 2021-11-2 17:04:40 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2021-11-2 16:46 编辑

以下文章摘自微信公众号——开源电子网《如何使用OLED显示图片 》
更多技术文章,请扫下方二维码关注

开源电子网,扫码2222222.png




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

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

一、图像取模
图片格式转换,将图片转化为单色,并且对单色图片进行取模。
①首先准备好要操作的图片,然后使用Image2Lcd软件进行格式转换,输出数据类型为BMP格式,并且尺寸大小转换为128*64,具体操作如下图所示:
OLED如何显示图片229.png
②BMP单色图片进行取模,获取图形数据,具体操作如下:
OLED如何显示图片258.png
③在工程某个文件中定义一个数组接收图形数据数组,如下图所示:
OLED如何显示图片290.png
(注意:我们已经知道图片尺寸是64*64 即数组的大小得需要512字节大小(64 * 8 byte))

二、编写oled显示图片函数
  1. /**
  2. * @brief       OLED显示图片
  3. * [url=home.php?mod=space&uid=271674]@param[/url]       x  : 0~127
  4. * @param       y  : 0~63
  5. * @param       width  : 0~127
  6. * @param       height  : 0~63
  7. * @param       *pic  : 图片的起始地址
  8. * @param       mode: 1 正常显示 0,反向显示
  9. * @retval      无
  10. */
  11. void oled_show_picture(uint8_t x, uint8_t y, uint8_t width, uint8_t height, const uint8_t *pic, uint8_t mode)
  12. {
  13.     uint8_t temp, j;
  14.     uint8_t y0 = y;
  15.     uint8_t *g_pic = NULL;
  16.     uint16_t i, psize = 0;

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

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

  21.     g_pic = (uint8_t *)pic;

  22.     for (i = 0; i < psize; i++)
  23.     {
  24.         temp = g_pic<i>;

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

  35.             temp <<= 1;
  36.             y++;

  37.             if ((y - y0) == height) /* 一列数据已经处理完毕 */
  38.             {
  39.                 y = y0;
  40.                 x++;
  41.                 break;
  42.             }
  43.         }

  44.     }
  45. }</i>
复制代码

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

复制链接,打开浏览器下载工程文件。
链接:https://pan.baidu.com/s/1L8V1ehuh_rJRyoR_FV5b5A
提取码:dnbu
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2022-3-13
在线时间
12 小时
发表于 2022-5-2 23:37:49 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 12:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表