图解LCD硬件原理
扫描二维码
随时随地手机看文章
点击上方「嵌入式云IOT技术圈」,选择「置顶公众号」第一时间查看嵌入式笔记!
来源 | CSDN博客-黄逸芬版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/weixin_42881419/article/details/104189012
001LCD硬件原理
LCD操作原理
- LCD屏幕上的点称为像素
- 屏幕后面有电子枪【红绿蓝】:一边移动,一边发出颜色
- 每来一个clk,移动一个像素
- R、G、B三组线确定颜色
- 接收到HSYNC(水平同步信号)脉冲,电子枪从最右边跳到最左边。(跳到下一行)
- 接收到VSYNC[垂直同步信号]从最下边跳到最上边。(跳到原点)
LCD时序图
LCD硬件原理图
006 LCD设置
打开LCD4.3芯片手册,根据芯片手册设置
2440_LCD时序图
LCD display config
可以通过调整四边黑框调整屏幕边框BPP(bit per pixel)
BPP:在FrameBuffer中每个像素占据多少位,002 S3C2440_LCD控制器
功能:1.从内存中(FrameBuffer)取出某个像素的数据:把FrameBuffer的地址告诉LCD控制器,BPP,分辨率2.配合其他信号把数据发送给LCD:把时序告诉LCD控制器,设置引脚的极性BLOCK DIAGRAM
16BPP
调色板[ palette]本质:内存- 16BPP中,本来用16bit表示1像素,也可用利用调色板,用8位表示;8BPP:伪彩色;16/24BPP:真彩色。
- 过程:FrameBuffer中8bit —> LCD控制器 —> 调色板中取16bit【用8bit作为索引,取出真正的颜色】 —> LCD
003LCD编程_框架与准备
定义结构体
- 定义引脚极性结构体
typedef struct pins_polarity{
int vclk; /* normal:在下降沿获取 */
int rgb; /* normal:高电平表示1 */
int hsync; /* normal:高脉冲 */
int vsync; /* normal:高脉冲 */
}pins_polarity,*p_pins_polarity;
- 定义时序结构体
typedef struct time_sequence{
/* 垂直方向 */
int tvp;/* vysnc脉冲宽度 */
int tvb;/* 上边黑框,Vertical Back porch */
int tvf;/* 下边黑框,Vertical Front porch */
/* 水平方向 */
int thp;/* hysnc脉冲宽度 */
int thb;/* 左边黑框,Horizontal Back porch */
int thf;/* 右边黑框,Horizontal Front porch */
}time_sequence,*p_time_sequence;
- 定义lcd参数结构体
typedef struct lcd_params{
/* 引脚极性 */
pins_polarity pins_pol;
/* 时序 */
pins_sequence time_seq;
/* 分辨率,bpp */
int xres;
int yres;
int bpp;
/* framebuffer的地址 */
unsigned int fb_base;
}lcd_params,*p_lcd_params;
004LCD_编程_抽象出重要结构体
结构体传参
005LCD_LCD控制器
S3C2440_controller.c:根据S3C2440数据手册,设置LCD控制器相关寄存器引脚初始化
void jz2440_lcd_pin_init(void)
{
/* 初始化引脚 : 背光引脚*/
GPBCON