概述
以下文章来源于:公_众_号开源电子网
读取更多技术文章,请扫码关注
如何使用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显示图片如何使用OLED显示图片的全部内容,希望文章能够帮你解决如何使用OLED显示图片如何使用OLED显示图片所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复