搜索
bottom↓
回复: 11

魏坤,能给个HX8347的例程吗

[复制链接]

出0入0汤圆

发表于 2009-6-23 19:14:28 | 显示全部楼层 |阅读模式
可以给个例程吗,找了两个,都是stm32的,而且初始化还不一样,希望能给一个例程看看。

我的一直都不能显示,参照了论坛上的ILI9320的,以及自己找的一些HX8347的程序,可是都不成功,一点现象都没有,无能为力了已经。

而且不知道屏是不是好的呢,因为我看它黄纸贴的连接处的连线都没有对齐就焊上了,不知道有没有问题啊。

对了,我是先用两节5号电池供电,LED-A接+5,LED-K1~K3接地,数据线通过3.3k电阻和单片机相连

出0入0汤圆

 楼主| 发表于 2009-6-23 19:17:49 | 显示全部楼层
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

#define NOP() asm("nop")

#define U8 unsigned char
#define U16 unsigned int
#define U32 unsigned long


#define DATA_LO_DDR  DDRA
#define DATA_LO_PORT PORTA
#define DATA_LO_PIN  PINA

#define DATA_HI_DDR  DDRF
#define DATA_HI_PORT PORTF
#define DATA_HI_PIN  PINF


#define LCD_CS_DDR  DDRB
#define LCD_CS_PORT PORTB
#define LCD_CS_BIT  0


#define LCD_RS_DDR  DDRB
#define LCD_RS_PORT PORTB
#define LCD_RS_BIT  1


#define LCD_WR_DDR  DDRB
#define LCD_WR_PORT PORTB
#define LCD_WR_BIT  2


#define LCD_RST_DDR  DDRB
#define LCD_RST_PORT PORTB
#define LCD_RST_BIT  3

#define LCD_CS_H() LCD_CS_PORT |= 1<<LCD_CS_BIT
#define LCD_CS_L() LCD_CS_PORT &= ~(1<<LCD_CS_BIT)

#define LCD_RS_H() LCD_RS_PORT |= 1<<LCD_RS_BIT
#define LCD_RS_L() LCD_RS_PORT &= ~(1<<LCD_RS_BIT)

#define LCD_WR_H() LCD_WR_PORT |= 1<<LCD_WR_BIT
#define LCD_WR_L() LCD_WR_PORT &= ~(1<<LCD_WR_BIT)

#define LCD_RST_H() LCD_RST_PORT |= 1<<LCD_RST_BIT
#define LCD_RST_L() LCD_RST_PORT &= ~(1<<LCD_RST_BIT)


static void Delay_nus(unsigned int Time)
{
     unsigned int TimeCounter = 0;
         for (TimeCounter = 0;TimeCounter < Time;TimeCounter ++)
         {
             asm("nop");
         }
}

static void Delay_nms(unsigned int Time)
{
    unsigned int TimeCounter = 0;
       
        for (TimeCounter = 0;TimeCounter < Time;TimeCounter ++)
        {
            Delay_nus(1300);
        }
}

       
void WriteI(U16 c)
{
  LCD_CS_H();
  LCD_WR_H();//CS=WR=1;
  LCD_RS_L();//RS=0;

  DATA_LO_PORT = (unsigned char)c;
  DATA_HI_PORT = (unsigned char)(c>>8);//DB=c;
  
  LCD_CS_L();//CS=0;
  LCD_WR_L();//WR=0;
  NOP();
  NOP();
  LCD_WR_H();//WR=1;
  LCD_CS_H();//CS=1;
}

void WriteD(U16 d)
{
  LCD_CS_H();
  LCD_WR_H();//CS=WR=1;
  LCD_RS_H();//RS=1;

  DATA_LO_PORT = (unsigned char)d;
  DATA_HI_PORT = (unsigned char)(d>>8);//DB=d;
  
  LCD_CS_L();//CS=0;
  LCD_WR_L();//WR=0;
  NOP();
  NOP();
  LCD_WR_H();//WR=1;
  LCD_CS_H();//CS=1;
}

void Init_Data(U16 c,U16 d)
{
  WriteI(c);
  WriteD(d);
}

void LCD_Write_Start(void)
{
        LCD_CS_H();
        LCD_WR_H();
        LCD_RS_L();
        DATA_LO_PORT = 0x22;
        DATA_HI_PORT = 0x00;
        LCD_CS_L();
        LCD_WR_L();
        NOP();
        NOP();
        LCD_WR_H();
        LCD_RS_H();
}

