由于产品要用到显现屏和接触,就买了一个2.4寸的五颜六色接触屏模块。
原理图:
显现屏的驱动芯片是ILI9325
ILI9325 is a 262,144-color one-chip SoC driver for a-TFT liquid crystal display with resolution of 240RGBx320
dots, comprising a 720-channel source driver, a 320-channel gate driver, 172,800 bytes RAM for graphic data
of 240RGBx320 dots, and power supply circuit.
大约的意思便是ILI9325是一颗26万色片上soc的TFT液晶屏驱动芯片,支撑的分辨率为240RGB*320,172800个字节的显存。
下面来说说说这几个数字 的意义。
26万色是色阶,详细便是,RGB每种色彩用6个位表明,这样便是64x64x64=262,144,当时干流的手机屏幕应该都是1600万色,便是256*256*256=16777216。
再来说这个172800 :320*240*2.25=172,800 个字节 320 240 很简单了解,2.25在这儿是18个bit,也便是说,假如以26万色的色阶填充,填满整个屏幕,需求这么多个字节的数据,算了一下大约是168.75KB。
在看手机屏幕,当时的干流的分辨率是1080P,旗舰手机是2K屏幕,就以一般的1080P 屏幕为例,1920*1080*96=199065600个字节
算了一下,大约是189.84375MB,2K屏幕就已经是300多MB了,手机的处理器功用的确强壮。
comprising a 720-channel source driver, a 320-channel gate driver
720-channel 和320-channel gate在芯片上是实实在在存在的,720表明240的点的RGB,320便是门驱动。
上图为芯片管脚图
上图为管脚尺度图
门输出次序,这个和取模没有关系的 经过操控Driver Output Control (R01h) 的SM 和GS,能够操控驱动门敞开的数序,
这儿或许有点显现的作用的操控。
和显现编程最相关的是8.2.5. Entry Mode (R03h) 这个寄存器,其影响取模的方法,显现的方位。
从上面的描绘便是水平方向上的递加递减来看,假如原点没有改动,上图中赤色点标出的当地便是原点,
我将这儿标记为物理原点。
比照实物图
ILI9325 has a 16-bit index register (IR), an 18-bit write-data register (WDR), and an 18-bit read-data register
(RDR). The IR is the register to store index information from control registers and the internal GRAM. The
WDR is the register to temporarily store data to be written to control registers and the internal GRAM. The
RDR is the register to temporarily store data read from the GRAM.
Data from the MPU to be written to theinternal GRAM are first written to the WDR and then automatically written to the internal GRAM in internaloperation. Data are read via the RDR from the internal GRAM.
Therefore, invalid data are read out to the data
bus when the ILI9325 read the first data from the internal GRAM. Valid data are read out after the ILI9325
performs the second read operation.
ILI9325 有一个16位的索引寄存器(缩写 IR),一个18位的写数据寄存器(缩写为WDR),和一个18位的读数据寄存器(缩写为RDR) 。IR用来存储来自操控寄存器和内部GRAM的索引信息,WDR是用来暂存写入到GRAM中的数据的。RDR是用来暂存来自GRAM的数据的。
来自MPU的写GRAM数据第一步写入到WDR,然后经过内部的主动操作,写入到GRAM中。读操作和写操作的道理相同。
因而,第一步读到总线上的数据是无效的,第二步读到的数据才是有用数据。
Address Counter (AC)
The address counter (AC) gives an address to the internal GRAM. When the index of the register for setting a
RAM address in the AC is written to the IR, the address information is sent from the IR to the AC. As writing
data to the internal GRAM, the address in the AC is automatically updated plus or minus 1. The window
address function enables writing data only in the rectangular area arbitrarily set by users on the GRAM.
地址计数器用来给内部的GRAM传递地址信息,当要设置AC的信息,先是将这个RAM地址写入IR中,然后传递给AC。
写一个数据到GRAM,AC 主动加1或许减1。 窗口地址功用使得恣意写入到GRAM 中数据在窗口显现。
昨日一向弄错的一个问题,我想选用上面的装备 AM=0, ID=11 在水平方向上扫描,水平地址添加,笔直地址添加,
然后取模软件这边的设置如下图:
合作屏幕的方向,我在扫描的时分做了以上的设置,我将扫描的起点和屏幕的原点重合,
这样在添加方向上都是添加,事实证明这种扫描方法是能够的。
问题出来和软件的合作上
x=((uint16_t)(pic[2]<<8)+pic[3])-1; //从图画数组里取出图画的长度
y=((uint16_t)(pic[4]<<8)+pic[5])-1; //从图画数组里取出图画的高度
这种方法取出来的x=320
y=240
LCD_WR_CMD(EntryMode,0x1030); //图画显现方向为左下起 行递加 列递减
LCD_WR_CMD(HorizontalAddressStart, StartX); //水平显现区开始地址 0-239
LCD_WR_CMD(HorizontalAddressEndPosition, StartX+x); //水平显现区完毕地址 0-239
LCD_WR_CMD(VerticalAddressStart, StartY); //笔直显现区开始地址 0-319
LCD_WR_CMD(VerticalAddressEndPosition, StartY+y); //笔直显现区完毕地址 0-319
LCD_WR_CMD(HorizontalGramAddressSet, StartX); //水平显现区地址
LCD_WR_CMD(VerticalGramAddressSet, StartY); //笔直显现区地址
这样在水平方向就会越界,导致?屏。
这种扫描方法x应该是240 y是320
正常的竖屏扫描方法
合作屏幕,竖屏显现
SS和GS两个位经过操控S1-S720的和G1-G320的方历来确认原点的方位
SS是Source Shift
GS是Gate Shift
1、坐标原点方位由SS和GS确认。对应01H和60H指令.
2、AM和I/D[1:0]即03H指令,操控其扫描方法,这将决议你图片取模方法。正常的取模图片才会正常显现。