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来说。
阅读(1093) | 评论(0) | 转发(0) |