LCD——与LCD有关的基础知识

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考博客

1、s5pv210 LCD编程原理 - biaohc - 博客园

2、LCD常用接口原理_5组信号线是几位-CSDN博客

一、LCD简介

1、LCD是什么?

LCD(Liquid Crystal Display)俗称液晶显示。

液晶是一种材料,这种材料具有一种特点,在电信号的驱动下液晶分子进行旋转,而旋转时会影响透光性,因此我们可以在整个液晶面板后面用白光照(称为背光),可以通过不同电信号让液晶分子进行选择性的透光,此时在液晶面板前面就可以看到各种各样的颜色(白光由各种不同颜色的光组成,被选择性透光之后可以产生各种不同颜色的光),这就是LCD显示。

有些显示器本身会发光,称为主动发光,比如LED显示器;有些显示器本身不会发光而只会透光,需要背光的协助才能看起来是发光的,称为被动发光,比如LCD。

液晶多应用于电视机、电脑显示屏、手机显示屏、工业显示屏等领域。

2、有哪些显示设备?

显示设备描述
CRT阴极摄像管显示器
等离子显示未成为主流
OLED未成为主流,但是很有市场潜力
LED主要用在户外大屏幕
LCD主流显示器

3、有哪些种类的LCD?

种类描述
TN出现最早,但响应性不够好,有拖尾现象
STN是TN的升级版,有效解决拖尾现象,显示更清晰
TFT最大特点就是超薄
…………

二、LCD的接口技术

1、LCD的硬件接口采用TTL电平

SoC的LCD控制器硬件接口是TTL电平的(+5V表示逻辑1,0V表示逻辑0),LCD的硬件接口也是TTL电平的,因此它们可以直接对接(一般使用软排线进行连接),比如手机、平板、开发板内部都是这样直接对接的。

TTL电平的缺陷就是传输距离短,如果LCD屏幕和主板控制器太远(比如大于1米),就不能直接TTL连接,而要进行转换。转换方式为:主机SoC(TTL) —>VGA —> LCD屏幕(TTL)。

其他各种接口(TTL、LVDS、EDP、MIPI)在传输速率、距离、适配性方面的介绍,见参考博文2。

2、S5PV210的RGB接口简介

LCD的RGB接口时序图如下所示(在用户手册P1207):

(1)VD[23:0]:24根并行的数据线(可见LCD是并行接口),用来传输图像信息。

(2)HSYNC:水平同步信号。 

(3)VSYNC:垂直同步信号,是时序信号,为了让LCD能够正常显示给的控制信号。

(4)VCLK:像素时钟,LCD工作时需要主板控制器给LCD模组一个时钟信号,就是VCLK。

(5)VDEN:数据有效标志,时序信号,和HSYNC、VSYNC结合使用。

(6)LEND:行结束标志,时序信号,是非必须的,比如X210接口就没有。

3、与背光灯有关的引脚 

 

三、LCD如何显示图像

1、像素

像素是组成图像的最基本元素(在显示中可以被控制的最小单位),整个图像就是由一个个的像素组成的。

像素可以被单独控制,控制其亮或不亮(单色屏),或者控制其亮度强弱(比如亮50%还是35%,这样叫灰度屏,以前的黑白电视机),或者控制其显示一定的颜色(现在最常用的彩色显示屏)。

我们要在显示器上显示一个图像,就是把这个图像离散化成一个个的点,然后把各个点的颜色对应到显示器的像素上。

2、扫描

扫描就是依次将颜色数值放入显示器所有像素中的这个过程。

扫描这个词是由最早的CRT显示器遗留下来的,到LCD显示器的年代已经失去意义,但是我们还是延续着这么叫。

显示器的扫描显示原理依赖于人眼的视觉暂留。只要显示器扫描频率大于人眼的发现频率,人眼看到的图像就是恒定的。如果扫描频率偏小人眼就会看到闪动。

3、LCD驱动器与LCD控制器

