ぉ沙皮狗的忧伤 发表于 2020-9-11 11:23:26

LCD液晶显示分析(一)

本帖最后由 ぉ沙皮狗的忧伤 于 2020-9-11 16:43 编辑

参考网址https://blog.csdn.net/JerryGou/article/details/79952882
https://www.pianshen.com/article/6600981111/



一、框架

(1)、代码框架注:先大致了解LCD工作流程,有个印象,方便升入了解LCD







(二)、LCD解析一、LCD 概念
1.显示器数据组织格式
1)一幅图像成为一帧,每帧由多行组成,每行由多个像素组成。每个像素的颜色由若干位表示,对于256色LCD,每个像素由8位表示,称为8BPP。(颜色深度)


2)显示器呈Z字行的路线进行扫描显示,使用HSYNC、VSYNC控制扫描和跳转的路径;(Hsync是列,Vsync是行)

2、操作过程
1)设置LCD的HSYNC、VSYNC\VCLK等信号的参数,并将帧内存的地址告诉LCD控制器,塔克自动的发起DMA传输,从帧内存中得到图像数据,出现在数据总线VD上。我们只需要将显示的图像数据写入帧内存中即可。
2)图像数据的存储:
例如:由三原色组建的256色(8BPP)显示模式,使用8位数据表示一个像素的颜色。但特殊的是,这8位数据用于表示在调色板中的索引值。这里的调色板使用256*16的内存,即使用16BPP的显示格式来表示对应各个索引值的颜色。因此,最终在LCD显示的仍为16BPP的数据。
内存数据和像素对应的关系为:

其中,P1、P2...为一个个的像素。
像素在调色板中的数据存放模式16BPP分为两种格式:5:6:5和5:5:5:1.即:








其中
vinfo.red.offset颜色偏移量
R_offset:16就表示16~23位描述红色
G_offset:8   就表示8~15位描述绿色
B_offset:0   就表示0~7位描述蓝色

操作过程
通过mmap从底层映射一块大小为yres*xres*bits_per_pixel/8的内存到应用层,当你操作这块内存的时候就相当于于操作yres*xres个led灯




代码讲解
上层软件代码
①、定义var和fix结构体
var结构体描述显示屏固定的参数,fix结构体描述显示屏可变的参数


var成员变量



fix成员变量



②、打开framebuffer设备



③、从底层获取var和fix信息


④、打印颜色偏移量、分辨率即颜色深度


⑤、计算屏幕的总大小=像素点*颜色深度/8


⑥、内存映射


⑦、判断显示屏的颜色深度为RGB888 24位还是RGB565 16位
用来显示蓝色,绿色,红色,白色,黑色的数值


操作映射内存,逐个显示内存的像素点






页: [1]
查看完整版本: LCD液晶显示分析(一)