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上显示出来。
最新文章
- Asp.Net Core 项目实战之权限管理系统(5) 用户登录
- 执行openstack命令报错【You must provide a username via either -...】
- CentOS7—HAProxy安装与配置
- java之ubuntu12.04 开发环境配制
- 【每日学习】Apache重写未开启,导致The requested URL /xxxx.html was not found on this server
- Win7下的本地网站发布
- Velocity+Java较全教程
- 100-The 3n + 1 problem
- 关于名称重整(name mangling)、多态性的一些简单介绍
- Lotus Sametime 服务器的安装和配置
- elasticsearch的javaAPI之query
- 移动端网页JS框架-手机触摸事件框架,日历框架带滑动效果
- request+response+jsp+el+jstl
- H5横向滚动提示
- button改变某div内文字内容的显示
- Kafka中bootstrap-server、broker-list和zookeeper的区别
- Spring定时服务QuartZ
- exchange 2010
- C#-----------------------------回收机制中Destroy与null的作用
- 标准输入输出 sys.stdin与sys.stdin
热门文章
- 《30天自制操作系统》笔记2 --- 初步了解汇编产生的二进制(Day1)
- itms-services 方式安装ipa 无法连接到网址(eg. 我用的ip:172.26.167.82)
- java基础-温故而知新
- 基于canvas自动化运维工具
- 解决百度UEditor列出图片列出文件时返回的文件路径为磁盘绝对路径的问题
- mac下安装和运行redis
- C#异步的世界【下】(转)
- 《 .NET并发编程实战》阅读指南 - 第7章
- C# Newtonsoft.Json JsonSerializerSettings配置序列化操作
- 【翻译】Tusdotnet中文文档(1)配置和用法