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

如果要编写出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上显示出来。

最新文章

  1. Asp.Net Core 项目实战之权限管理系统(5) 用户登录
  2. 执行openstack命令报错【You must provide a username via either -...】
  3. CentOS7—HAProxy安装与配置
  4. java之ubuntu12.04 开发环境配制
  5. 【每日学习】Apache重写未开启,导致The requested URL /xxxx.html was not found on this server
  6. Win7下的本地网站发布
  7. Velocity+Java较全教程
  8. 100-The 3n + 1 problem
  9. 关于名称重整(name mangling)、多态性的一些简单介绍
  10. Lotus Sametime 服务器的安装和配置
  11. elasticsearch的javaAPI之query
  12. 移动端网页JS框架-手机触摸事件框架,日历框架带滑动效果
  13. request+response+jsp+el+jstl
  14. H5横向滚动提示
  15. button改变某div内文字内容的显示
  16. Kafka中bootstrap-server、broker-list和zookeeper的区别
  17. Spring定时服务QuartZ
  18. exchange 2010
  19. C#-----------------------------回收机制中Destroy与null的作用
  20. 标准输入输出 sys.stdin与sys.stdin

热门文章

  1. 《30天自制操作系统》笔记2 --- 初步了解汇编产生的二进制(Day1)
  2. itms-services 方式安装ipa 无法连接到网址(eg. 我用的ip:172.26.167.82)
  3. java基础-温故而知新
  4. 基于canvas自动化运维工具
  5. 解决百度UEditor列出图片列出文件时返回的文件路径为磁盘绝对路径的问题
  6. mac下安装和运行redis
  7. C#异步的世界【下】(转)
  8. 《 .NET并发编程实战》阅读指南 - 第7章
  9. C# Newtonsoft.Json JsonSerializerSettings配置序列化操作
  10. 【翻译】Tusdotnet中文文档(1)配置和用法