学者之家电子论坛--打造电子工程师共同致富的平台's Archiver

max 发表于 2009-11-25 16:31

p1310的LCD的初始化代码

[attach]3374[/attach]


#define BOARD_P1310
#define P1310_V3

#ifdef BOARD_P1310

/*
#define SCL_L()         (rGPEDAT   &=  ~(1 << 14))
#define SCL_H()         (rGPEDAT   |=  (1 << 14))

#define SDA_L()         (rGPEDAT   &=  ~(1 << 15))
#define SDA_H()         (rGPEDAT   |=  (1 << 15))

#define SCS_L()         (rGPDDAT   &=  ~(1 << 8))
#define SCS_H()         (rGPDDAT   |=  (1 << 8))

#define SET_SDA_IN()    (rGPECON   &= ~(3 << 30))
#define SET_SDA_OUT()   (rGPECON   &= ~(3 << 30) |(1 << 30))
*/
#ifdef P1310_V3
#define SCL_L()         (rGPBDAT   &=  ~(1 << 6))
#define SCL_H()         (rGPBDAT   |=  (1 << 6))

#define SDA_L()         (rGPBDAT   &=  ~(1 << 5))
#define SDA_H()         (rGPBDAT   |=  (1 << 5))

#define SCS_L()         (rGPHDAT   &=  ~(1 << 8))
#define SCS_H()         (rGPHDAT   |=  (1 << 8))

#define SET_SDA_IN()    (rGPBCON   &= ~(3 << 10))
#define SET_SDA_OUT()   (rGPBCON   &= ~(3 << 10) |(1 << 10))
#else
#define SCL_L()         (rGPEDAT   &=  ~(1 << 14))
#define SCL_H()         (rGPEDAT   |=  (1 << 14))

#define SDA_L()         (rGPEDAT   &=  ~(1 << 15))
#define SDA_H()         (rGPEDAT   |=  (1 << 15))

#define SCS_L()         (rGPHDAT   &=  ~(1 << 8))
#define SCS_H()         (rGPHDAT   |=  (1 << 8))

#define SET_SDA_IN()    (rGPECON   &= ~(3 << 30))
#define SET_SDA_OUT()   (rGPECON   &= ~(3 << 30) |(1 << 30))

#endif
static void Delayms(int val)
{        
        volatile int i;
        for(i=2000;i;i--);
}

static void Command(unsigned short comm)
{
    volatile int i=0;
        volatile unsigned char temp;
        temp = 0x70 + 0;            //Set index register
    SCS_L();
    Delayms(2);
        SET_SDA_OUT();
    for(i=0;i<8;i++) {  
        Delayms(2);
        SCL_L();
        Delayms(2);
        if(temp&0x80)
            SDA_H();
        else
            SDA_L();

        temp = temp << 1;
        Delayms(2);
        SCL_H();
        Delayms(2);  
        }

    for(i=0;i<8;i++){
        Delayms(2);
        SCL_L();
        Delayms(2);
        if(comm&0x80)
            SDA_H();
        else      
            SDA_L();

        comm=comm<<1;
        Delayms(2);
        SCL_H();
        Delayms(2);
    }
    Delayms(2);
    SCS_H();
    Delayms(2);
}

static void DATA(unsigned short dat)
{
    volatile int i=0;
        volatile unsigned char temp;

    temp = 0x70 + 2;            //Set index register
    SCS_L();
    Delayms(2);
        SET_SDA_OUT();
    for(i=0;i<8;i++) {  
        Delayms(2);
        SCL_L();
        Delayms(2);
        if(temp&0x80)
            SDA_H();
        else
            SDA_L();

        temp=temp<<1;
        Delayms(2);
        SCL_H();
        Delayms(2);
        }
   
    for(i=0;i<8;i++){
        Delayms(2);
        SCL_L();
        Delayms(2);
        if(dat&0x80)
            SDA_H();
        else      
            SDA_L();

        dat=dat<<1;
        Delayms(2);
        SCL_H();
        Delayms(2);
    }
    Delayms(2);
    SCS_H();
    Delayms(2);
}