void LCD_Write_Data(unsigned int val)
{
        DATA_LO_PORT = (unsigned char)val;
        DATA_HI_PORT = (unsigned char)(val>>8);
        LCD_WR_L();
        NOP();
        NOP();
        LCD_WR_H();
}

void LCD_Write_End(void)
{
        LCD_CS_H();
}

void Initial(void)  
{  
//=========Initial HX8347  for INL2.8"QVGA Panel======//
  LCD_RST_H();
  Delay_nms(10); // Delay 1ms
  LCD_RST_L();
  Delay_nms(10); // Delay 10ms
  LCD_RST_H();
  Delay_nms(150); // Delay 150 ms

  Init_Data(0x0042,0x0008);  
//Gamma setting
  Init_Data(0x0046,0x00B4);
  Init_Data(0x0047,0x0043);
  Init_Data(0x0048,0x0013);
  Init_Data(0x0049,0x0047);
  Init_Data(0x004A,0x0014);
  Init_Data(0x004B,0x0036);
  Init_Data(0x004C,0x0003);
  Init_Data(0x004D,0x0046);
  Init_Data(0x004E,0x0005);
  Init_Data(0x004F,0x0010);
  Init_Data(0x0050,0x0008);
  Init_Data(0x0051,0x000a);
  
//Window Setting

  Init_Data(0x0002,0x0000);
  Init_Data(0x0003,0x0000);
  Init_Data(0x0004,0x0000);
  Init_Data(0x0005,0x00EF);
  Init_Data(0x0006,0x0000);
  Init_Data(0x0007,0x0000);
  Init_Data(0x0008,0x0001);
  Init_Data(0x0009,0x003F);


  Delay_nms(10);


  Init_Data(0x0001,0x0006);


  
  Init_Data(0x0016,0x00C8);  
  Init_Data(0x0023,0x0095);
  Init_Data(0x0024,0x0095);
  Init_Data(0x0025,0x00FF);
  Init_Data(0x0027,0x0002);
  Init_Data(0x0028,0x0002);
  Init_Data(0x0029,0x0002);
  Init_Data(0x002A,0x0002);
  Init_Data(0x002C,0x0002);
  Init_Data(0x002D,0x0002);

  Init_Data(0x003A,0x0001);
  Init_Data(0x003B,0x0001);
  Init_Data(0x003C,0x00F0);   
  Init_Data(0x003D,0x0000);

  Delay_nms(20);

  Init_Data(0x0035,0x0038);
  Init_Data(0x0036,0x0078);
  Init_Data(0x003E,0x0038);
  Init_Data(0x0040,0x000F);
  Init_Data(0x0041,0x00F0);

  Init_Data(0x0038,0x0000);

// Power Setting

  Init_Data(0x0019,0x0049);
  Init_Data(0x0093,0x000A);

  Delay_nms(10);

  Init_Data(0x0020,0x0020);  

  Init_Data(0x001D,0x0003);  
  Init_Data(0x001E,0x0000);

  Init_Data(0x001F,0x0009);  

  Init_Data(0x0044,0x0053);
  Init_Data(0x0045,0x0010);  


  Delay_nms(10);

  Init_Data(0x001C,0x0004);

  Delay_nms(20);

  Init_Data(0x0043,0x0080);   

  Delay_nms(5);

  Init_Data(0x001B,0x000a);   

  Delay_nms(40);

  Init_Data(0x001B,0x0012);   

  Delay_nms(40);  
//Display On Setting

  Init_Data(0x0090,0x007F);
  Init_Data(0x0026,0x0004);

  Delay_nms(40);

  Init_Data(0x0026,0x0024);
  Init_Data(0x0026,0x002C);

  Delay_nms(40);  
  Init_Data(0x0070,0x0008);
  Init_Data(0x0026,0x003C);
  Init_Data(0x0057,0x0002);
  Init_Data(0x0055,0x0000);
  Init_Data(0x0057,0x0000);
  WriteI(0x0022);

}


void WriteColor(U32 color)
{
  LCD_RS_H();//RS=1;
  DATA_LO_PORT = (unsigned char)color;
  DATA_HI_PORT = (unsigned char)(color>>8);//DB= color;
  LCD_CS_L();//CS=0;
  LCD_WR_L();//WR=0;
  LCD_WR_H();//WR=1;
  LCD_CS_H();//CS=1;
}

void Ramset(U16 startx,U16 starty,U16 endx,U16 endy)
{

Init_Data(0x0002,startx/256);
Init_Data(0x0003,startx);
Init_Data(0x0004,endx/256);
Init_Data(0x0005,endx);
Init_Data(0x0006,starty/256);
Init_Data(0x0007,starty);
Init_Data(0x0008,endy/256);
Init_Data(0x0009,endy);
Init_Data(0x0016,0x00C8);
WriteI(0x0022);

}




