一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 13849|回复: 27

[其他综合] 无意发现一种手机屏挺小巧的,费点功夫驱动成功,上传相关资料。

 火.. [复制链接]
发表于 2012-8-11 00:49 | 显示全部楼层 |阅读模式
这个是NOKIA2720手机的外屏,驱动代码倒是简单,手机是3线串行驱动,拿48块的逻辑分析仪两下都出来了。难的是确定并行的引脚,说来话长就不说了
通过分析逻辑分析仪捕捉的代码,发现指令与SPFD54124B相同,可以认为兼容SPFD54124B。这个驱动IC其实是SEIKO的某型号,因为定制产品,具体对应型号就不知道了。下面附上相关资料。
PS:这个屏淘宝有售,6.5RMB/PCS,分辨率128X160,4096-262K色,支持3线串行与I8080 8BIT并行.据我观察是原装的,显示效果不错,里面背光是单个LED,这样3.xV就可以点亮了。还是老缺点:座子相对难焊些。
2720a.jpg
引脚排列:
1LED+      24LED-
2GND       23GND
3PS          22TE
4GND       21RES
5D0/SDA  20D1
6D2          19D3
7D4          18D5
8D6          17D7
9CS          16DC/SCL
10WR       15RD
11GD        14GND
12VCC      13VIO

3PS(串并切换,接地串行)22TE  可以不用,估计是同步信号。12,13直接3V3,如果CPU是1.8V,13VIO就接1.8方便电平匹配。串行需要:21RES,9CS,5SDA,16SCL,PS接地,不用的脚接地或悬空,除TE。

初始化代码:精华在最后面,参考SPFD54124B。由于那个0X2DRGBSET 命令之后参数有128字节, 没时间人肉转换成代码,有兴趣的坛友从下面上传的分析仪数据自己转吧。
#include "LCD.h"
#include "font8x16.h"
#include "stm32f10x.h"
#include "Myusart.h"
//====================================================================================
void LCD_Write_Sdata (unsigned char Data)
{
    LCD_Data_Out=Data;
    LCD_WR_High();
    LCD_WR_Low();
}
void LCD_Write_Cmd (unsigned char Cmd)
{
    LCD_CS_Low();
    LCD_RS_Low();
    LCD_RD_High();
    LCD_Data_Out=Cmd;
    LCD_WR_High();
    LCD_WR_Low();
}
void LCD_Write_Data (unsigned char Data)
{
    LCD_CS_Low();
    LCD_RS_High();
    LCD_RD_High();
    LCD_Data_Out=Data;
    LCD_WR_High();
    LCD_WR_Low();
}
//====================================================================================
void LCD_SET_XY(unsigned char x,unsigned int y)
{
LCD_Write_Cmd(0x2a);            // Column Address Set
    LCD_Write_Data(0x00);           // x start address bit15-8
    LCD_Write_Data(x);              // x start address bit7-0  
    LCD_Write_Data(0x00);           // x end address bit15-8  
    LCD_Write_Data(0xef);           // x end address bit7-0
   
    LCD_Write_Cmd(0x2b);            // Page Address Set
    LCD_Write_Data((y&0xff00)>>8);  // y start address bit15-8
    LCD_Write_Data(y&0x00ff);       // y start address bit7-0  
    LCD_Write_Data(0x01);           // y end address bit15-8   
    LCD_Write_Data(0x3f);           // y end address bit7-0
        
    LCD_Write_Cmd(0x2c);            // RAM Write Command
}
//====================================================================================
void LCD_Show_Char8(unsigned char c,unsigned char x, unsigned char y)
{
    unsigned char k,Mline,Ctemp;
    LCD_SET_XY(x,y);
    c -= 0x20;
   
    for (Mline=0; Mline<16; Mline++)
    {
        Ctemp=font8x16[c][Mline];
        for(k=0;k<8;k++)
        {
            if(Ctemp&0x01)                  
            {
                LCD_Write_Data(0x07);
    LCD_Write_Data(0xe0);
            }
            else
            {
                LCD_Write_Data(0x00);
    LCD_Write_Data(0x00);
            }
            Ctemp=Ctemp>>1;
        }
        LCD_SET_XY(x,++y);
    }
}
//====================================================================================
void LCD_Show_String8 (unsigned char *String,unsigned char x,unsigned int y)
{
while ( * String )
{
  LCD_Show_Char8( *String++,x,y);
        x+=8;     
}
}
//====================================================================================
void LCD_Clear(void)
{
    unsigned char j;
    unsigned int i;
    LCD_SET_XY(0,0);
    LCD_CS_Low();
    LCD_RS_High();
    LCD_RD_High();
    for(i=0;i<320;i++)   
    {
        for(j=0;j<240;j++)   
        {
            LCD_Write_Sdata (0x00);
            LCD_Write_Sdata (0x00);
        }
    }
    LCD_CS_High();
}
//====================================================================================  
void LCD_Init(void)
{
    LCD_RES_Low();
    Delay_ms(20);
    LCD_RES_High();
    Delay_ms(20);
    //LCD_Write_Cmd(0x01);  
    Delay_ms(20);
   
    LCD_Write_Cmd(0x11);         //Sleep Out,0x10=Sleep In.退出睡眠模式
LCD_Write_Cmd(0x36);         //Idle Mode Off
LCD_Write_Data (0x00);
    LCD_Write_Cmd(0x26);         //Idle Mode Off
LCD_Write_Data (0x04);
   
LCD_Write_Cmd(0x3a);        //interface pixel format,default 18bit接口数据格式,默认18BIT
LCD_Write_Data(0x05);        //16bit pixel format 0X55=16BIT.
LCD_Clear();
LCD_Write_Cmd(0x29);        //Display  On ,0x28=Display Off.显示开启

}
//====================================================================================
从手机捕捉到的开机时逻辑数据
on.rar (286.79 KB, 下载次数: 13, 售价: 5 人民币)

