一、lcd 屏的分类
STN是早期彩屏的主要器件, 一般的STN仍然是256色的,优点是:价格低,能耗小。
TFT的亮度好,对比度高,层次感强,颜色鲜艳。缺点是比较耗电,成本较高。
UFB是专门为移动电话和PDA设计的显示屏,它的特点是:超薄,高亮度。可以显示65536色, 耗电比TFT少,价格和STN差不多。
OLED (Organic Light Emitting Display)即有机发光显示器,在手机LCD上属于新型产品,被称誉为“梦幻显示器”。OLED显示技术与传统的LCD显示方式不同,无需背光灯。
在mini2440 中 我们使用的是sony 的X35 lcd ,属于TFT屏。
二、LCD 系统框图
LCD驱动芯片是控制液晶分子发生变化的模块,它为液晶分子的偏转提供电压。通常情况下,LCD驱动芯片都与液晶屏面板做到一个电路板上。
液晶要能正确的显示图像,除了要有LCD驱动芯片,还要有LCD控制器来给LCD驱动芯片提供必要的数据和控制信号.多数ARM处理器内部都集成有LCD控制器。
三、LCD 控制器
1. REGBANK:由17个可编程的寄存器组和一块
256*16的调色板内存组成,通过这些寄存器,
可以配置LCD控制器.
2. LCDCDMA:一个专用的DMA,它能自动地
把在帧内存中的视频数据传送到LCD驱动器,通
过使用这个DMA通道,视频数据在不需要CPU
的干预的情况下显示在LCD屏上.
为合适的数据格式,比如说4/8位单扫,4位双扫显示模
式,然后通过数据端口VD[23:0]传送视频数据到LCD驱
动器;
4.TIMEGEN: 由可编程的逻辑组成,他生成LCD驱动器
需要的控制信号,比如VSYNC、HSYNC、VCLK和
LEND等,而这些控制信号又与REGBANK寄存器组中
的配置密切相关,通过不同的配置,TIMEGEN就能产
生这些信号的不同值,从而支持不同的LCD驱动器(即不
同的STN/TFT屏)。
LCD上显示,点与点之间的时间间隔为VCLK(像素时钟信号);
当显示到屏幕的最右边就结束这一行(Line),这一行的显示对应时
序图上的HSYNC(水平同步信号)
2. 接下来显示指针又回到屏幕的左边从第二行开始显示,显示指
针在从第一行的右边回到第二行的左边是需要一定的时间的,我
们称之为行切换。
3. 以此类推,显示指针就这样一行一行的显示至矩形的右下角才
把一幅图像(帧:frame)显示完成,这一帧的显示时间在时序图上
表示为VSYNC(垂直同步信号)。
屏规格书可以看出:
某一行的结束到新的一行开始所经历的时间=32dots=行的前消隐+行的肩宽+行的后消隐 (没有对各部分分别规定,只需总和为32)
某一屏的结束到新的一屏开始所经历的时间=16lines=屏的前消隐+屏的肩宽+屏的后消隐
VCLK 的 的频率为5Mhz(频率表)
六、编码实现
//显存地址
unsigned short *lcdbuffer = (unsigned short *)0x30800000;
/***********************************************
Function name : lcd_pin_init
Description : lcd 引脚初始化
Input parameter : none
Return : none
Others :
*************************************************/
void lcd_pin_init(void)
{
rGPCUP=0xffffffff; // Disable Pull-up register
rGPCCON=0xaaaaaaaa; //Initialize VD[7:0],VM,VFRAME,VLINE,VCLK
rGPDUP=0xffffffff; // Disable Pull-up register
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
rGPGUP |= (1<<4) ; //Pull-up Disable
rGPGCON |= (3<<8) ; //GPG4 is LCD_PWREN
}
/***********************************************
Function name : lcd_reg_init
Description : lcd控制器 初始化
Input parameter : none
Return : none
Others :
*************************************************/
void lcd_reg_init(void)
{
//16 bpp for TFT
rLCDCON1 = (CLKVAL << 8)|(3 << 5)|(12 << 1);
rLCDCON2 = (VBPD << 24)|((LCD_HEIGHT-1) << 14)|(VFPD << 6)|(VSPW);
rLCDCON3 = (HBPD << 19)|((LCD_WIDTH-1) << 8)|(HFPD);
rLCDCON4 = HSPW;
rLCDCON5 = (1 << 11)|(1 << 6)|(1 << 3)|(1 << 2)|(1 << 0);
rLCDSADDR1 = (((unsigned int)lcdbuffer >> 22) << 21)|(((unsigned int)lcdbuffer >> 1) & 0x1fffff);
rLCDSADDR2 = (((unsigned int)lcdbuffer + LCD_HEIGHT*LCD_WIDTH*2)>>1) & 0x1fffff;
//关闭调色板
rTPAL = 0;
//rTCONSEL = 0 ; //LPC3600 LCC3600 无效
//屏蔽中断
rLCDINTMSK = (1 << 0);
}
/***********************************************
Function name : lcd_powerEnable
Description : lcd 电源开关
Input parameter : none
Return : none
Others :
*************************************************/
void lcd_powerEnable()
{
rLCDCON1 |= (1 << 0);
}
/***********************************************
Function name : lcd_clean
Description : 清屏
Input parameter : color:将屏幕清成何种颜色
Return : none
Others :
*************************************************/
void lcd_clean(unsigned short color)
{
int i,j;
for(i = 0; i < LCD_HEIGHT; i++)
for(j = 0; j < LCD_WIDTH; j++)
lcdbuffer[i*LCD_WIDTH + j] = color;
}
/***********************************************
Function name : lcd_init
Description : lcd 初始化
Input parameter : none
Return : none
Others :
*************************************************/
void lcd_init(void)
{
lcd_pin_init();
lcd_reg_init();
lcd_powerEnable();
lcd_clean(0xffff);
}
增加模块:三星显示屏的显示原理。
1、三星显示屏 VS 索尼显示屏
1)CPU的寄存器的配置会不一样。
2)LCD驱动器也要配置,是通过SPI协议把数据写过来。
2、SPI 协议 ----时序图
4根线:CS片选信号线 SCL串行时钟线 SDI串行数据输入线 SDO串行数据输出线
SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用。
3、手工写时序 -----I/O模拟
(1)把相应的管脚配置为输出
(2)把输出引脚的电平拉高、拉低定义好相应的宏。
(3)把时序描出来
4、利用通信协议发送数据:
1)有独立的控制模块----只要把数据写到缓存中,数据会自动发送出去。
2)IO口模拟-----把IO配置为输出,然后通过写DAT寄存器把信号拉高拉低一位位发送出去。