void DrawBlock (U16 startx,U16 starty,U16 endx,U16 endy,U32 color)
{
U16 i,j;


Init_Data(0x0002,startx/256);
Init_Data(0x0003,startx);
Init_Data(0x0004,endx/256);
Init_Data(0x0005,endx);
Init_Data(0x0006,starty/256);
Init_Data(0x0007,starty);
Init_Data(0x0008,endy/256);
Init_Data(0x0009,endy);
Init_Data(0x0016,0x00C8);
WriteI(0x0022);

for(i=starty;i<=endy;i++)
   {
     for(j=startx;j<=endx;j++)
     {
       WriteColor(color);
     }
   }
}

void LCD_test(void)
{
        unsigned int i,j;
        LCD_Write_Start();
        for(i=0;i<320;i++)
                for(j=0;j<240;j++)
                {
                        if(i>279)LCD_Write_Data(0x0000);
                        else if(i>239)LCD_Write_Data(0x001f);
                        else if(i>199)LCD_Write_Data(0x07e0);
                        else if(i>159)LCD_Write_Data(0x07ff);
                        else if(i>119)LCD_Write_Data(0xf800);
                        else if(i>79)LCD_Write_Data(0xf81f);
                        else if(i>39)LCD_Write_Data(0xffe0);
                        else LCD_Write_Data(0xffff);
                }
        LCD_Write_End();
}

int main(void)
{
        DATA_LO_DDR=0XFF;
        DATA_HI_DDR=0XFF;
        DDRB=0XFF;
        Initial();
        LCD_test();
        //Standbyin();
        //Standbyout();
        while(1);
        return 0;
}

出0入0汤圆

 楼主| 发表于 2009-6-23 19:20:08 | 显示全部楼层
我用的WinAVR编译,可以通过,对了,上面的Standbyin和Standbyout不知道是干什么的,是我找的HX8347的程序里带的。

出0入0汤圆

发表于 2009-9-26 15:52:26 | 显示全部楼层
LZ:能给个HX8347的資料(手冊)嗎?

出0入21汤圆

发表于 2009-9-26 16:58:38 | 显示全部楼层
#include <mega128.h>
#include <AsciiLib.c>
flash unsigned char palette[]={0x00,0x00,0xf8,0x00,0x07,0xe0,0x00,0x1f,0xf8,0x1f,0xff,0xe0,0x07,0xff,0xff,0xff,0xfc,0x08,0x0e,0xff};
/*#define   RS    PORTE.2//红色:0xf800
//绿色:0x07e0
//蓝色:0x001f
//黄色:0xffe0  红绿混合
//紫色:0xf81f  红蓝混合
//青色:0x07ff  蓝绿混合  
//天蓝:0x0eff   
//橘黄:0xfe00   
#define   WR    PORTE.3
#define   RESET PORTE.1*/
#define   RS    PORTE.1
#define   WR    PORTE.2
#define   RESET PORTE.3
#define   LCD_DATA_L PORTA
#define   LCD_DATA_H PORTF
unsigned char lcd_buffer[100],vort[10];

  

void WMLCDCOM(unsigned char data_1,unsigned char data_2)
{   
        RS=0;
        PORTF=data_1;
        PORTA=data_2;
        WR=0;
        WR=1;
}
  
void WMLCDDATA(unsigned char data_1,unsigned char data_2)
{   
        RS=1;
        PORTF=data_1;
        PORTA=data_2;
        WR=0;
        WR=1;
}