LCD驱动器一般和LCD显示面板集成在一起(这两者本来是分开的,做面板的是只做面板的,比如三星、LG、台湾的友达、奇美都是做面板的;驱动器也由专门的IC厂商生产;集成厂商买来面板和驱动器后集成在一起做成LCD屏幕)。LCD显示面板只负责液晶分子的旋转透光,需要一定的模拟电信号来控制液晶分子。这模拟电信号由LCD驱动器负责提供,而 LCD 驱动器的控制信号(是数字信号)来自LCD屏幕的外部接口(第二节所讲的接口)。

LCD控制器一般集成在SoC内部,负责向LCD驱动器提供控制像素显示的数字信号。LCD控制器的关键在于时序,它必须按照一定的时序和LCD驱动器通信。LCD控制器受到SoC控制,SoC会从内存中拿像素数据给LCD控制器并最终传给LCD驱动器。

4、显示内存(显存)

SoC在内存中挑选一段内存(程序员随便挑的,但是必须符合一定规矩),然后通过配置将LCD控制器和这一段内存形成一个映射关系。我们把这一段内存称为“显示内存”,简称“显存”。

这个映射关系建立之后,CPU不用再理会LCD控制器、LCD驱动器和LCD显示面板,只要关心显存即可。因为只要把待显示的图像的像素数据丢到显存中,LCD控制器就会自动从显存中读取像素数据并传输给LCD驱动器,这个过程不需要CPU的参与。

也就是说,LCD显示分为2个阶段:第一个阶段就是CPU初始化LCD控制器,使LCD控制器和某一段显存构成映射关系;第二个阶段就是将待显示的图像的像素数据丢到显存中。

四、LCD的六个主要时序参数

LCD的显示单位是帧(整个画面的内容为一帧),显示器工作时其实是一帧一帧地在显示,比如电影以每秒24帧的速度播放图片。

1、LCD显示一帧图像的过程

如下所示,一帧分为多行,一行分为多像素,因此一帧图像其实就是多个像素组成的矩阵。

LCD显示一帧图像时,先把一帧拆分为行,然后再把这些行拆分为像素点。然后LCD控制器每次将一个像素点的数据传送给LCD驱动器,LCD驱动器根据这个像素点的数据,驱动这个像素点的液晶分子旋转,从而让这个像素点显示出对应的颜色。

注意,由于 LCD控制器 和 LCD驱动器 之间一次只能传送一个像素点的数据,所以一帧图像在屏幕上其实是逐行逐像素点地显示的,不是同一时间显示出来的。

2、六个主要时序参数

LCD的六个主要时序参数如下表所示。

时序参数含义
HSPW水平同步信号脉宽
HBPD水平同步信号前肩
HFPD水平同步信号后肩
VSPW垂直同步信号脉宽
VBPD垂直同步信号前肩
VFPD垂直同步信号后肩

这些信号其实是老式的CRT显示器才会用到,LCD本身不需要,但是出于兼容性的要求,LCD选择兼容CRT显示器的这些时序要求,所以理解LCD显示器时序和编程时,可以用CRT的方式来理解。

一帧图像由多个行组成,每行都是这个时序:LCD控制器先发送一个HSYNC高电平脉冲(脉冲宽度是HSPW),脉冲告诉驱动器下面的信息是一行信息。然后开始这一行信息,这一行信息包括3部分:HBPD+有效行信息+HFPD。其中前肩和后肩都属于时序信息(和LCD屏幕具体有关),有效行信息就是横向分辨率。所以你可以认为一行总共包含4部分:HSPW+HBPD+有效行信息+HFPD。

一帧图像的通信过程是这样的:整个帧图像信号分为4部分:VSPW+VBPD+帧有效信号+VFPD。VSPW是帧同步信号宽度,用来告诉驱动器一帧图像要开始了;VBPD和VFPD分别是垂直同步信号前后肩。 

这六个时序参数本身是LCD屏幕本身的参数,与LCD控制器无关。同一个主板如果接的屏幕不一样,则时序参数设置也会不同。这些参数来源一般是:

