文件IO学习笔记第九章:LCD屏的原理与应用

      大家好,我是小智!

基本概念

      LCD (Liquid Crystal Display的简称)的中文称为液晶显示器,构造原理就是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片(CF),彩色滤光片是由红、绿、蓝三种颜色构成的滤片,有规律地制作在一块大玻璃基板上。

image

结构分析

      彩色滤光片是LCD液晶屏彩色化的关键部件,彩色滤光片通过滤光的方式可以产生RGB三原色,然后再将三原色以不同的强弱比例进行混合,从而呈现各种颜色,这样LCD才可以显示全彩色。

image

显示单位

      屏幕上显示颜色的最小单位叫做像素,像素英文叫 pixel。位图(比如jpg、bmp等格式的常见图片)也是由一个个的像素点构成的,跟屏幕的像素点的概念一样。原理上讲,将一张位图显示到屏幕上,就是将图片上的像素点一个个复制到屏幕像素点上。

image

像素数量

      图片或者屏幕的宽、高两个维度上的像素点数量被称为分辨率,分辨率决定了位图图像细节的精细程度。通常情况下,图像的分辨率越高则所包含的像素就越多,那么图像就越清晰,印刷的质量也就越好。当然,它也会增加文件占用的存储空间,也就是分辨率越高,则占用内存越大。

image

像素色深

      每个像素点所占的bit位数被称为色深,色深的单位是bit。简单理解:色深就是指一个像素点的大小,一般有8位、16位、24位或32位,比如GEC6818开发板的LCD屏的色深就是32位的,也就是一个像素点由4字节组成。分别是ARGB,其中A指的是透明度,一般的LCD都不支持。RGB指的是三原色,每种颜色占1字节,也就是每种颜色的范围是0 ~ 255。

image

      32位色深的LCD屏一般被称为真彩屏。色深决定了一个像素点所能表达的颜色的丰富程度,色深越大,色彩表现力越强。

驱动架构

      LCD属于硬件设备,所以需要通过驱动程序才能控制,而在Linux系统中是通过 Framebuffer驱动子系统来控制LCD的。Frame是帧的意思,buffer是缓冲的意思,所以Framebuffer也被称为帧缓冲。Linux系统下面有多个子系统,其中 Framebuffer子系统就是Linux系统为显示设备提供的一个驱动程序接口,用于驱动显示设备。

      Framebuffer驱动子系统会从内存中申请一块空间用于保存一帧图像的颜色数据,这块内存会被映射到进程的地址空间,这样进程就可以直接进行对帧缓冲进行读写操作,并且写操作可以立即刷新到屏幕上。

      可以理解为Framebuffer驱动子系统把屏幕上的每个像素点映射成一段线性内存空间,应用程序直接修改这段内存空间的数据就相当于改变屏幕上某一像素点的颜色。

image

设备文件

      在Linux系统中硬件设备主要分为两种:一种是字符设备(LCD、触摸屏、键盘......),另一种是块设备(硬盘、U盘......),这两种类型的硬件设备都需要由驱动程序(xxx.ko)控制,当驱动程序安装完成后会自动生成硬件的设备文件,用户才可以通过设备文件去访问硬件。

      比如window系统的硬件驱动安装完成后会在设备管理器中生成设备文件,而Linux系统的硬件驱动安装完成后会自动在 /dev目录下生成设备文件。

image

image

LCD屏在Linux系统下属于字符设备,需要通过Framebuffer驱动程序进行控制,而Framebuffer驱动安装之后会在 /dev目录下生成名字叫做fbn(n = 0 ~ 31)的设备文件,比如开发板的LCD屏的设备文件的名称就是/dev/fb0

练习

  • 利用系统IO的相关接口实现在LCD屏幕上显示一种纯色(红色),注意LCD屏每个像素点都是4字节(ARGB),一般是把颜色以十六进制形式写入到LCD屏像素点中,进行程序设计。

  • 设计程序,实现在开发板的LCD屏幕显示德国国旗,拓展:在开发板的LCD上画一个圆

image

image

  • 设计程序,实现在开发板的LCD屏幕中心显示一个红色的园,且背景是白色

image

思考

  • 如果后期开发过程中LCD屏的型号发生更换,那么请问上述代码是否可以正常运行?

      回答:不可以,因为程序的可移植性较差,为了提高程序的可移植性,则需要根据LCD屏幕实际的硬件参数来申请内存。

posted @ 2025-05-21 16:05  努力赚钱的小智  阅读(499)  评论(0)    收藏  举报