void INIT()       
{   
//************* RESET LCD Driver ****************//

    RESET=1;
    delay_ms(100);
    RESET=0;                                
    delay_ms(100);
    RESET=1;                     
    delay_ms(100);  
        WMLCDCOM(0x00, 0x46);WMLCDDATA(0x00, 0x91);
        WMLCDCOM(0x00, 0x47);WMLCDDATA(0x00, 0x11);
        WMLCDCOM(0x00, 0x48);WMLCDDATA(0x00, 0x00);
        WMLCDCOM(0x00, 0x49);WMLCDDATA(0x00, 0x66);
        WMLCDCOM(0x00, 0x4A);WMLCDDATA(0x00, 0x37);
        WMLCDCOM(0x00, 0x4B);WMLCDDATA(0x00, 0x04);
        WMLCDCOM(0x00, 0x4C);WMLCDDATA(0x00, 0x11);
        WMLCDCOM(0x00, 0x4D);WMLCDDATA(0x00, 0x77);
        WMLCDCOM(0x00, 0x4E);WMLCDDATA(0x00, 0x00);
        WMLCDCOM(0x00, 0x4F);WMLCDDATA(0x00, 0x1F);
        WMLCDCOM(0x00, 0x50);WMLCDDATA(0x00, 0x0F);
        WMLCDCOM(0x00, 0x51);WMLCDDATA(0x00, 0x00);
        //240x320 window setting
        WMLCDCOM(0x00, 0x02);WMLCDDATA(0x00, 0x00); // Column address start2
        WMLCDCOM(0x00, 0x03);WMLCDDATA(0x00, 0x00); // Column address start1
        WMLCDCOM(0x00, 0x04);WMLCDDATA(0x00, 0x00); // Column address end2
        WMLCDCOM(0x00, 0x05);WMLCDDATA(0x00, 0xEF); // Column address end1
        WMLCDCOM(0x00, 0x06);WMLCDDATA(0x00, 0x00); // Row address start2
        WMLCDCOM(0x00, 0x07);WMLCDDATA(0x00, 0x00); // Row address start1
        WMLCDCOM(0x00, 0x08);WMLCDDATA(0x00, 0x01); // Row address end2
        WMLCDCOM(0x00, 0x09);WMLCDDATA(0x00, 0x3F); // Row address end1
        // Display Setting
        WMLCDCOM(0x00, 0x01);WMLCDDATA(0x00, 0x06); // IDMON=0, INVON=1, NORON=1, PTLON=0
        WMLCDCOM(0x00, 0x16);WMLCDDATA(0x00, 0xc8); // MY=0, MX=0, MV=0, ML=1, BGR=0, TEON=0
        WMLCDCOM(0x00, 0x23);WMLCDDATA(0x00, 0x95); // N_DC=1001 0101
        WMLCDCOM(0x00, 0x24);WMLCDDATA(0x00, 0x95); // PI_DC=1001 0101
        WMLCDCOM(0x00, 0x25);WMLCDDATA(0x00, 0xFF); // I_DC=1111 1111
        WMLCDCOM(0x00, 0x27);WMLCDDATA(0x00, 0x02); // N_BP=0000 0010
        WMLCDCOM(0x00, 0x28);WMLCDDATA(0x00, 0x02); // N_FP=0000 0010
        WMLCDCOM(0x00, 0x29);WMLCDDATA(0x00, 0x02); // PI_BP=0000 0010
        WMLCDCOM(0x00, 0x2A);WMLCDDATA(0x00, 0x02); // PI_FP=0000 0010
        WMLCDCOM(0x00, 0x2C);WMLCDDATA(0x00, 0x02); // I_BP=0000 0010
        WMLCDCOM(0x00, 0x2D);WMLCDDATA(0x00, 0x02); // I_FP=0000 0010
        WMLCDCOM(0x00, 0x3A);WMLCDDATA(0x00, 0x01); // N_RTN=0000, N_NW=001
        WMLCDCOM(0x00, 0x3B);WMLCDDATA(0x00, 0x01); // PI_RTN=0000, PI_NW=001
        WMLCDCOM(0x00, 0x3C);WMLCDDATA(0x00, 0xF0); // I_RTN=1111, I_NW=000
        WMLCDCOM(0x00, 0x3D);WMLCDDATA(0x00, 0x00); // DIV=00
        delay_ms(20);
        WMLCDCOM(0x00, 0x35);WMLCDDATA(0x00, 0x38); // EQS=38h
        WMLCDCOM(0x00, 0x36);WMLCDDATA(0x00, 0x78); // EQP=78h
        WMLCDCOM(0x00, 0x3E);WMLCDDATA(0x00, 0x38); // SON=38h
        WMLCDCOM(0x00, 0x40);WMLCDDATA(0x00, 0x0F); // GDON=0Fh
        WMLCDCOM(0x00, 0x41);WMLCDDATA(0x00, 0xF0); // GDOFF
        // Power Supply Setting
        WMLCDCOM(0x00, 0x19);WMLCDDATA(0x00, 0x47); // CADJ=0100, CUADJ=100, OSD_EN=1 ,60Hz
        WMLCDCOM(0x00, 0x93);WMLCDDATA(0x00, 0x0F); // RADJ=1111, 100%
        delay_ms(20);
        WMLCDCOM(0x00, 0x20);WMLCDDATA(0x00, 0x40); // BT=0100
        WMLCDCOM(0x00, 0x1D);WMLCDDATA(0x00, 0x07); // VC1=111
        WMLCDCOM(0x00, 0x1E);WMLCDDATA(0x00, 0x00); // VC3=000
        WMLCDCOM(0x00, 0x1F);WMLCDDATA(0x00, 0x03); // VRH=0011
        WMLCDCOM(0x00, 0x44);WMLCDDATA(0x00, 0x50); // VCM=101 0000
        WMLCDCOM(0x00, 0x45);WMLCDDATA(0x00, 0x13); // VDV=1 0001
        delay_ms(20);
        WMLCDCOM(0x00, 0x1C);WMLCDDATA(0x00, 0x04); // AP=100
        delay_ms(20);
        WMLCDCOM(0x00, 0x43);WMLCDDATA(0x00, 0x80); //set VCOMG=1
        delay_ms(20);
        WMLCDCOM(0x00, 0x1B);WMLCDDATA(0x00, 0x08); // GASENB=0, PON=0, DK=1, XDK=0, VLCD_TRI=0, STB=0
        delay_ms(50);
        WMLCDCOM(0x00, 0x1B);WMLCDDATA(0x00, 0x10); // GASENB=0, PON=1, DK=0, XDK=0, VLCD_TRI=0, STB=0
        delay_ms(50);
        // Display ON Setting
        WMLCDCOM(0x00, 0x90);WMLCDDATA(0x00, 0x7F); // SAP=0111 1111
        WMLCDCOM(0x00, 0x26);WMLCDDATA(0x00, 0x04); //GON=0, DTE=0, D=01
        delay_ms(60);
        WMLCDCOM(0x00, 0x26);WMLCDDATA(0x00, 0x24); //GON=1, DTE=0, D=01
        delay_ms(60);
        WMLCDCOM(0x00, 0x26);WMLCDDATA(0x00, 0x2C); //GON=1, DTE=0, D=11
        delay_ms(60);
        WMLCDCOM(0x00, 0x26);WMLCDDATA(0x00, 0x3C); //GON=1, DTE=1, D=11
        delay_ms(60);
        WMLCDCOM(0x00, 0x22);                  //WRITE DATA TO GRAM
}