(1)厂家一般以示例代码的形式给出。比如九鼎的210裸机教程中s5pv210-fb.c文件的第774行:

​        .h_fp            = 210,        // 160-210-354
        .h_bp            = 38,        // 46
        .h_sw            = 10,        // 1-40
        .v_fp            = 22,        // 7-22-147
        .v_fpe            = 1,
        .v_bp            = 18,        // 23
        .v_bpe            = 1,        
        .v_sw            = 7,        // 1-20​

注意这些数字的单位。H开头的三个单位都是DCLK(像素时钟),V开头的三个单位是TH。这样设置的好处是当我们改变像素时钟的设置时,不用改变这里的时序参数。 

如果没有设置好这些时序参数,屏幕会跑偏。

(2)来自LCD的数据手册。比如X210光盘资料\A盘\DataSheet\AT070TN92.pdf。

五、与LCD的相关概念

1、像素(pixel)

见第三节提到的“像素”。 像素的中文全称为图像元素,它是分辨率的尺寸单位,而不是画质。

2、像素间距(pitch)

像素间距,指的是相邻2个像素的像素中心的距离。

像素物理上一般是方形的,所以横向pitch和纵向的pitch一样的(当不是方形时则不一样)。

像素间距会影响屏幕的最佳观看距离,比如像素间距大的适合远距离看,像素间距小的适合近距离看。

3、分辨率(resolution)

分辨率,是指整个屏幕横向和纵向的像素个数,比如X210V3S开发板的屏幕分辨率是1024*600。

屏幕尺寸(纯屏幕对角线尺寸)和分辨率无关,比如X210V3S开发板的屏幕尺寸是7寸的。

屏幕尺寸、分辨率和像素间距三者之间有关联。屏幕尺寸固定时,分辨率越高(越低),则像素间距越小(越大);分辨率固定时,屏幕尺寸越大(越小),则像素间距越大(越小)。

分辨率,分为物理分辨率、实际显示分辨率。物理分辨率,是指物理屏幕像素点的真实个数。实际显示分辨率,是将物理分辨率抽样之后的分辨率,它小于等于物理分辨率。如何抽样呢?比如物理分辨率是1600*900,实际显示分辨率为1280*720(比如电脑上有调节电脑屏幕的选项),如何从1600变为1280呢?我们可以将1600去掉一些(即某些像素列不显示),或者让相邻列的像素数据一样(变为一个更粗的像素)。

4、清晰度

清晰度是一个主观概念,是人眼对显示效果(是否清晰)的一个主观判断。

清晰度由分辨率和像素间距共同决定。屏幕尺寸固定时,分辨率越高则像素间距越小,显示就越清晰;分辨率越低则像素间距越大,显示就越模糊。分辨率固定时,屏幕尺寸越小则像素间距越小,显示就越清晰;屏幕尺寸越大则像素间距越大,显示就越模糊。

5、像素深度

像素深度,指的是每个像素用多少 bit 来表示,单位是bpp,bits per pixel。

用来表示一个像素的数据位越多,则这个像素的颜色值更加丰富、分的更细,颜色深度就更深。

常见的像素深度有这么几种:1bit、8bit、16bit、24bit、32bit 。

1bit:用1个二进制位来表示颜色,这种就叫单色显示。示例就是理发店门口的LED屏。

8bit:用8个二进制位来表示颜色,此时能表示256种颜色。这种叫灰度显示(纯白到纯黑分别对应255到0,中间的数值对应不同的灰),不是彩色显示,典型应用就是以前的黑白电视机。

16bit:用16个二进制位表示颜色,此时能表示65536种颜色。这种方式可以彩色显示,一般采用RGB565的颜色分布(用5bit表示红色、用6bit表示绿色、用5bit表示蓝色)。因为用来表示RGB颜色的bit数目不够多,导致红绿蓝三种颜色本身分得不够细致,因此彩色失真比较严重。

