LCD显示方向

news2024/11/28 4:40:46

LCD显示方向

一、ILI9341内存到显示地址的映射

  本文只讨论“正常显示”,不讨论“垂直滚动显示”模式。

  可以看到物理内存被两个指针访问,行指针和列指针,行指针范围从000h到013Fh,列指针范围为0000h到00EFh。也就是说,物理内存和LCD显示屏的对应关系是一种竖屏(240*320)的对应的关系。至于如何让GRAM数据显示到LCD屏上,不需要我们去考虑,只要知道这种对应关系就可以了。

  那么ILI9341有8种显示方式:左上角->右下角(竖屏)、左下角->右上角(竖屏)、右上角->左下角(竖屏)、右下角->左上角(竖屏)、左上角->右下角(横屏)、左下角->右上角(横屏)、右上角->左下角(横屏)、右下角->左上角(横屏),又是怎么实现的呢?

二、MCU读写GRAM的方向

1、来自MCU读写数据流

2、ILI9341读写GRAM的控制

1) ILI9341读写GRAM的控制器的结构图

2) 虚拟地址到物理地址的转换关系

  由此可见,正是通过虚拟地址到物理地址的转换,使得写入到GRAM中图片的映射方向发生了改变。也就是说,通过改变写入GRAM的位置,改变了LCD的显示方向。

3、8中显示方向描述

看图说明:

  1. MV、MX、MY的控制位在命令0x36对应的寄存器中
  2. Image in the Memory(MPU)中描述的是在MCU的240(宽)*320(高)*16bit(假设565显示方式)中显示了一个图像“F”。
  3. Image In the Driver(Frame Memory)描述的是经过虚拟地址到物理地址转换器后,实际传输到GRAM中的数据显示阵列。
  4. B、E分别描述了MCU传输的数据流的起始位置和终止位置。

注:(x,y)代表(列地址,行地址)

example 1: Y-Mirror

   MCU向(0,0)写入数据,经过虚拟地址到物理地址的转换,实际写入到GRAM的地址是(0,319),对应LCD的左下角。MCU向(239,319)写入数据,经过虚拟地址到物理地址的转换,实际写入到GRAM的地址是(239,0),对应LCD的右上角。最终的效果就是LCD的显示实现了Y方向上的翻转。

example 1: X-Y Exchange

   MCU向(0,0)写入数据,经过虚拟地址到物理地址的转换,实际写入到GRAM的地址是(0,0),对应LCD的左上角。MCU向(239,319)写入数据,经过虚拟地址到物理地址的转换,实际写入到GRAM的地址是(319,239),对应LCD的右下角。

  经过这样的变换,LCD变成了横屏显示。最终的效果就是LCD的显示实现了行列的交换。

4、8种显示方向探秘

  不论哪种显示方向,其实并没有改变GRAM物理内存与LCD显示屏的对应关系,也即是说GRAM物理内存与显示屏之间的对应关系、内存到LCD的扫描方式,是固定不变的。

  那么这种显示方向是怎么说起的?

  实际上,显示方向说的是MCU的显示缓存MPU(或者MCU读写GRAM的数据流)与LCD显示屏的对应关系。由于GRAM物理内存与LCD显示屏的对应关系是不会改变的,所以就是MPU与GRAM的对应关系,也即是虚拟地址与物理地址的转换关系。

  用户在写程序的过程中,LCD显示操作是更改MPU的内容,至于MPU到GRAM的传输是驱动程序完成的。也就是说,用户控制显示的内容,接触的是MPU,而更改显示方向需要配置ILI9341的寄存器。

  其实,ILI9341的扫描方向的功能也可以没有,这个时候需要用户自己软件进行转换,实际上就是那么转换关系表。

三、测试

1、左上角->右下角(竖屏)

2、左下角->右上角(竖屏)

3、右上角->左下角(竖屏)

4、右下角->左上角(竖屏)

5、左上角->右下角(横屏)

