LCD控制器

来源:互联网 发布:php获取js的变量 编辑:程序博客网 时间:2024/05/01 09:26

点此回顾上课学习内容

2440的lcd控制器可以驱动 STN LCD 和 TFT LCD 本文以较为常见的 TFT LCD 来讲解使用方法:

基础知识:

首先, 我们来看下2440的 lcd controller 组成框图:
这里写图片描述

  • REGBANK: LCD控制器的寄存器组, 含有17个寄存器及一块256x16的调色板

  • LCDCDMA: LCD控制器的专用DMA通道, 可以自动从系统总线上获取图像数据, 显示图像时不需要cpu core的参与

  • TIMEGEN / LPC3600: 产生控制时序, 如: VSYNC, HSYNC, VCLK, VDEN, 而这些信号又与REGBANK中的LCDCON1/2/3/4的配置密切相关, 通过不同的配置产生不同的控制信号. 然后从VIDEO MUX中传递给液晶屏(LPC3600为STN屏专用)

  • VIDPRCS: 接收LCDCDMA 的数据, 然后转换为合适的数据格式, 比如 4 bit单扫 / 8ibt单扫 /4bit双扫, 然后由 VD[23:0]来显示

其次, 我们来分析一下lcd controller和lcd的时序框图:

这里写图片描述
这里写图片描述
这里写图片描述

VSYNC/VFRAME/STV:垂直同步信号(TFT)/帧同步信号(STN)/SEC TFT信号HSYNC/VLINE/CPV: 水平同步信号(TFT)/行同步脉冲信号(STN)/SEC TFT信号VCLK/LCD_HCLK:   像素时钟信号(TFT/STN)/SEC TFT信号VD[23:0]:        LCD像素数据输出端口(TFT/STN/SEC TFT)VDEN/VM/TP:      数据使能信号(TFT)/LCD驱动交流偏置信号(STN)/SEC TFT 信号LEND/STH:        行结束信号(TFT)/SEC TFT信号LCD_LPCOE:       SEC TFT OE信号LCD_LPCREV:      SEC TFT REV信号LCD_LPCREVB:     SEC TFT REVB信号
所有显示器显示图像的原理都是从上到下,从左到右的。这是什么意思呢?这么说吧,一副图像可以看做是一个矩形,由很多排列整齐的点一行一行组成,这些点称之为像素。那么这幅图在LCD上的显示原理就是:
A:显示指针从矩形左上角的第一行第一个点开始,一个点一个点的在LCD上显示,在上面的时序图上表示为VCLK,我们称之为像素时钟信号B:当显示指针一直显示到矩形的右边就结束这一行,那么这一行的动作在上面的时序图中就称之为1 LineC:接下来显示指针又回到矩形的左边从第二行开始显示,注意,显示指针在从第一行的右边回到第二行的左边是需要一定的时间的,我们称之为行切换D:如此类推,显示指针就这样一行一行的显示至矩形的右下角才把一副图显示完成。行的显示在时序图上看就是HSYNCE:然而,LCD要显示多个图片就要一幅一幅的切换, 那么这每一幅图像就称之为帧,在时序图上就表示为1 Frame,因此从时序图上可以看出1 Line只是1 Frame中的一行F:同样的,在帧与帧切换之间也是需要一定的时间的,我们称之为帧切换,那么LCD整个显示的过程在时间线上看,就可表示为时序图上的VSYNC
上面时序图上各时钟延时参数的含义如下:(这些参数的值,LCD产生厂商会提供相应的数据手册,如上面lcd推荐值)
VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数,对应驱动中的upper_marginVFBD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应驱动中的lower_marginVSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算,对应驱动中的vsync_lenHBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数,对应驱动中的left_marginHFPD(horizontal front porth):表示一行的有效数据结束到下一个水平同步信号开始之间的VCLK的个数,对应驱动中的right_marginHSPW(horizontal sync pulse width):表示水平同步信号的宽度,用VCLK计算,对应驱动中的hsync_len

这里写图片描述

使用LCD的步骤:

  Lcd_Port_Init();                     // 设置LCD引脚  Tft_Lcd_Init(MODE_TFT_16BIT_240320); // 初始化LCD控制器, 这里配置了液晶的显示模式, 如: 分辨率 240x320 颜色深度 16bit  Lcd_PowerEnable(0, 1);               // 设置LCD_PWREN有效,它用于打开LCD的电源  Lcd_EnvidOnOff(1);                   // 使能LCD控制器输出信号  ClearScr(0x0);                       // 清屏,黑色

实例测试:

本程序在main函数中通过串口输出一个菜单,用于选择LCD的显示模式并进行测试。

注释:代码中都有注释,结合手册容易明白,难的是时序
[代码下载点我]

原创粉丝点击