[X]关闭

LCD液晶显示分析(一)

文档创建者:ぉ沙皮狗的忧伤
浏览次数:6323
最后更新:2020-09-11
本帖最后由 ぉ沙皮狗的忧伤 于 2020-9-11 16:43 编辑

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



一、框架

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




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


2)显示器呈Z字行的路线进行扫描显示,使用HSYNC、VSYNC控制扫描和跳转的路径;(Hsync是列,Vsync是行)
截图202009111608312454..png
2、操作过程
1)设置LCD的HSYNC、VSYNC\VCLK等信号的参数,并将帧内存的地址告诉LCD控制器,塔克自动的发起DMA传输,从帧内存中得到图像数据,出现在数据总线VD[23:0]上。我们只需要将显示的图像数据写入帧内存中即可。
2)图像数据的存储:
例如:由三原色组建的256色(8BPP)显示模式,使用8位数据表示一个像素的颜色。但特殊的是,这8位数据用于表示在调色板中的索引值。这里的调色板使用256*16的内存,即使用16BPP的显示格式来表示对应各个索引值的颜色。因此,最终在LCD显示的仍为16BPP的数据。
内存数据和像素对应的关系为:
截图202009111609224920..png
其中,P1、P2...为一个个的像素。
像素在调色板中的数据存放模式16BPP分为两种格式:5:6:5和5:5:5:1.即
截图202009111619012186..png





截图202009111602298112..png

其中
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灯

截图202009111557041910..png




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

截图202009111559193396..png
var成员变量
截图202009111621371506..png


fix成员变量
截图202009111623087800..png


②、打开framebuffer设备
截图202009111625056807..png
截图202009111625456373..png

③、从底层获取var和fix信息
截图202009111626256785..png

④、打印颜色偏移量、分辨率即颜色深度
截图202009111627491419..png

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

⑥、内存映射
截图202009111634453489..png

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

操作映射内存,逐个显示内存的像素点
截图202009111642353426..png





截图202009111629566545..png
截图202009111630166040..png
截图202009111638327326..png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则