6、左下角->右上角(横屏)

7、右上角->左下角(横屏)

8、右下角->左上角(横屏)

参考资料:《ILI9341芯片手册》

附STM32测试代码:GramScan_Test.zip

分类: Stm32

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

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

相关文章

naive-ui 的n-date-picker改变成中文

如下 那改完之后就要变成 如下 其实蛮简单的 修改app.vue import { zhCN,dateZhCN } from "naive-ui";<n-config-provider :locale"zhCN" :date-locale"dateZhCN"><RouterView /></n-config-provider> 你要是卡到前端难题&a…

Graphics Mill 11.1.18 -24-06-2023 Crack

Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 加载和保存 JPEG、PNG 和另外 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像操作 可处理任何尺寸&#xff08…

P3 第一章 电路模型与电路定律

1、在电路当中&#xff0c;理想电源的阻值与理想电源的u-i特性无关。 理想电压源的内阻是零&#xff0c;理想电流源的内阻是无穷。而在电路中的等效阻值有电路的连接情况决定。 发电机、蓄电池工作特性接近于电压源&#xff0c;电路模型表达为电压源电阻串联。 光电池特性比较…

《MySQL》内置函数

文章目录 日期函数字符串函数数学函数其他函数 日期函数 函数名称功能current_date()当前日期&#xff08;yyyy-mm-dd&#xff09;current_time()当前时间&#xff08;hh-mm-ss&#xff09;current_timestamp()当前时间戳&#xff08;yyyy-mm-dd hh-mm-ss&#xff09;now()当前…

缓存 - Spring Boot 整合 Caffeine 不完全指北

文章目录 Pre名词解释注解属性指导步骤步骤 1&#xff1a;添加依赖步骤 2&#xff1a;配置缓存步骤 3&#xff1a;使用缓存 CodepomConfigService缓存名枚举 & 常量测试入口测试 Pre 缓存 - Caffeine 不完全指北 名词解释 Cacheable&#xff1a;表示该方法支持缓存。当调…

Few-Shot Learning in Wireless Networks: A Meta-Learning Model-Enabled Scheme

1 INTRODUCTION 由于6G的复杂管理机制&#xff0c;可以在基站收集历史数据——为克服训练数据集容量的限制提供了极大的便利 问题与挑战&#xff1a; 尽管元学习可以提高网络边缘智能(network edge intelligence)的性能&#xff0c;但其在无线网络(wireless networks)中的应用…

HCIP实验---OSPF实验2

1.如图连接&#xff0c;合理规划IP地址&#xff0c;所有路由器各自创建一个loopback接口 2.R1再创建三个接口IP地址为201.1.1.1/24、201.1.2.1/24、201.1.3.1/24 R5再创建三个接口IP地址为202.1.1.1/24、202.1.2.1/24、202.1.3.1/24 R7再创建三个接口IP地址为203.1.1.1/2…

高效办公学习的秘密!打工人高效工作必备的AI神器

​人工智能 (AI) 近年来取得了显著进步&#xff0c;并已成为科技行业的流行语。我们随时能看到大量有关人工智能工具的资讯&#xff0c;它有可能自动执行任务&#xff0c;节省时间并提高效率&#xff0c;使其成为企业的宝贵资产和平台。 随着人工智能的进步&#xff0c;旨在让…

如何在Ubuntu18.04中下载MySQL5.7

检查环境 首先检查自己电脑有没有安装过mysql,输入如下&#xff1a; rpm -qa | grep mysql如果有则清理干净在安装&#xff0c;输入 whereis mysql找到文件夹目录&#xff0c;再把它删除 rpm -e --nodeps mysql-xxx检查系统是否自带mariadb&#xff0c;输入如下检查 rpm -…

基于Tars高并发IM系统的设计与实现-实战篇1

