读取SD卡图片bin文件显示LCD上

读取SD卡bin文件显示图片

image-20210710130755511
Coding

环境搭建:

  • 硬件平台:STM32H750XBH6
  • 开发环境:STM32CubeMX V6.8.1+KEIL V5.28.0.0
  • STM32H750固件版本:package V1.11.0
  • 仿真下载驱动:ST-Link

前言:STM32H750XBH6 的flash只有128K,存储图片数组显然是不够的,使用sd卡存储图片的二进制bin文件,读取文件并显示在lcd上,这里不使用硬解码图片,还没有学习到,另外读取sd卡的bin文件还可以做一个简易bootloader,直接sd卡启动是吧,学习这部分还是有必要的

以下分为两个部分进行,

初步实现 :读取sd卡bin文件保存在一个buffer,buffer刷写到LCD上

这里还是使用了flash,过大的bin文件,buffer无法全部放下,先使用一个小图片制作bin文件,能够显示在lcd上成功一大半了

最终实现 :一行行刷写在LCD上,buffer仅需要一行显示像素大小 作为缓冲

800*480 16位色的屏幕,一帧显示需要750K 使用这么大的缓冲区不现实,我的flash才128k

这里仅使用一行buffer作为缓冲,一行行刷,比如我的屏幕800*480 16位色, 刷一行的buffer需要 1600字节,使用到的flash 只占用1k到2k 大小

图片bin文件制作

image-20230826121140954

我们还可以生成一个.h文件做对比,查看我们生成的bin文件是否对应

image-20230826121248299

查看看.h文件生成的数组

image-20230826121623825

查看bin文件

我们使用16进制文件查看,上面的数组保存的是十六进制格式

可以看到是与之一一对应的

,

将该bin文件放入sd卡中

我这里是放在picture/pic.bin

读取bin文件验证是否正确读取

image-20230826122732028

查看串口数据

image-20230826123014829

13*16+6=214 (验证正确)

image-20230826123218689

刷写到LCD上

image-20230826123357098

成功显示这里就不贴图了

最终实现 :一行行刷写在LCD上

制作800*480 16位的bin文件

image-20230826191121788

image-20230826125004606

