zoukankan      html  css  js  c++  java
  • LCD硬件原理

    想象一下,屏幕的后面有一个电子枪,电子枪位于某个像素的背后,然后向这个像素发射红绿蓝三原色,从而就可以组成任意一种颜色。简单的说,电子枪在像素的背后一边移动,一边向像素发射红绿蓝。

    如果要编写出LCD的驱动程序,首先要搞清楚下面的几个问题:

    1)电子枪如何移动

    2)颜色如何确定

    3)电子枪如何得知应该跳到下一行

    4)电子枪跳到最下面一行的最后一个像素时,如何得知应该跳到原点

    5)RGB线上的数据从什么地方获取

    回答第5个问题,首先要明确framebuffer是什么东西?

    在内存中划出一块区域,这块区域就称为framebuffer.

    在framebuffer中的这些数据,显然是写程序的人想要显示的,由程序员构造。

    framebuffer中的这些值,最终会被LCD控制器读出来,然后通过RGB三组线,传给电子枪,电子枪要把它转换为红绿蓝三种颜色,打到像素上面去。右面屏中的每个像素在framebuffer中都有对应的存储空间,里面存有这个像素的颜色。

    2、分析lcd的时序图

    clk:电子枪在clk的下降沿(对于其它型号的lcd,有可能是上升沿)从数据线上得到数据,然后发射到像素上,最后移动到下一个像素。

    数据线上的数据其实就是从framebuffer中获得的数据。

    一行有多少像素,假设是x。

    -------------------------------------------------------------------------------------------------------------------------------------------

    当电子枪打完一行中的最后一个像素时,再经过多长时间会收到行同步信号呢?在该图中取为thf.

    当电子枪打完一行中的最后一个像素时,会收到一个行同步信号HSYNC,如果这个行同步信号的脉冲很小,电子枪根本反应不过来,因此脉冲宽度不能太小,在该图中取为thp。

    电子枪收到行同步信号后,就会从最右边移动到最左边,移动过程也不会瞬间完成,需要一定的时间,在该图中取为thb.

     --------------------------------------------------------------------------------------------------------------------------------------------

     当显示完所有的行后,再经过多长时间会收到垂直同步信号呢?在该图中取为tvf.

    当显示完所有的行后,电子枪会收到一个垂直同步信号VSYNC,如果这个垂直同步信号的脉冲很小,电子枪根本反应不过来,因此脉冲宽度不能太小,在该图中取为tvp。

    电子枪收到垂直同步信号后,就会从最下边移动到原点,移动过程也不会瞬间完成,需要一定的时间,在该图中取为tvb.

    ----------------------------------------------------------------------------------------------------------------------------------------------

    3、这些时间参数如何影响屏幕上的图像位置呢?(和第2部分的参数名字不一样,但意义是一样的)

    4、每个像素在framebuffer中占据多少位,用bpp表示。bit per  pixel

    硬件上LCD的bpp是确定的,比如说看该款LCD,有24条数据线。即每个像素可以用24bit来表示。

    是不是有多少条数据线,我就得用多少条呢?这是不一定的。

    比如说

    R0~R7,我只用5条,其他接地

    G0~G7,我只用6条,其他接地

    B0~B7,我只用5条,其他接地

    总共需要5+6+5=16条线,即每个像素占据16位的数据

    总结一下:如何进行lcd编程?

    1)需要看LCD的芯片手册,确定时间参数,确定分辨率,确定引脚极性。根据这些信息来设置lcd控制器,使它可以发出正确的信号。

    2)在内存中分配一个framebuffer,这个framebuffer里面,每个像素占据若干位。分配好framebuffer后,把首地址告诉lcd控制器。以后lcd控制器就可以周而复始的从framebuffer中取出每个数据,然后配合其他信号,把像素的数据发给电子枪,让电子枪显示出来。

    3)设置好lcd控制器后,写程序时,只需要把数据填到framebuffer中就可以了,硬件上会自动的把这些数据在lcd上显示出来。

  • 相关阅读:
    2018.5.5-6 GDCPC2018广东省赛 6/10 Rank12 Au
    网络流24题总结
    BZOJ4259 残缺的字符串 FFT
    [转]CodePlus 2018 3月赛 博弈论与概率统计
    Aiiage Camp Day6 J Sort
    Daily Scrum7
    Daily Scrum6
    Daily Scrum5
    Daily Scrum4
    Daily Scrum3
  • 原文地址:https://www.cnblogs.com/-glb/p/11331632.html
Copyright © 2011-2022 走看看