void HX8347_init(void)
{
/*
    //gpe14   scl
    rGPECON   &= ~(3 << 28);
    rGPECON   |=  (1 << 28);
    rGPEDAT   |=  (1 << 14);

    //gpe15   sda
    rGPECON   &= ~(3 << 30);
    rGPECON   |=  (1 << 30);
    rGPEDAT   |=  (1 << 15);

    //gpd8    cs
    rGPDCON   &= ~(3 << 16);
    rGPDCON   |=  (1 << 16);
    rGPDDAT   |=  (1 << 8);
*/
#ifdef P1310_V3
    //gpe14   scl
    rGPBCON   &= ~(3 << 12);
    rGPBCON   |=  (1 << 12);
    rGPBDAT   |=  (1 << 6);

    //gpe15   sda
    rGPBCON   &= ~(3 << 10);
    rGPBCON   |=  (1 << 10);
    rGPBDAT   |=  (1 << 5);

    //gpd8    cs
    rGPHCON   &= ~(3 << 16);
    rGPHCON   |=  (1 << 16);
    rGPHDAT   |=  (1 << 8);

    //gpc7    rst
    rGPCCON   &= ~(3 << 14);
    rGPCCON   |=  (1 << 14);
    rGPCDAT   |=  (1 << 7);

   
    rGPCDAT   &=  ~(1 << 7);
    Delayms(2000);
    rGPCDAT   |=  (1 << 7);
#else
    //gpe14   scl
    rGPECON   &= ~(3 << 28);
    rGPECON   |=  (1 << 28);
    rGPEDAT   |=  (1 << 14);

    //gpe15   sda
    rGPECON   &= ~(3 << 30);
    rGPECON   |=  (1 << 30);
    rGPEDAT   |=  (1 << 15);

    //gpd8    cs
    rGPHCON   &= ~(3 << 16);
    rGPHCON   |=  (1 << 16);
    rGPHDAT   |=  (1 << 8);

    //gpc7    rst
    rGPCCON   &= ~(3 << 14);
    rGPCCON   |=  (1 << 14);
    rGPCDAT   |=  (1 << 7);

   
    rGPCDAT   &=  ~(1 << 7);
    Delayms(2000);
    rGPCDAT   |=  (1 << 7);

#endif

    Delayms(20);
    Command(0x0046);DATA(0x0091);//设置gamma值
    Command(0x0047);DATA(0x0011);
    Command(0x0048);DATA(0x0000);
    Command(0x0049);DATA(0x0066);
    Command(0x004A);DATA(0x0037);
    Command(0x004B);DATA(0x0004);
    Command(0x004C);DATA(0x0011);
    Command(0x004D);DATA(0x0077);
    Command(0x004E);DATA(0x0000);
    Command(0x004F);DATA(0x001F);
    Command(0x0050);DATA(0x000F);
    Command(0x0051);DATA(0x0000);
    //240x320 window setting
    Command(0x0002);DATA(0x0000); // Column address start2
    Command(0x0003);DATA(0x0000); // Column address start1
    Command(0x0004);DATA(0x0000); // Column address end2
    Command(0x0005);DATA(0x00EF); // Column address end1
    Command(0x0006);DATA(0x0000); // Row address start2
    Command(0x0007);DATA(0x0000); // Row address start1
    Command(0x0008);DATA(0x0001); // Row address end2
    Command(0x0009);DATA(0x003F); // Row address end1
    // Display Setting
    Command(0x0001);DATA(0x0006); // IDMON=0, INVON=1, NORON=1, PTLON=0
    Command(0x0016);DATA(0x00c8); // MY=0, MX=0, MV=0, ML=1, BGR=0, TEON=0
    Command(0x0023);DATA(0x0095); // N_DC=1001 0101
    Command(0x0024);DATA(0x0095); // PI_DC=1001 0101
    Command(0x0025);DATA(0x00FF); // I_DC=1111 1111
    Command(0x0027);DATA(0x0002); // N_BP=0000 0010
    Command(0x0028);DATA(0x0002); // N_FP=0000 0010
    Command(0x0029);DATA(0x0002); // PI_BP=0000 0010
    Command(0x002A);DATA(0x0002); // PI_FP=0000 0010
    Command(0x002C);DATA(0x0002); // I_BP=0000 0010
    Command(0x002D);DATA(0x0002); // I_FP=0000 0010
    Command(0x003A);DATA(0x0001); // N_RTN=0000, N_NW=001
    Command(0x003B);DATA(0x0001); // PI_RTN=0000, PI_NW=001
    Command(0x003C);DATA(0x00F0); // I_RTN=1111, I_NW=000
    Command(0x003D);DATA(0x0000); // DIV=00
    Delayms(20);
    Command(0x0035);DATA(0x0038); // EQS=38h
    Command(0x0036);DATA(0x0078); // EQP=78h
    Command(0x003E);DATA(0x0038); // SON=38h sources output start time
    Command(0x0040);DATA(0x000F); // GDON=0Fh gate output start time
    Command(0x0041);DATA(0x00F0); // GDOFF  gate output end time
    // Power Supply Setting
    Command(0x0019);DATA(0x0047); // CADJ=0100, CUADJ=100, OSD_EN=1 ,60Hz
    Command(0x0093);DATA(0x000F); // RADJ=1111, 100% osc control
    Delayms(10);
    Command(0x0020);DATA(0x0010); // BT=0100 power control register
    Command(0x001D);DATA(0x0007); // VC1=111 power control register
    Command(0x001E);DATA(0x0000); // VC3=000
    Command(0x001F);DATA(0x0003); // VRH=0011
    Command(0x0044);DATA(0x0047); // VCM=100 0010  
    Command(0x0045);DATA(0x0013); // VDV=1 0001
    Command(0x0057);DATA(0x0002); // Test Mode enable
    Command(0x0055);DATA(0x0000); // VDC_SL=000, VDDD=1.95V
    Command(0x0057);DATA(0x0000); // Test Mode disable
    Delayms(10);
    Command(0x001C);DATA(0x0004); // AP=100
    Delayms(20);
    Command(0x0043);DATA(0x0080); //set VCOMG=1(1.0V-(VCI+0.5V))
    Delayms(5);
    Command(0x001B);DATA(0x0008); // GASENB=0, PON=0, DK=1, XDK=0, VLCD_TRI=0, STB=0
    Delayms(40);
    Command(0x001B);DATA(0x0010); // GASENB=0, PON=1, DK=0, XDK=0, VLCD_TRI=0, STB=0
    Delayms(40);
    // Display ON Setting
    Command(0x0090);DATA(0x007F); // SAP=0111 1111
    Command(0x0026);DATA(0x0004); //GON=0, DTE=0, D=01
    Delayms(50);
    Command(0x0026);DATA(0x0024); //GON=1, DTE=0, D=01
    Delayms(50);
    Command(0x0026);DATA(0x002C); //GON=1, DTE=0, D=11
    Delayms(50);
    Command(0x0026);DATA(0x003C); //GON=1, DTE=1, D=11
    Delayms(50);

    Command(0x0038);DATA(0x0010);
    Delayms(50);
    Command(0x0039);DATA(0x0000);

    Delayms(50);
    Command(0x0070);DATA(0x0066);
    Delayms(50);
    Command(0x0072);DATA(0x0000);
    Delayms(50);
    Command(0x0022);                   //WRITE DATA TO GRAM
}

