OLED显示图片

news2024/11/6 9:32:49

前言

本文主要介绍了使用单片机如何在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1115304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaSE入门---认识类和对象

文章目录 什么是面向对象&#xff1f;认识类类的定义格式类的实例化 理解this引用对象的构造及初始化什么是构造方法&#xff1f;如何进行初始化&#xff1f;默认初始化就地初始化 认识staticstatic修饰成员变量static修饰成员方法 认识代码块普通代码块构造代码块静态代码块同…

Python3----------抽象(多态、封装、继承等)

术语多态&#xff08;polymorphism&#xff09;源自希腊语&#xff0c;意思是“有多种形态”。这大致意味着即便你不知道变量指向的是哪种对象&#xff0c;也能够对其执行操作&#xff0c;且操作的行为将随对象所属的类型&#xff08;类&#xff09;而异。 封装&#xff08;en…

微信小程序连接数据库与WXS的使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…

下载运行ps软件提示因为计算机中丢失d3dcompiler_47.dll解决方法

在计算机系统中&#xff0c;DLL文件&#xff08;动态链接库&#xff09;是一种重要的共享库&#xff0c;它包含了可被多个程序使用的代码和数据。然而&#xff0c;当某些DLL文件丢失或损坏时&#xff0c;可能会导致程序无法正常运行。本文将介绍四种解决D3DCompiler_47.dll缺失…

使用esp32的H2 来看看zigbee~

1.首先看下esp-idf的SDK的结构&#xff0c;目前使用的版本是v5.1的。 可能随时间推移&#xff0c;目录有变化。 上图 我们 主要关注zigbee的网关部分 以及子设备部分 看下 zigee角色部分 我们接下来看下终端节点的部分代码&#xff1a;

入户的第一眼,玄关设计小技巧!福州中宅装饰,福州装修

玄关是进门的第一印象&#xff0c;这个地方的颜值&#xff0c;关系到别人是否会直接被你给惊艳到&#xff0c;特别是有小区的邻居、亲戚朋友来参观&#xff0c;只要一打开门。小编今天要分享的就是一些玄关的功能。 玄关&#xff0c;又称门厅&#xff0c;是指建筑物入门处到正厅…

Chrome插件精选 — 标签效率管理插件

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. OneTab Plus 下…

SoftPlc on docker 测试

软件主页 https://github.com/fbarresi/SoftPlc 安装 docker stop softplc docker rm softplc docker pull fbarresi/softplc:latest-linux docker run -d -p 7080:80 -p 7443:443 -p 20012:102 --restartalways --name softplc fbarresi/softplc:latest-linux netstat -na|…

Chrome插件精选 — 历史记录管理插件

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. Better History…

【electron】实战技巧(持续更新,不要错过喔)

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境 1️⃣ nvm处理多node环境避免node版本切换指定32位/64位 2️⃣ 常用node库npm-run-all&#xff08;脚本运行工具&#xff09;cross-env&#xff08;配置环境变量&#xff09;dotenv&#xff08;配置文件&#xff09;minimist&#x…

洛谷月赛 P5588 小猪佩奇爬树

题目描述 佩奇和乔治在爬树。 给定 n 个节点的树 T(V,E)&#xff0c;第 i 个节点的颜色为 wi​&#xff0c;保证有1≤wi​≤n。 对于1≤i≤n&#xff0c;分别输出有多少对点对(u,v)&#xff0c;满足u<v&#xff0c;且恰好经过所有颜色为 i 的节点&#xff0c;对于节点颜色…

2023年【金属非金属矿山(地下矿山)安全管理人员】考试内容及金属非金属矿山(地下矿山)安全管理人员考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试内容根据新金属非金属矿山&#xff08;地下矿山&#xff09;安全管理人员考试大纲要求&#xff0c;安全生产模拟考试一点通将金属非金属矿山&#xf…

leetcode分类刷题:如何更好地理解递归

文章目录 概念含义递归三要素递归算法的编程模型递归问题分类递归vs循环(迭代)参考文献 参考知乎上递归下的一个高赞回答&#xff0c;觉得写的非常好&#xff0c;挑选有助于自己理解的内容进行简单总结。 概念含义 1、递归(Recursion)是指在函数的定义中调用函数自身的方法&…

一篇文章教会你C++11入门知识点

C11入门 列表初始化1. {}初始化2. initializer_list 声明1. auto2. decltype3. nullptr 范围for循环STL新增容器1. array2. forward_list3. unordered_map和unordered_set 右值引用和移动语义1. 左值引用和右值引用2. 左值引用和右值引用比较3. 右值引用使用场景和意义4. 右值引…

16-spring AOP核心对象的创建

文章目录 1. aop的几个重要概念2. aop bean definition3. AspectJPointcutAdvisor4.AopConfigUtils5.AnnotationAwareAspectJAutoProxyCreator6. 循环依赖1. aop的几个重要概念 参考官方解释:https://docs.spring.io/spring-framework/docs/5.2.9.RELEASE/spring-framework-r…

操作系统备考学习 day10

操作系统备考学习 day10 第三章 内存管理3.2 虚拟内存管理3.2.1 虚拟内存的基本概念传统存储管理方式的特征、缺点局部性原理虚拟内存的定义和特征如何实现虚拟内存技术 3.2.2 请求分页管理方式页表机制缺页中断机构地址变换机构 3.2.3 页面置换算法最佳置换算法&#xff08;OP…

总结一下vue中v-bind的常见用法

文章目录 &#x1f415;前言&#xff1a;&#x1f3e8;简述一下v-bind命令其它写法 &#x1f415;前言&#xff1a; 本篇博客主要总结一下v-bind命令在vue中的常见用法 &#x1f3e8;简述一下v-bind命令 v-bind命令是将动态的数据属性与咱们的标签进行一个绑定,它可以绑定标…

二维码智慧门牌管理系统:革新小区安全管理的新力量

文章目录 前言一、外采人员的数据采集二、二维码智慧门牌管理系统的创新性三、居民的便捷体验四、面临的挑战 前言 在科技快速发展的今天&#xff0c;智能化和数字化已经深刻影响着我们的生活的各个方面。近期备受关注的话题之一是二维码智慧门牌管理系统&#xff0c;这一系统…

缓存失效方案

一、背景 WRITE &#xff1a; 数据写入Mysql 和 Redis缓存&#xff0c; READ&#xff1a;先从 Redis 缓存中取数据&#xff0c;拿不到再从Mysql中加载&#xff0c;更新到Redis 上图第三阶段&#xff0c;接收Mysql的binlog变更消息&#xff0c;可以参考阿里的 Canal&#xff0…

tooltip里面画echarts图

第一步: 第二步; 完整代码: //协作工作受理分析圆柱形workLineChart(xData, yData) {let that this;let option {backgroundColor: "#061326",grid: {top: "10%",bottom: "5%",left: "5%",right: "5%",containLabel: true…