1.8.1_LCD硬件原理_P

下图是一个LCD的假想图,其中每一个黑点都是一个像素点。屏幕后面有一个电子枪,一边移动一遍发射红绿蓝三种颜色。

在这里插入图片描述
通过下面的问题里学习LCD。

问1:向一个像素打出颜色之后,要如何移动到下一个像素?

答:有一条CLOCK线连到LCD,每来一个CLOCK,电子枪移动一个像素。

问2:像素的颜色是如何确定的?

答:有三条颜色信号线,分别是R,G,B,像素的颜色就由这三条线来确定。

问3:电子枪如何得知应该跳到下一行?

答:有一条HSYNC(Horizontal Sync Signal)线连到LCD,接受到HSYNC脉冲时,就跳到下一行的最左边。

问4:电子枪如何得知应该跳到原点?

答:类似的,有一条VSYNC(Vertical Sync Signal)线连到LCD,接受到VSYNC脉冲时,就跳回原点。

那么,上述的这些信号都是由谁发出的呢?是由MCU中的LCD控制器发出的,这些线也连到了MCU的LCD控制器。

下图是2440上LCD的插座,有VCLK,每来一个时钟信号移动一个像素,VD则是video data,VFRAME是帧信号,也就是垂直方向上的同步信号,VLINE则是行同步信号。
在这里插入图片描述同样,也可以查看LCD的芯片手册,查找这些引脚定义。

问5:RGB线上的数据从何而来?

答:这些数据显然是由开发人员设置的,在内存中分配一段空间作为FrameBuffer,在FrameBuffer中存放颜色信号。这些信号会被LCD控制器读出来,通过RGB信号线发给LCD,LCD再把他们显示出来。LCD的每一个像素点在FrameBuffer中都有对应的存储空间,里面存有这个像素点的颜色,我们的LCD控制器就会周而复始的取出这些信号发给LCD。

这些数据配合其他线上的时序,就可以操控LCD实现我们的需求。
在这里插入图片描述
下面来分析这张时序图,从底部往上看,可以看出电子枪在CLOCK的下降沿(本款是下降沿,其他款的LCD未必)从数据线上得到数据,发射到像素上,并移动到下一个像素,这些像素点的源头则是我们在内存中分配的FrameBuffer

假设一行有X个信号,在接收完本行的最后一个信号时,LCD需要接受一个行同步信号HSYNC,将电子枪移动到下一行的第一个像素。这个行同步信号的脉冲宽度为thp。LCD接受到行同步信号后,电子枪需要从最右边移动到最左边,这显然不是瞬间完成的,也需要一点时间,这就是电子枪的行同步移动时间thb。另外,在显示完一行最右边的参数后,还要thf时间行同步信号才会过来。

显示完所有的行后,LCD需要接受一个VSYNC同步信号,类似的,这个信号的脉冲宽度为tvp,电子枪移动的时间为tvb,在显示完所有行后,需要tvf时间VSYNC同步信号才会过来。

在tvb和thb这些时间里,电子枪都在移动,这些时间里发出的数据LCD也无法处理,这些参数都需要告诉LCD控制器。来统计一下需要告诉LCD控制器的参数。

  1. LCD的行数和列数;
  2. HSYNC的脉冲宽度和电子枪的移动时间;
  3. VSYNC的脉冲宽度和电子枪的移动时间;
  4. HSYNC信号延迟时间tvf和VSYNC信号延迟时间tvf;
  5. FrameBuffer的地址。

假设LCD有Y行,每行有X个像素点,那么该LCD的分辨率就是X*Y。

记录一篇关于LCD的好文章(https://www.cnblogs.com/shangdawei/p/4760933.html)。
在这里插入图片描述
显示完一行中的最右像素之后,再过HFT时间,HSYNC才来,也就是在HFT时间中,右边是黑框,这个值越大,黑框越大。经过HFT时间后,HSYNC到来,电子枪移动到最左边,再经过HSYNC的脉宽和HBP时间,才开始显示最左边的像素,HBP就是左边的黑框,这个值越大,左边黑框越大。同样,在显示完最下一行之后,经过VFP时间,VSYNC才到,所以,VFP就是下边的黑框。经过VFP时间后,电子枪移动到原点,再经过VSYNC和VBP之后才开始显示第一行像素,VBP就是上边黑框。

综上,通过调节HBP,HFP可以调节左右黑框的大小,通过VBP,VFP可以调节上下黑框的大小,通过这些就可以调节屏幕的大小。

每个像素在FrameBuffer中占据的位数称为BPP,即Bit Per Pixel。根据LCD的芯片手册可得,红绿蓝都是八条线,共3*8=24条线。
在这里插入图片描述
在这里插入图片描述
虽然硬件上是24条线,但是实际程序中并不一定是24位的,在实际的硬件电路中,红色的8条信号线可能只有5条接到了DATA引脚,其他的信号线接地,同样,绿色的8条信号线可能只有6条接到了DATA引脚,其他的信号线接地,蓝色的8条信号线只有5条接到DATA引脚,其他接地。也就是红绿蓝实际只有5+6+5共16条信号线接到了DATA引脚,也就是说每个像素点是两字节表示的。

在这里插入图片描述
2440开发板LCD的电路原理图如上,R0和B0都被接地,所以红色-绿色-蓝色也是5-6-5共16条线,即每个像素点都是16位的。

总结一下LCD的操作原理,首先我们需要通过查找芯片手册查看脉冲宽度,分辨率等等这些数据,还需要在内存中分配一个FrameBuffer,每个像素在FrameBuffer中占据若干位,将FrameBuffer的起始地址告诉LCD控制器,之后LCD就会来这里取数据了。配置好LCD控制后,我们实际写程序的时候就只要把要显示的数据写到FrameBuffer中去就可以了,其他的会由硬件自动完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值