小言_互联网的博客

LCD屏幕操作原理_嵌入式Linux

318人阅读  评论(0)

在线课堂:https://www.100ask.net/index(课程观看)
论  坛:http://bbs.100ask.net/(学术答疑)
开 发 板:https://100ask.taobao.com/ (淘宝)
     https://weidongshan.tmall.com/(天猫)
交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
交流群二:QQ群:536785813(单片机-嵌入式)
公 众 号:百问科技


版本 日期 作者 说明
V1 2020 韦东山 摘自《嵌入式Linux应用开发完全手册》

5.1 LCD 操作原理

在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。Frame 是帧的意思,buffer 是缓冲的意思,这意味着 Framebuffer 就是一块内存,里面保存着一帧图像。Framebuffer 中保存着一帧图像的每一个像素颜色值,假设 LCD 的分辨率是 1024x768,每一个像素的颜色用 32 位来表示,那么 Framebuffer 的大小就是:

1024x768x32/8=3145728 字节。

简单介绍 LCD 的操作原理

① 驱动程序设置好 LCD 控制器:
根据 LCD 的参数设置 LCD 控制器的时序、信号极性;
根据 LCD 分辨率、BPP 分配 Framebuffer。
② APP 使用 ioctl 获得 LCD 分辨率、BPP
③ APP 通过 mmap 映射 Framebuffer,在 Framebuffer 中写入数据

假设需要设置 LCD 中坐标(x,y)处像素的颜色,首要要找到这个像素对应的内存,然后根据它的 BPP 值设置颜色。假设 fb_base 是 APP 执行 mmap 后得到的 Framebuffer 地址,如下图所示:

可以用以下公式算出(x,y)坐标处像素对应的 Framebuffer 地址:

(x,y)像素起始地址=fb_base+(xres*bpp/8)y + xbpp/8

最后一个要解决的问题就是像素的颜色怎么表示?它是用 RGB 三原色(红、绿、蓝)来表示的,在不同的BPP 格式中,用不同的位来分别表示 R、G、B,如下图所示:

对于 32BPP,一般只设置其中的低 24 位,高 8 位表示透明度,一般的 LCD 都不支持。
对于 24BPP,硬件上为了方便处理,在 Framebuffer 中也是用 32 位来表示,效果跟 32BPP 是一样的。
对于 16BPP,常用的是 RGB565;很少的场合会用到 RGB555,这可以通过 ioctl 读取驱动程序中的 RGB位偏移来确定使用哪一种格式。


转载:https://blog.csdn.net/thisway_diy/article/details/109679844
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场