专题6-LCD亮起来
1.ARM系统中LCD体系架构
其中LCD驱动芯片和LCD显示器是连接在LCD模块上的,而LCD控制器则是在ARM处理器上的。
2.液晶工作原理:
液晶分子为长棒子状,通过分子的电流不一样, 他们会发生不同程度的偏转,从而对背光灯的光线产生不同程度的反射和折射,进而使得显示的像素呈现出不同的色彩。每个分子对应一个像素,很多像素构成一幅图像。
3.液晶屏分类:常见的有STN的,就是玩单片机用到的12864还有1602等,以及GF,而我们现在说的大都是TFT的。
4.LCD驱动芯片:为液晶分子的偏转提供电压,从而达到控制LCD的效果。相当于神经网络。
5.LCD控制器:为LCD驱动芯片提供必要的数据和控制信号。这是相当于大脑,LCD显示器就相当于器官。REGBANK里有寄存器组,调色板内存。LCDCDMA则是用来控制帧缓存(内存)里的数据到LCD显示器,不需要CPU干预。VIDPRCS则是像素数据,TIMEGEN则是控制时序的,与REGBANK密切相关。
6.显示过程
7.时序信号
8.各信号含义:
9.简要概括
10.引脚初始化,找到原理图VD对应的引脚,然后在datasheet里面找到相应的GPIO寄存器区写入初值,让这些引脚工作在LCD数据传输模式。
11时序初始化:
(1)找出需要初始化什么时序信号
(2)找到初始化这些信号的寄存器(LCDCON1,LCDCON2,LCDCON3,LCDCON4)
(3)根据datashhet确定初始化的值
12.帧缓冲初始化:
(1)分配空间,分辨率的两倍,每个像素用两个字节来描述。一般静态分配,用二维数组来分配,数组元素类型是描述颜色的位数对应的类型。但不一定是两倍,即不是只能用16位描述一个像素,位数越多颜色越丰富。
(2)告知地址:由DMA来搬运数据,不需要CPU干预。所以DMA首先要知道数据在内存中的地址,即帧缓存。(LCDSADDR1,2,3)起始地址,结束地址,是否间隔,多少半字单位。
13.杂项初始化:
(1)选择什么屏
(2)选择控制像素的位数
(3)是否打开LCD
(4)选择颜色控制格式(LCDCON5)
(5)选择所用LCD的HSYNC以及VSYNC的极性,即是否选择反转。默认三星的是高电平的极性。(LCDCON5)
(6)打开半字转换(LCDCON5),后来我发现打不打开都可以,这里表示有疑问???
(7)关闭临时调色板(TPAL)
(8)打开电源引脚功能(LCD_PWR,引脚复用,LCDCON5打卡电源允许)
(9)使能LCD控制器(LCDCON1)
14.画点函数:
(1)定义坐标,与帧缓存里面的数组的行列注意对应关系。
(2)颜色转换。根据datasheet将24位转换为16为数据,再赋值。
(3)建议大家初始化的时候不要使能LCD的数据输出,不然会花屏,建议大家用这个画点的思想,在最初上电的时候,进行一个清屏操作,根据自己想要的颜色来做。虽然老师说过这种方法比较傻,不如调色板好用,但是我试验了,用调色板清屏以后就不能在画图,具体原因还没弄清楚。所以为了避免一开机就花屏,建议大家用循环的方式不断往帧缓存里面写入相同的颜色值。这里不是纯粹的调用画点函数,那样的话效率很低,每次都要做移位运算。建议这样写,会加速清屏时间。
15.画线画图:利用画点函数,学会使用取模软件,单色显示要用到调色板(TPAL)。
我想实现一个函数,在任意两点之间画一条直线,但是由于像素是一个个小方格,不是直接连起来的圆点,目前还未实现,希望大家提出想法一起探讨。争取找一个好算法。
16.我用mini2440板子,用的tq4.3的液晶,不是迷你自带的LCD
代码如下:
(1)宏定义和全局变量定义部分
这些参数是根据这张表和时序信号图以及LCDCON1的描述得到的
(2)引脚初始化
(3)时序初始化
(4)帧缓存初始化
(5)杂项初始化
(6)总的初始化
(7)画点函数
(8)用调色板清屏函数
(9)画”十字架“函数
(10)画一张预存好的图片函数
(11)开机使用的清屏函数
(12)延时函数
(13)测试函数

浙公网安备 33010602011771号