评分

参与人数 1一乐金币 +20 收起 理由
fat + 20 支持研究,多谢分享

查看全部评分

发表于 2012-8-11 01:31 | 显示全部楼层
果断顶起,看来楼上是玩RGB 手机屏的高手啊,我有几片moto A780(E680G)的屏,不知道您熟悉不
回复

使用道具 举报

发表于 2012-8-11 08:15 | 显示全部楼层
没搜到此屏?
回复

使用道具 举报

发表于 2012-8-11 08:29 | 显示全部楼层
原来是高手来的
回复

使用道具 举报

发表于 2012-8-11 08:36 | 显示全部楼层
不是一般的高啊。
回复

使用道具 举报

 楼主| 发表于 2012-8-11 08:41 | 显示全部楼层
果断顶起,看来楼上是玩RGB 手机屏的高手啊,我有几片moto A780(E680G)的屏,不知道您熟悉不
lichuang1005 发表于 2012-8-11 01:31 https://www.yleee.com.cn/images/common/back.gif

RGB的屏没有玩过,因为我平时玩的MCU没有RGB接口,一般都是3,4线串口,I8080,6800之类的接口。A780屏幕确实是RGB的接口,不过没去研究过。
回复

使用道具 举报

 楼主| 发表于 2012-8-11 08:43 | 显示全部楼层
没搜到此屏?
tdc31224 发表于 2012-8-11 08:15 https://www.yleee.com.cn/images/common/back.gif


搜索2720 小液晶,起码有10家在卖,有一家是6块,估计量多还能便宜。我买得是6.5。
回复

使用道具 举报

发表于 2012-8-11 11:09 | 显示全部楼层
回复 6# STMFans


    我的表述有误 我指的是彩色屏幕,moto e680g的屏幕
回复

使用道具 举报

发表于 2012-8-11 11:20 | 显示全部楼层
应该是16bit模式的接口是双排44pin
4.jpg
10.jpg
回复

使用道具 举报

 楼主| 发表于 2012-8-11 11:37 | 显示全部楼层
回复 9# lichuang1005


    MOTO早期的似乎都是RGB接口的屏,你说的这个也是,好麻烦的。我曾经见到E680液晶断了几条线照样显示,只不过色彩不对。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-2 01:02 , Processed in 0.060529 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表