Chinaunix首页 | 论坛 | 博客
  • 博客访问: 697585
  • 博文数量: 260
  • 博客积分: 7033
  • 博客等级: 少将
  • 技术积分: 2633
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-13 23:15
文章分类

全部博文(260)

文章存档

2012年(2)

2011年(41)

2010年(78)

2009年(139)

我的朋友

分类: LINUX

2009-05-03 17:35:17

ic芯片内部利用seg和com来定位液晶屏上的某个点,然后对该点的颜色值进行设置。
一般128x128的屏幕,ic会使用132x132的,即在行及列上分别多出来4个点。
因为多出来的4个点,所以这四个点都是悬空的,没有进行设置。

在spec中,一般会写
It generates 396 Segment and 132 Common driver circuits.
这个意思就是396 = (128 + 4) x 3。
一个点用3根seg线和1根com线来控制。




出现cross talk(也叫鬼影)现象后,调0xb5寄存器即可,
data:
0x00 ->Cross Line最严重 line 电压翻转
0x01 ->效果最好,采用隔行的电压翻转。这时候比较耗电,所以相同VOP的情况下,屏幕会变暗,此时需要调高VOP的电压值。
0x02
0x03
0x04
0x05
0x06
0x07
设置为0x02 - 0x07这个范围,一般都会是循环的效果,即一个效果好,一个效果差,实际使用过程中要根据具体情况进行设置。


2.如何设置VOP
对应于 0xc0寄存器
其值越大,屏幕越亮。

屏幕越亮,cross talk现象也越轻微。

--------------==================------------------------
对于屏幕的interface,可以分为两大类:
一、根据数据传输的物理接口位数来分:
8位、16位、SLA

二、根绝写数据的方式来分:
1.MCU模式,也就是平时说的CPU模式。
此时CPU直接把数据写到LCD的寄存器中,速度比较慢。

2.RGB interface
一般配合DMA使用,HSYNC/VSYNC/SCL/SDA。
速度比较快,TFT常采用此接口。

70M,在屏幕方面是个什么概念?

但是3000项目中的屏幕,走的是DMA接口方式,同时走的是SPI来控制   初始化!!
对,应该是使用SPI来控制初始化的。


setwindow:
一般MCU方式给屏幕丢数据后,lcd控制器会自动根据当前的屏幕大小,自动进行换行、换列。
但是如果想更新屏幕中的一小块的数据,此时把window设置到屏幕中的这一小片位置就可以了。
这样,往屏幕送数据的时候,就会紧紧更新这一小片的数据。

PAD Center Cordinates:
IC Driver在贴到LCD上面时的坐标值,生产的时候使用。

对Gamma的16个byte的设置是一次性连续写入的。
一般IC会对这种写入Gamma的需要连续输入数据的情况进行特殊设置,在传递数据时,就是得需要一次性送多个数据过去。



对CPU模式下更新屏幕的函数中加入延时操作,就会,看到屏幕慢慢刷屏的效果!
这对理解屏幕的运行原来来说很重要。

在初始化的时候,可以控制屏幕刷屏的方向,比如从左到右,从下到上,等等。


LCD的驱动方式:
B-Type:最传统的方式,有V0 - V5等多级电压进行调整,最高13V。
V0对应到13V,这种情况比较耗电。

Hi-fas:
使用电压差来达到在每个点上有13V电压差的效果,比如Seg=-6.5V, Com = 6.5V,此时一个液晶点上的压差就会达到13V。
IC中内置升压设备。

MLA:
暂时不太了解。


驱动的Frame Inversion,相隔的两帧,一帧是正,另一帧是负。


+++++++   -------
+++++++   -------
+++++++   -------
+++++++   -------


Line Inversion:
隔行翻转

+++++++   -------
-------   +++++++
+++++++   -------
-------   +++++++

Dot Inversion:
隔点翻转。

也可以通过寄存器来设置,隔几行翻转,或者隔几个点翻转。




SPI走的是串口,数据一位一位的传。看5801的代码也是这样,从高位一位一位的送。
并口速度明显要快很多,数据8位或者16位或者18位的传。


/*timing:
        __________                                                                                                                                                                                                                                     ___
CS          \_\___________________________________________________________________________________________________________________________________________________________________________________________________________________________________/_/
    ___________       _______       _______       _______       _______       _______       _______       _______       _______       _______       _______       _______       _______       _______       _______       _______       _______
SCL            \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______1      \______
    ___________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ _____________ ______
SCL ___________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X_____________X______
                      D7            D6            D5            D4            D3            D2            D1            D0            D7            D6            D5            D4            D3            D2            D1            D0
                                                                                                                          __________
CD-----------------------------------------------------------------------------------------------------------------------<__________>-----------------------------------------------------------------------------------------------------------------
*/
void spi_write_byte(uint8 value)
{
  uint1 i=0;
  for(i=0;i<8;i++)
  {
    if((value<    {
                Set_SDA(1);
        }
        else
        {
                Set_SDA(0);
        }

    Set_SCL(1);

    Set_SCL(0);
  }
}

void hal_LcdSendCmd(uint8 cmd)
{
        Set_CS(0);
        Set_SCL(0);
        Set_CD(0);
        spi_write_byte(cmd);
        Set_CS(1);
}

void  hal_LcdSendData(uint8 *pData,        uint16 length)
{
        uint2 i;
        Set_CS(0);
        Set_SCL(0);
        Set_CD(1);
        for(i=0;i        {
                spi_write_byte((*(pData+i)));
        }
        Set_CS(1);
}





在刷新屏幕的函数中延时超过10000,将导致CDMA的软件更新工具无法与手机建立连接。
虽然LCD的背光关了,但是LCD还是在刷新呢。。。也就是说CPU还是在后台运行的。

如果把LCD也关了,那么刷新就不会体现在屏幕上了。



5801项目中,使用GPIO来模拟SPI口。
SPI好像是光发不收的,对于MCU来说。
阅读(1039) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~