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

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

LCD硬件原理的更多相关文章

  1. Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】

    本文转载自:http://blog.csdn.net/liuxd3000/article/details/17464779 一.基本概念 帧缓冲(Framebuffer)是Linux系统为显示设备提供 ...

  2. [国嵌攻略][060][LCD工作原理解析]

    LCD硬件体系 1.LCD液晶屏 液晶属于一种有机化合物,分子形状为长棒状,在不同的电流作用下,分子会有规律旋转,这样对光线产生一定的控制形成一个像素,而很多像素右可以构成完整的图像. LCD是Liq ...

  3. TFT LCD显示原理详解

    <什么是液晶> 我们一般认为物体有三态:固态.液态.气态,其实这只是针对水而言,有一些有机化和物 还有介于固态和液态中间的状态 就是液晶态,如下图(一):                 ...

  4. arm-linux内存管理学习笔记(1)-内存页表的硬件原理

    linux kernel集中了世界顶尖程序猿们的编程智慧,犹记操作系统课上老师讲操作系统的四大功能:进程调度 内存管理 设备驱动 网络.从事嵌入式软件开发工作,对设备驱动和网络接触的比較多. 而进程调 ...

  5. Flash硬件原理

    1.2.1. 什么是Flash Flash全名叫做Flash Memory,从名字就能看出,是种数据存储设备,存储设备有很多类,Flash属于非易失性存储设备(Non-volatile Memory ...

  6. LCD显示屏原理与应用

    1.什么是LCD? (1)LCD(Liquid Crystal Display)俗称液晶.(2)液晶是一种材料,液晶这种材料具有一种特点:可以在电信号的驱动下液晶分子进行旋转,旋转时会影响透光性,因此 ...

  7. 使用Bochs学习硬件原理

    什么是Bochs? 简单地说,Bochs是一款仿真软件,可以用软件的方式模拟硬件的工作.同类软件有Qemu,仿真软件与虚拟机(hypervisor)还不完全相同,仿真软件是完全软件模拟硬件,而虚拟机软 ...

  8. 硬件原理系列之LED数码管(一)

    LED数码管也叫数码显示器,由8段(7段,8多一位小数点)发光二极管组成,控制不同组合,就可以显示不同字符 dp示小数点,COM为公共端,根据连接方式的不同,分为共阴极和共阳极 工作原理:若选用共阴极 ...

  9. Kwp2000协议的应用(硬件原理使用篇)

    作者:良知犹存 转载授权以及围观:欢迎添加微信:becom_me 发现K线没有过多的文章描述,作为一个开发过K线的人,不写些文章帮助后来的人岂不是太浪费开发经验了呢. 总述     KWP2000是一 ...

随机推荐

  1. IAR环境搭建

    工具下载:https://pan.baidu.com/s/1nwv0RVz 第一步:右键点击EW8051-EV-8103-Web.exe,使用管理员权限运行. 第二步:我们运行之后只要一直Next下去 ...

  2. [LeetCode] 884. Uncommon Words from Two Sentences 两个句子中不相同的单词

    We are given two sentences A and B.  (A sentence is a string of space separated words.  Each word co ...

  3. [LeetCode] 379. Design Phone Directory 设计电话目录

    Design a Phone Directory which supports the following operations: get: Provide a number which is not ...

  4. 阿里Sentinel控制台源码修改-对接Apollo规则持久化

    改造背景 前面我们讲解了如何对接Apollo来持久化限流的规则,对接后可以直接通过Apollo的后台进行规则的修改,推送到各个客户端实时生效. 但还有一个问题就是Sentinel控制台没有对接Apol ...

  5. http & https & http/2 & SPDY & WebSocket

    参考文章: http https :https://www.jianshu.com/p/d286d097e56b https & ssl:https://www.jianshu.com/p/2 ...

  6. Oracle体系结构学习笔记

    Oracle体系结构由实例和一组数据文件组成,实例由SGA内存区,SGA意思是共享内存区,由share pool(共享池).data buffer(数据缓冲区).log buffer(日志缓冲区)组成 ...

  7. Istio开启mtls请求503问题分析

    背景 为测试Istio流量管理,将两个服务sleep.flaskapp的两个版本v1.v2(部署文件见参考链接)部署到Istio环境中,通过sleep-v1向flaskapp发起调用http://fl ...

  8. 第一次有人把 5G 讲的这么简单明了

    一个简单且神奇的公式    今天的故事,从一个公式开始讲起.这是一个既简单又神奇的公式.说它简单,是因为它一共只有 3 个字母.而说它神奇,是因为这个公式蕴含了博大精深的通信技术奥秘,这个星球上有无数 ...

  9. Angulaur导入其他位置的样式

    建立一个统一样式文件base-xxx.component.css 在需要导入样式的组件中,编辑.ts文件导入样式: 右侧是它的相对路径.

  10. MVC+Ninject+三层架构+代码生成 -- 总结(二、建項目)

    1.項目分層,其中SqlSugar 是一個ORM 庫類. 2.VS庫類 視圖.