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中显示方向描述
看图说明:
- MV、MX、MY的控制位在命令0x36对应的寄存器中
- Image in the Memory(MPU)中描述的是在MCU的240(宽)*320(高)*16bit(假设565显示方式)中显示了一个图像“F”。
- Image In the Driver(Frame Memory)描述的是经过虚拟地址到物理地址转换器后,实际传输到GRAM中的数据显示阵列。
- 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
LCD显示方向的更多相关文章
- TFT LCD显示原理详解
<什么是液晶> 我们一般认为物体有三态:固态.液态.气态,其实这只是针对水而言,有一些有机化和物 还有介于固态和液态中间的状态 就是液晶态,如下图(一): ...
- 关于Android4.x系统默认显示方向各种修改
1.设置属性值 在device.mk文件中加入PRODUCT_PROPERTY_OVERRIDES += \ ro.sf.hwrotation=180 2.设置屏幕默认显示方向 在frameworks ...
- Raspberry PI Model B+ (LCD显示CPU温度)
Title:Raspberry PI Model B+ (LCD显示CPU温度) --2015-01-29 17:44 买了块连接Raspberry PI Model B+的LCD显示器,上面没写C ...
- mini2440裸试验—计算器(LCD显示,触摸屏突破)
关于Pait_Bmp(x0, y0, x, y, BMPaddr);函数 像素图在屏幕左上角为(0,0),Pait_Bmp中的x0.y0分别像素点初始位置,x,y为BMP图片的X,Y的大小.BMPad ...
- LCD显示GPS时钟[嵌入式系统]
夏任务102:做一个GPS钟 实验要求 用RPi的串口连接一个GPS模块,从GPS得到实时时间,在7段数码管或LCD上显示 实验工具: Raspberry Pi Model B主机, 8G c10 S ...
- 2.数码相框-编码(ASCII/GB2312/Unicode)介绍,并使LCD显示汉字字符(2)
在上章-学习了数码相框的框架分析(1)了 本章主要内容如下: 1)熟悉ASCII/GB2312/Unicode编码 2)写应用程序,使LCD显示汉字和字符 大家都知道,数据传输的是二进制,而字符和汉字 ...
- LCD显示异常分析——撕裂(tear effect)【转】
转自:LCD显示异常分析--撕裂(tear effect) 概述 在上一篇<LCD显示异常分析--开机闪现花屏>中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear e ...
- LCD显示异常分析——开机闪现花屏【转】
转自LCD显示异常分析--开机闪现花屏 最近在工作中,有同事遇到LCD开机瞬间会闪现雪花屏的问题,而这类问题都有个共同点,那就是都发生在带GRAM的屏上,同样的问题,在休眠唤醒时也会出现. 其实这类问 ...
- ios上传图片显示方向错误问题
IOS 上传图片方向显示错误问题 问题描述 在使用苹果手机上传图片的时候,发现传完的图片显示出来方向是错误的,竖着的图片会变成横着显示(少部分安卓手机也存在这个问题) 产生原因 ios 相机加入了方向 ...
随机推荐
- 高灵活低耦合Adapter快速开发攻略
Android开发中经常需要使用Adapter. 传统方法是自定义一个Adapter并继承AndroidSDK内的BaseAdapter, 这种方式代码量大,耦合度高,灵活性差(各种监听事件需要对Vi ...
- 关于iOS自定义返回按钮右滑返回手势失效的解决:
在viewDidLoad方法里面添加下面这一句代码即可 self.navigationController.interactivePopGestureRecognizer.delegate=(id)s ...
- 关于Eclipse中的一些基本知识
Eclipse中寻找JRE的顺序是:vm参数指定的JRE--->elipse目录下的JRE--->操作系统中默认的JRE,利用这个特性也可以用vm参数来解决当本机安装有多个JRE的情况. ...
- 关于SWT中的布局Layout
组件装在容器里,那么这些组件是如何布局的呢?在这之前所有的例子都是使用setBounds来 进行绝对坐标的定位的. 在实际应用过程中大都是采用布局管理器的方式来布局容器中的组件. 布局管理器定义了组件 ...
- Javascript实现图片无缝滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C#导入导出Excel表的数据
一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...
- INSTALLING QUARTUS II V.13.1 64 BIT ON RHEL/CENTOS 6 64 BIT
http://www.digitalsolutionslab.com/installing-quartus-ii-v-13-1-64-bit-on-rhelcentos-6-64-bit/ I hav ...
- [wordpress]后台自定义菜单字段和使用wordpress color picker
Wordpress Version 4.4.2 参考链接 插件使用wordpress color picker:Add A New Color Picker To WordPress 后台菜单自定义字 ...
- 【转】android adb命令
1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器): andr ...
- 动态上传多个文件(asp)
CreateElements.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...