#endif // #if (BOARD = BOARD_P1310)

wangshaowei 发表于 2009-12-9 20:31

源码都开放了啊

tomsu 发表于 2009-12-11 15:45

LCD IC应该是 SPFD5408 而不是 HX8347 。

max 发表于 2009-12-11 20:28

呵呵,好的。
这个代码 可以 初始化 1310的 lcd

lufthansa 发表于 2010-3-10 16:55

[quote]LCD IC应该是 SPFD5408 而不是 HX8347 。
[size=2][color=#999999]tomsu 发表于 2009-12-11 15:45[/color] [url=http://www.study-bbs.com/redirect.php?goto=findpost&pid=87319&ptid=29230][img]http://www.study-bbs.com/images/common/back.gif[/img][/url][/size][/quote]


lcd是什么型号的啊,看资料里面有hx8347d的手册,应该是hx8347吧

tomsu 发表于 2010-3-11 10:49

[b]回复 [url=http://www.study-bbs.com/redirect.php?goto=findpost&pid=96615&ptid=29230]5#[/url] [i]lufthansa[/i] [/b]


    那可能是我搞错了。能用就好哈:)

页: [1]

Powered by Discuz! Archiver 7.1  © 2001-2009 Comsenz Inc.

302 Found

302 Found


nginx/1.8.0