24bit:用24个二进制位来表示颜色,此时能表示16777216种颜色。这种表示方式和16位色原理是一样的,只是RGB三种颜色各自的精度都更高了,RGB各8位,叫RGB888。此时颜色比RGB565更加真实细腻,虽然说比自然界无数种颜色还是少了很多,但人眼几乎不能区分1677万种颜色和无数种颜色的差别,因此把这种RGB888的表示方法叫做真彩色(RGB565叫做假彩色)。

32bit:总共用32位二进制来表示颜色,其中24位表示红绿蓝三元色(还是RGB888分布),剩下8位表示透明度。这种显色方式就叫ARGB(A是阿尔法,表示透明度),现在PC机中一般都用ARGB表示颜色。

一般用32bit,也就是4个字节,来存储一个像素点信息。至于其中用多少bit来表示颜色,要看具体的设置,平常所见一般都是24位色(真彩色),此时高8位一般没用或者表示其他含义,用00或者ff来填充以便内存对齐。

6、颜色序

将24bit的二进制数分为3组,高8位、中间8位、低8位,这三组二进制数,哪个表示R,哪个表示G,哪个表示B呢?

颜色序表述的就是这个问题。

注意,颜色序一般已经在LCD驱动中设置好了,我们写代码时要遵循这个设置。

7、点阵

点阵是指由像素点构成的阵列,一个屏幕就是一个点阵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/368699.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 每日一题Day 54 - 61

2859. 计算 K 置位下标对应元素的和 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1 就是这个整数的 置位…

【MATLAB第96期】基于MATLAB的SVM(线性)、SVM(高斯)、决策树、KNN等机器学习算法回归及分类Boost集成学习模型(含不同模型权重)

【MATLAB第96期】基于MATLAB的SVM(线性)、SVM(高斯)、决策树、KNN等机器学习算法回归及分类Boost集成学习模型(含不同模型权重) 引言 文章使用Boost集成学习方法,对多个机器学习模型进行融合,并通过算法得到对应权重。 因暂时精…

springboot整合Sa-Token实现登录认证和权限校验(万字长文)

目前在国内的后端开发中,常用的安全框架有spring security、shiro。现在,介绍一款由国人开发的安全框架Sa-Token。这个框架完全由国人开发,所提供的Api文档和一些设置都是比较符合国人的开发习惯的,本次就来介绍一下如何在spring …

计算机设计大赛 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 🔥 优质竞赛项目系列,今天…

【gcc】webrtc发送侧计算 丢包率

大神的分析 : 提到: 每当收到cc-feedback或者收到RR-report的时候就能统计出丢包率,在cc-controller中就会调用SendSideBandwidthEstimation::UpdatePacketsLost()去更新丢包率,同时进行码率预估 G:\CDN\rtcCli\m98\src\modules\congestion_controller\goog_cc\send_side_b…

计算机网络_1.6.1 常见的三种计算机网络体系结构

