一、LCD 屏幕基础概念
1. 分辨率与屏幕尺寸
屏幕分辨率 :指屏幕横向与纵向的像素点个数。例如 800×480、1920×1080(1080P)、2560×1440(2K)等。
屏幕尺寸 :以英寸(inch)为单位,测量的是屏幕对角线的长度(1 inch=2.54cm)。
清晰度关系 :
分辨率相同 ,尺寸越小 -> 像素密度(PPI)越高 -> 显示效果越细腻。
尺寸相同 ,分辨率越高 -> 显示效果越好。
二、像素点与色彩模式
每个像素点通过 红(R)、绿(G)、蓝(B) 三原色按不同比例混合来呈现丰富的颜色。
|-------------------|-----------------|---------------------------------------------------|
| 色彩模式 | 每像素所占字节 | 颜色深度 / 特点 |
| RGB565 | 2 字节 (16bit) | R: 5bit (0~31), G: 6bit (0~63), B: 5bit (0~31) |
| RGB888 | 3 字节 (24bit) | R, G, B 各占 8bit (0~255),8bit 面板,支持 1670 万色 |
| ARGB8888 | 4 字节 (32bit) | A (透明度), R, G, B 各占 8bit |
| RGB101010 | 4 字节 (32bit) | 10bit 面板,支持 10 亿色(常用于专业视频剪辑) |
三、显存(Framebuffer)与内存映射
1. 什么是显存?
显存(Framebuffer)是 RAM 中专门用来存放图像数据的内存区域。液晶驱动芯片会按固定的刷新率读取该区域的数据,并转换为电信号驱动 LCD 屏点亮对应的像素点。
2. 显存大小计算
对于分辨率为 800×480,采用 ARGB8888 (每像素 4 字节)模式的屏幕:

假设开发板物理内存起始地址为 0x80000000(大小 512MB,范围 0x80000000 - 0xA0000000),我们可以划分 0x89000000 作为显存起始首地址。
四、LCD 点阵寻址与 C 语言指针操作
LCD 的坐标系通常以左上角为原点 ( 0,0 ) ,x 轴向右递增,y 轴向下递增。
坐标定位算法
对于一块800×480的屏幕,如果显存起始地址为 0x89000000,要在坐标 (x,y) 处绘制一个颜色值为 color 的像素点,其物理内存偏移量为:

C 语言代码实现
方法 1:一级指针寻址
#define LCD_BASE 0x89000000
// 将首地址强转为 unsigned int* 指针(ARGB8888)
unsigned 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;
// 直接像二维数组一样访问 pyx
void draw_pixel_2d(int x, int y, unsigned int color) {
pyx = 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 的直接或间接操作。