ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【ARM嵌入式开发】LCD液晶屏显示原理、色彩模式与显存地址映射详解

【ARM嵌入式开发】LCD液晶屏显示原理、色彩模式与显存地址映射详解 一、LCD 屏幕基础概念1. 分辨率与屏幕尺寸屏幕分辨率指屏幕横向与纵向的像素点个数。例如800×480、1920×10801080P、2560×14402K等。屏幕尺寸以英寸inch为单位测量的是屏幕对角线的长度1 inch2.54cm。清晰度关系分辨率相同尺寸越小-像素密度PPI越高-显示效果越细腻。尺寸相同分辨率越高-显示效果越好。二、像素点与色彩模式每个像素点通过红R、绿G、蓝B三原色按不同比例混合来呈现丰富的颜色。色彩模式每像素所占字节颜色深度 / 特点RGB5652 字节 (16bit)R: 5bit (0~31), G: 6bit (0~63), B: 5bit (0~31)RGB8883 字节 (24bit)R, G, B 各占 8bit (0~255)8bit 面板支持 1670 万色ARGB88884 字节 (32bit)A (透明度), R, G, B 各占 8bitRGB1010104 字节 (32bit)10bit 面板支持 10 亿色常用于专业视频剪辑三、显存Framebuffer与内存映射1. 什么是显存显存Framebuffer是 RAM 中专门用来存放图像数据的内存区域。液晶驱动芯片会按固定的刷新率读取该区域的数据并转换为电信号驱动 LCD 屏点亮对应的像素点。2. 显存大小计算对于分辨率为800×480采用ARGB8888每像素 4 字节模式的屏幕假设开发板物理内存起始地址为 0x80000000大小 512MB范围 0x80000000 - 0xA0000000我们可以划分 0x89000000 作为显存起始首地址。四、LCD 点阵寻址与 C 语言指针操作LCD 的坐标系通常以左上角为原点00x 轴向右递增y 轴向下递增。坐标定位算法对于一块800×480的屏幕如果显存起始地址为 0x89000000要在坐标x,y处绘制一个颜色值为 color 的像素点其物理内存偏移量为C 语言代码实现方法 1一级指针寻址#define LCD_BASE 0x89000000// 将首地址强转为 unsigned int* 指针ARGB8888unsigned int *p (unsigned int *)LCD_BASE;// 在 (x, y) 位置画点void draw_pixel(int x, int y, unsigned int color) {*(p y * 800 x) color;}方法 2二维数组与数组指针寻址// 定义数组指针指向一行包含 800 个元素的数组unsigned int (*p)[800] (unsigned int (*)[800])0x89000000;// 直接像二维数组一样访问 p[y][x]void draw_pixel_2d(int x, int y, unsigned int color) {p[y][x] color;}五、LCD 控制器关键时序信号LCD 控制器与屏幕之间通过以下几根核心时钟与数据线完成通信1.PCLK (Pixel Clock像素时钟)同步像素点发送的时间间隔。2.HSYNC (Horizontal Sync行/水平同步信号)指示一行像素数据发送完毕准备换行。3.VSYNC (Vertical Sync帧/垂直同步信号)指示一帧图像发送完毕准备绘制下一帧。4.DE (Data Enable数据使能信号)指示当前传输的数据为有效的图像像素数据。5.R0-R7 / G0-G7 / B0-B7并行RGB数据总线。屏幕刷新率即每秒绘制的图像帧数常见的标准刷新率为60Hz。六、LCD 驱动配置三步法在嵌入式裸机开发或驱动编写中配置 LCD 通常包含以下三个步骤1.GPIO 引脚复用与电气属性配置将芯片对应的引脚配置为 LCD 功能RGB数据线、PCLK、HSYNC、VSYNC等并配置驱动能力。2.配置 LCD 时钟源PCLK根据屏幕 Handbook 计算并设置时钟分频如将像素时钟配置为31MHZ。3.配置 LCD 控制器寄存器设置分辨率如800×480、前廊/后廊时间HBP/HFP/VBP/VFP、显存首地址0x89000000等。七、总结掌握 LCD 的显存映射与时序原理是嵌入式图形显示的根基。在后续的开发中无论是在裸机上绘制线段/图形还是在 Linux 系统下基于 /dev/fb0 编写 UI亦或是移植 LVGL 等图形库底层都离不开对 Framebuffer 的直接或间接操作。
返回列表