1.6.1 常见的三种计算机网络体系结构 1、OSI(七层协议)标准失败的原因2、TCP/IP参考模型3、三种网络体系结构对比 笔记来源: B站 《深入浅出计算机网络》课程 1、OSI(七层协议)标准失败的原因 (1&#xf…

filebeat采集中断与变慢问题分析

4、未采集的那段时间内无以下日志,这段时间内数据源正常,应能被正常采集到。 5、相关进程资源,服务器磁盘、cpu、内存无明显异常。 6、日志中断前有如下报错。 2022-02-15T15:22:22.2230800 INFO log/harvester.go:254 Harvester started fo…

Qt程序设计-右键菜单栏功能

本文讲解如何实现Qt右键菜单栏功能 创建窗体项目,本文给窗体添加右键菜单栏功能,包含最大化、最小化、退出,当然也可以给某个控件添加,操作相同。 选中窗体,右键-转到槽,打开对话框如下 选中图示的信号,进行添加 剩余的功能直接在代码中添加。 代码如下 #ifndef MA…

一文读懂「LM,Large Model / Foundation Model」大模型

近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果。为了提高模型的性能,研究者们不断尝试增加模型的参数数量,从而诞生了大模型这一概念。 一、什么是大模型? 1.1 概念介绍 一句话介绍…

Spring Framework(6.x)源码编译与源码阅读入门

目录 一、Spring Framework 源码获取问题 1.1 Spring Framework 官网 1.2 Spring Framework 源码地址 1.3 关于访问不了GitHub 官网的解决方案 1.3.1 修改本地hosts文件 1.3.2 GitHub520 1.3.3 Gitee 导入 二、Spring Framework 源码编译 2.1 环境说明 2.1.1 JDK版本 …

【鸿蒙】大模型对话应用(四):页面发起请求实现对话能力

Demo介绍 本demo对接阿里云和百度的大模型API,实现一个简单的对话应用。 DecEco Studio版本:DevEco Studio 3.1.1 Release HarmonyOS SDK版本:API9 关键点:ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 定义接…

CSS常用动画网站(纯css echarts等 建议经常阅读 积累素材)

CSS动画代码集合 https://www.webhek.com/post/css3-animation-sniplet-collection/#/ 这个网站中将常见的css动画都进行了集合,并且有详细的代码,可以直接使用 echarts图表 https://www.isqqw.com/ echarts也是前端常用的,虽然官方文档已经给出了很多的案例,但是有时候产品还…

【数据结构与算法】之排序系列-20240202

这里写目录标题 一、389. 找不同二、414. 第三大的数三、455. 分发饼干四、506. 相对名次五、561. 数组拆分六、594. 最长和谐子序列 一、389. 找不同 简单 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添…

禁止 ios H5 中 bounces 滑动回弹效果

在开发面向 iOS 设备的 HTML5 应用时,控制页面的滚动行为至关重要,特别是禁用在 Safari 中默认的滑动回弹效果。本文旨在提供一个简洁明了的解决方案,帮助开发者在特定的 Web 应用中禁用这一效果。 1. 什么是滑动回弹效果? 在 iO…

明道云入选亿欧智库《AIGC入局与低代码产品市场的发展研究》

2023年12月27日,亿欧智库正式发布**《AIGC入局与低代码产品市场的发展研究》**。该报告剖析了低代码/零代码市场的现状和发展趋势,深入探讨了大模型技术对此领域的影响和发展洞察。其中,亿欧智库将明道云作为标杆产品进行了研究和分析。 明…

navicat中的密码忘记了,解密navicat导出的密码

navicat 导出密码 打开导出的文件&#xff0c;获取加密后的密码 进入在线执行PHP代码的网站代码在线运行 - 在线工具 将网站中的代码替换&#xff0c;执行如下代码 <?phpnamespace FatSmallTools;class NavicatPassword {protected $version 0;protected $aesKey libc…

Web3行业研究逐步加强,“链上数据”缘何成为关注焦点?

据中国电子报报道&#xff0c;近日&#xff0c;由中关村区块链产业联盟指导&#xff0c;中国信息通信研究院牵头&#xff0c;欧科云链控股有限公司参与编写的《全球Web3产业全景与发展趋势研究报告&#xff08;2023年&#xff09;》正式发布。研究报告通过全面追踪国内外Web3产…

c# Get方式调用WebAPI,WebService等接口

/// <summary> /// 利用WebRequest/WebResponse进行WebService调用的类 /// </summary> public class WebServiceHelper {//<webServices>// <protocols>// <add name"HttpGet"/>// <add name"HttpPost"/>// …

【leetcode题解C++】98.验证二叉搜索树 and 701.二叉搜索树中的插入操作

98. 验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例…

Jmeter直连mysql数据库教程

mysql数据库能够通过Navicat等远程连接工具连接 下载驱动并加入jmeter 1.mysql驱动下载地址&#xff1a;MySQL :: Download MySQL Connector/J (Archived Versions) 找到对应的驱动下载&#xff1a;如下图&#xff1a; 把驱动jar包加入jmeter 配置jmeter连接mysql数据库…