一行行刷写

  #define BUFFER_SIZE 1600   //800*2#define TOTAL_READ 768000  //800*480*2void sd_picture_on_lcd_unit(void)
{lcd_clear(WHITE);lcd_init();g_point_color=RED; /*画笔颜色*/ lcd_display_dir(1);		//屏幕显示方向:0竖屏,1横屏lcd_clear(WHITE);mount_sd();/*挂载sd卡*/uint8_t buffer[BUFFER_SIZE];uint32_t totalBytesRead = 0;for (int i = 0; i <= (TOTAL_READ / BUFFER_SIZE); i++) {uint32_t bytesReadThisTime = readFileContent("picture/pic01.bin", buffer, BUFFER_SIZE+1, totalBytesRead);if (bytesReadThisTime != 1) { // 如果readFileContent返回1,则表示有错误totalBytesRead += (bytesReadThisTime);} else {// 错误处理break;}LCD_DrawBitmap(0, i, 800, 1, (uint16_t*)buffer);}}

刷写得到图片如下所示

我这就纳闷了,为什么会是这样的,前面部分颜色完全不对,还有哪里来的紫色,我开始考虑是不是某部分数据丢失,多次复位依然是这样的,我把重点转向写的程序,改过去改过来还是没用

image-20230826191325088

换一张图片试试??

原图如下

刷写上如下

这时候想到了问题所在,这里的汉字以及下面的一些图标都没有问题,问题出现在了颜色上,应该是24位图转16位图出现了问题

image-20230826191924189

我使用win自带的画图软件将原图24转为16位的(转换结果如下)

原来如此,这NM跟原图差这么多,刷写在LCD上的颜色与下面不同应该是软件位图转换算法不一致

image-20230826192558709

既然这样,那我找找16位图吧,实在找不到了,用一个比较简约的24位转16做替代吧

image-20230826193046597

刷写显示如下

还是能看的(有部分不一致为软件算法导致,可忽略,还是24位真彩显示好啊)

image-20230826193207661

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

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

相关文章

改进YOLO系列:10.添加NAMAttention注意力机制

添加NAMAttention注意力机制 1. NAMAttention注意力机制论文2. NAMAttention注意力机制原理3. NAMAttention注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. NAMAttention注意力机制论文 论文题目:NAM: Normalization-based Attention Module 论文…

BGP路由协议的那些事?(下)

BGP路由协议的那些事?(下) 上期问题:在BGP联盟内部的EBGP和IBGP对等体互相传递路由时,LP属性和MED属性是如何变化的呢? 还记得我们说BGP联盟的规则时,有两条关于LP属性和MED属性的规则怎么说来着: 1:路由的LOCAL_PREF属性在整个联盟中都被保留,而不仅仅是在为它们…

【水平垂直居中布局】CSS实现水平垂直居中的5种方法(附源码)

文章目录 写在前面涉及知识点1、子绝对定位父相对定位&#xff0c;子节点设置位移实现1.1效果1.2实现源码 2、子绝对定位父相对定位&#xff0c;子节点设置上下边距2.1 效果2.2 实现源码 3、利用flex布局实现3.1 效果3.2 实现源码 4、利用行高和文本水平居中设置4.1 效果4.2 实…

EasyPOI 实战总结

EasyPOI实战总结 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 使用EasyPOI 环境搭建 # 1.引入相关依…

【PHP】PHP开发教程-PHP开发环境安装

1、PHP简单介绍 PHP&#xff08;全称&#xff1a;Hypertext Preprocessor&#xff09;是一种广泛使用的开放源代码脚本语言&#xff0c;特别适用于Web开发。它嵌入在HTML中&#xff0c;通过在HTML文档中添加PHP标记和脚本&#xff0c;可以生成动态的、个性化的Web页面。 PHP最…

【力扣】202. 快乐数 <哈希>

【力扣】202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 【快乐数】 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果这个过程…

VS中插入Qt插件后配置项目笔记

Project下要创建四个文件夹: bin(输出目录\工作目录) 、include(头文件目录) 、lib(动态库目录) 、src(源码目录) 一、主项目模块配置&#xff1a; 1.配置属性——>常规——>输出目录加入(..\..\bin\) 2.配置属性——>调试——>工作目录加入($(OutDir)) 备注&am…

openresty安装与网站发布

文章目录 安装依赖下载安装包解压安装包安装启动nginx配置环境变量配置开机启动发布静态网站 OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动…

ASCII编码表:字符对照表和值查询

ASCII码值32到126之间是可打印的字符&#xff0c;而ASCII码值0到31是控制字符&#xff0c;127是删除字符&#xff0c;它们在表格中没有对应的可见字符 ASCII码值字符0NUL (空字符)1SOH (标题开始)2STX (正文开始)3ETX (正文结束)4EOT (传输结束)5ENQ (传输结束)6ACK (确…

【业务功能篇84】微服务SpringCloud-ElasticSearch-Kibanan-电商实例应用

一、商品上架功能 ElasticSearch实现商城系统中全文检索的流程。 1.商品ES模型 商品的映射关系 PUT product {"mappings": {"properties": {"skuId": {"type": "long"},"spuId": {"type": "ke…

《Dive into Deep Learning》

《Dive into Deep Learning》&#xff1a;https://d2l.ai/ Interactive deep learning book with code, math, and discussionsImplemented with PyTorch, NumPy/MXNet, JAX, and TensorFlowAdopted at 500 universities from 70 countries 《动手学深度学习》中文版&#xff1…

微信小程序教学系列(6)

第六章&#xff1a;小程序商业化 第一节&#xff1a;小程序的商业模式 在这一节中&#xff0c;我们将探讨微信小程序的商业模式&#xff0c;让你了解如何将你的小程序变成一个赚钱的机器&#xff01; 1. 广告收入 小程序的商业模式之一是通过广告收入赚钱。你可以在小程序中…

musl libc ldso 动态加载研究笔记:动态库的加载次序与初始化次序

前言 musl ldso 是按照什么次序加载动态链接的应用程序的共享库的&#xff1f;如果共享库之间有依赖&#xff0c; musl ldso 如何处理先初始化哪个 共享库&#xff1f; musl ldso 的代码可以在 musl 官方代码&#xff1a; ldso\dlstart.c 与 ldso\dynlink.c&#xff0c;其中动…

算法:图解前缀和问题

文章目录 实现原理实现思路一维前缀和模板二维前缀和模板 典型例题一维前缀和二维前缀和寻找数组中心下标除自身以外数组的乘积关系矩阵和 总结 实现原理 前缀和问题和二分查找类似&#xff0c;也是有一些固定的模板的&#xff0c;在理解原理的基础上进行实践&#xff0c;就能…

【Git】学习总结

【Git】学习总结 【一】安装【二】Git克隆项目代码【1】idea下载git项目【2】创建新的分支【3】新建的分支推送到远程【4】合并最新代码到主分支【5】切换分支 【三】提交本地项目到远程&#x1f680;1. 配置 Git&#x1f680;2. 创建项目远程仓库&#x1f680;3. 初始化本地仓…

MybatisPlus(1)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 MyBatis-Plus&#xff08;简称MP&#xff09;是一个 Mybatis 的增强工具&…

70吨服务区生活污水处理设备加工厂家电话

70吨服务区生活污水处理设备加工厂家电话 设备简单说明 调节池 由于来水标高低&#xff0c;无法直接流入地埋式生活污水处理设备&#xff0c;在生化一体化设备前增加集水调节池一座。集水提升池内装有两台潜水提升泵&#xff0c;将集水提升池内的废水提升至一体化污水处理设备。…

后端项目开发:集成Druid数据源

Druid作为连接池中间件可以监控数据库访问性能&#xff0c;对数据库密码加密&#xff0c;查看SQL执行日志&#xff0c;扩展JDBC。 添加依赖 <!-- druid --> <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter&…

unity动画融合

1、抛砖引玉 在大型复杂的场景中&#xff0c;一定遇到过手在鼓掌&#xff0c;头在摇头&#xff0c;腿又是其他动作的要求&#xff0c;但是这些东西又不能做一起&#xff0c;因为有时候要把某个动画单独使用&#xff0c;这时候就用到了动画融合&#xff0c;利用动画状态机分层机…

Java——简单的文件读取和写入

这段代码是一个简单的文件读取和写入的例子。它创建了一个BufferFile类&#xff0c;构造方法接受一个文件名作为参数。BufferFile类中的write方法用于从标准输入读取内容&#xff0c;并将其写入到指定的文件中&#xff0c;直到输入"end"为止。read方法用于读取指定文…