基于Tars高并发IM系统的设计与实现-实战篇1 通过前文基础篇&#xff0c;进阶篇的介绍&#xff0c;相信大家已经对IM的基础能力实现&#xff0c;难点及其如何解决有了一个全面的了解与认识。 相信大家都迫不及待想看看一个高性能的IM系统到底怎么设计与实现&#xff0c;从本篇开…

grpc学习笔记

目录 gRPC原理网络传输效率问题基本概念概览ClientServer 异步相关概念异步 Client异步 Server gRPC原理 RPC 即远程过程调用协议&#xff08;Remote Procedure Call Protocol&#xff09;&#xff0c;可以让我们像调用本地对象一样发起 远程调用。 网络传输效率问题 HTTP…

Mysql---explain详解

explain命令是用来分析查询语句的执行计划的工具。它可以显示查询语句的执行计划&#xff0c;包括查询的顺序、使用的索引、扫描的行数等信息&#xff0c;帮助开发人员优化查询语句的性能。通过分析执行计划&#xff0c;可以找到查询语句的瓶颈&#xff0c;进而优化查询语句的性…

机器学习笔记 - 探索PaddlePaddle框架的对象检测、分割和关键点检测

一、PaddlePaddle简述 PaddlePaddle(PArallel Distributed Deep LEarning)是百度于2016年发布的开源深度学习框架。它为各种机器学习任务提供了统一的平台。 但是最近的基准测试显示 PaddlePaddle 是潜在的领跑者,其基准速度超过了其更知名的竞争对手。 PaddlePaddle 与 PyT…

2.SpringBoot集成Swagger

1.添加依赖 <!--添加Swagger依赖 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><!--添加Swagger-UI依赖 --><dependenc…

Python实现操作MySQL【增删改查-示例】

闲话少叙,直接上操作! 一、准备工作 1.本地安装MySQL、Python(以3.6为例) 2.MySQL新建数据库【test】,新建表【user】,新建字段【name】【age】 3.建表方式:navicat工具 字段 二、Python操作—插入数据 #!/usr/bin/env # coding=utf-8import pymysql # Python 连…

Leetcode-每日一题【430.扁平化多级双向链表】

题目 你会得到一个双链表&#xff0c;其中包含的节点有一个下一个指针、一个前一个指针和一个额外的 子指针 。这个子指针可能指向一个单独的双向链表&#xff0c;也包含这些特殊的节点。这些子列表可以有一个或多个自己的子列表&#xff0c;以此类推&#xff0c;以生成如下面…

Java语言程序设计试卷6套

目录 Java语言程序设计试卷1 一、单项选择题 二、多项选择题 三、判断题 Java语言程序设计试卷2 一、单项选择题 二、多项选择题 三、判断题 Java语言程序设计试卷3 一、单项选择题 二、多项选择题 三、判断题 Java语言程序设计试卷4 一、单项选择题 二、多项选…

【7月比赛合集】119场可报名的数据挖掘大奖赛,任君挑选!

CompHub[1] 主页增加了“近两周上新的奖金赛”&#xff0c;更加方便查找最新比赛&#xff0c;欢迎访问和反馈&#xff01; 最新更新的比赛会第一时间在群里通知&#xff0c;欢迎加群交流&#xff01;&#xff08;公众号回复“加群”即可&#xff09; 以下信息仅供参考&#xff…

一种简单的数据库性能测试方法

这两天接到一个任务&#xff0c;要测试一个服务器的性能&#xff0c;客户要求向数据库内 1000/s&#xff08;每插入一千条数据&#xff09; 的处理能力&#xff0c;当时脑子赌赛了&#xff0c;想的是用LR来进行&#xff0c;由于LR接触不深&#xff0c;只知道LR实现参数化的时候…

Java基础---异常

目录 典型回答 什么是Throwable Error和Exception的区别和联系 Java异常处理相关的几个关键字&#xff0c;以及简单用法 什么是自定义异常&#xff0c;如何使用自定义异常 Java异常体系结构 以下关于异常处理的代码有哪些问题 典型回答 Java中的异常&#xff0c;主要可以…