void lcd_display_area(unsigned int StartX, unsigned int StartY,unsigned int EndX, unsigned int EndY)
{
        WMLCDCOM(0x00, 0x02);
        WMLCDDATA(0x00, StartY>>8);
        WMLCDCOM(0x00,0x03);
        WMLCDDATA(0x00, StartY);
        WMLCDCOM(0x00, 0x04);
        WMLCDDATA(0x00, EndY>>8);
        WMLCDCOM(0x00, 0x05);
        WMLCDDATA(0x00, EndY);
        WMLCDCOM(0x00, 0x06);
        WMLCDDATA(0x00, StartX>>8);
        WMLCDCOM(0x00, 0x07);
        WMLCDDATA(0x00, StartX);
        WMLCDCOM(0x00, 0x08);
        WMLCDDATA(0x00, EndX>>8);
        WMLCDCOM(0x00, 0x09);
        WMLCDDATA(0x00, EndX);
        WMLCDCOM(0x00, 0x22);
}

出0入0汤圆

发表于 2010-10-26 21:35:21 | 显示全部楼层
回复【楼主位】zhseedling  
-----------------------------------------------------------------------

感谢你的代码,我也点亮了

补充一小点,RD要接一个高电平,否则不亮

出0入0汤圆

发表于 2010-10-26 23:24:54 | 显示全部楼层
昆是个好人

出0入0汤圆

发表于 2011-5-29 00:11:35 | 显示全部楼层
mark mark

出0入0汤圆

发表于 2011-9-1 10:50:17 | 显示全部楼层
为什么我的没办法复位,必须把屏幕电源拔掉,开机才有一定的几率显示成功。。

出0入0汤圆

发表于 2011-12-8 10:39:37 | 显示全部楼层
回复【8楼】aishiqi1992 小鸡
为什么我的没办法复位,必须把屏幕电源拔掉,开机才有一定的几率显示成功。。
-----------------------------------------------------------------------
    继续BS你,呵呵。

    我用的HX8347D,读取ID总为0,用厂家提供的初始化代码,白屏中。

出0入0汤圆

发表于 2012-5-23 14:06:20 | 显示全部楼层
学习了,RD是关键啊,解决了大问题

出0入0汤圆

发表于 2012-8-1 11:25:49 | 显示全部楼层
8bit 数据 与 16bit 数据的初始化程序主要是什么区别呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 10:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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