以下文章来源于:公_众_号开源电子网
读取更多技术文章,请扫码关注

如何使用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

如何使用OLED显示图片相关推荐

  1. 利用51单片机+0.96寸iic接口oled显示图片或动图

    利用51单片机+0.96寸iic接口oled显示图片或动图 前言:之前讲过如何使用oled显示数字以及字符,但并未讲述如何显示BMP格式的图片, 这篇将在之前的基础上加以封装一些函数用来显示图片 硬件 ...

  2. 0.96寸OLED显示 图片

    今天来讲解一下STM32驱动OLED显示图片,本次教程分为两部分: 1.BMP图片制作 2.程序讲解与调用 1.BMP图片制作(取模) BMP图片取模讲解两种方式:自己画图.普通图片制作. 1)自己画 ...

  3. C51——oled显示图片(128x64,图片可自己创建)

    oled显示图片,128x64(图片可自己创建) #include "reg52.h" #include "intrins.h"sbit SCL=P0^1; s ...

  4. stm32单片机OLED显示图片 位图转换 Image2Lcd使用

    在OLED或其他单色屏上显示图片,为减小Flash占用,需要转换为单色的位图. 对于主控是sdd1306的oled的取模方式: 打开Image2Lcd. 按照如图左侧进行配置,将图片转换为 128x6 ...

  5. 【Image2Lcd与PCtoLCD2002】实现stm32 上 接oled 显示图片

    文章目录 前言 先上效果图 一.oled?转成想要的分辨率 二.Image2Lcd(破解版) 三.PCtoLCD2002(完美版) 四.oled代码 OLED.c OLED.h OLED_Front. ...

  6. 0.96寸OLED显示图片

    先看效果 因为之前在项目中OLED一般只显示字符,今天闲来无事了解了一下取模功能,话不多说,直接开始教学. 首先寻找一张你想显示的图片 使用画图打开(重新调整大小,128乘以64) 接着保存,注意是以 ...

  7. OLED显示图片的技能,你Get了吗?

    大家好,我是程序员小哈. 我们经常能看到利用OLED来显示一些图案,那这些图片素材是怎么实现的呢?今天我们就来分享一下相关内容. 实现目标 修改原Demo工程的主芯片为STM32F103RET6 按实 ...

  8. STM32F103xx OLED旋转显示图片

    STM32F103xx OLED旋转显示图片 编译器平台及例程说明 编译器说明 例程说明 一.图片旋转显示样式 二.图片旋转显示原理简述 三.两种不同的取模方式 第一种取模方式 第二种取模方式 四.不 ...

  9. 0.96寸OLED显示汉字,数字,英文,图片,GIF动画+取模软件使用+代码解析

    前言 本次我们学习一下STM32F103关于OLED显示汉字,数字,英文,图片,GIF动画,和介绍各种取模软件的使用,主要教会大家使用和修改OLED驱动的代码,对汉字大小,图片分辨率进行代码修改并显示 ...

最新文章

  1. 自然语言处理(NLP)之gensim中的TF-IDF的计算方法
  2. 布道微服务_07服务调用追踪
  3. the data structure i like
  4. 64位下搭载汇编环境
  5. 快速切换目录软件推荐——autojump
  6. Since WWDC released the first developer
  7. vue中computed与watch的区别
  8. python导入dat数据_收好Python代码,导入项目数据不费力
  9. 蓝屏之死---stop:0X000000c5(0x000000c4等系列)---Mr.Zhang
  10. object c中的多态
  11. 【HTML5】Web前端——制作 3D 旋转魔方相册
  12. python numpy 子数组_详解:Python 取numpy数组的某几行某几列方法(含对与错示例)...
  13. 大学四年是这么度过的——大学四年总结
  14. android到底要多少内存,手机内存究竟要多大才够用?
  15. <table></table>表格标签的基本概念和基本属性
  16. 两个整数取中间值问题
  17. 特斯拉无人驾驶最核心的人工智能算法,竟是强化学习
  18. 苹果cmsv10模板MXone自适应模板
  19. linux中的ubiq命令用途,学习Linux命令(一)
  20. 解决Margin塌陷问题方法

热门文章

  1. c++怎么取消换行或回到上一行
  2. 差分进化算法python 指派问题_多目标优化算法
  3. 服务器安装内置无线网卡,笔记本怎么安装内置网卡 笔记本内置无线网卡安装步骤【图文】...
  4. Laravel实现dingo+JWT api接口之实战篇
  5. 线性代数常用基本知识整理
  6. [Wi-Fi抓包篇]3. WireShark ——抓wlan口包的方法
  7. LaTex中表格常用设置
  8. 一位经贸学姐从点工到测试主管的心路历程(一)
  9. JavaScript ES5
  10. PostgreSQL备机checkpoint