|
发表于 2010-11-5 16:18:10
|
显示全部楼层
回复【10楼】zuoyi001 左移一度 回复【11楼】90999 张耀扬
-----------------------------------------------------------------------
因为最近工作较忙,所以那个屏我一直没有时间去整,不过看到了【11楼】的回复,我加班加点把这个屏点亮了,现公布代码和测试图片。
回复【1楼】 90999 张耀扬
-----------------------------------------------------------------------
我用的屏和你的一模一样,是XT240364SG,硬件连接特性为:
CPU:STC89LE58RD+
LCD:采用i80/16-bit System Interface,用到LCD的 :DB[17:10],DB[8:1],CS,RS,/WR共 19根数据线,第四脚IM3接地。
因为你四楼的初始化代码用的是RGB18接口,并且像素扫描设置的有点乱,所以我将它改为i80/16-bit System Interface,改了像素扫描设置。
还有这个LCD里面有四个灯,是串联的,需要12V电压才能点亮,我把它拆了改成了四灯并联,3.3V电压加一个33R的限流电阻就行了。
i80/16-bit System Interface初始化代码如下:
/**************************************************************************************************/
void LcdInitialization()
{
//LCD_CtrlWrite_ILI9320(0x00E5, 0x8000); // Set the internal vcore voltage
LCDCOM(0x00,0xE5); LCDDATA(0x80,0x00); Delay(1000); //Delay 1S
//LCD_CtrlWrite_ILI9320(0x0000, 0x0001); // Start internal OSC.
LCDCOM(0x00,0x00); LCDDATA(0x00,0x01); Delay(2000);
//LCD_CtrlWrite_ILI9320(0x0001, 0x0100); // set SS and SM bit R01H, //R60H,R03H:设置扫描方向,从上到下,从左到右
LCDCOM(0x00,0x01); LCDDATA(0x01,0x00);
//LCD_CtrlWrite_ILI9320(0x0002, 0x0700); // set 1 line inversion
LCDCOM(0x00,0x02); LCDDATA(0x07,0x00);
//LCD_CtrlWrite_ILI9320(0x0003, 0x1030); // set GRAM write direction and BGR=1. //R60H,R03H:设置扫描方向,从上到下,从左到右
LCDCOM(0x00,0x03); LCDDATA(0x10,0x30);
//LCD_CtrlWrite_ILI9320(0x0004, 0x0000); // Resize register
LCDCOM(0x00,0x04); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0008, 0x0202); // set the back porch and front porch
LCDCOM(0x00,0x08); LCDDATA(0x09,0x09);
//LCD_CtrlWrite_ILI9320(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
LCDCOM(0x00,0x09); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x000A, 0x0000); // FMARK function
LCDCOM(0x00,0x0A); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x000C, 0x0000); // RGB interface setting //03设置为INTERNAL INTERFACE
LCDCOM(0x00,0x0C); LCDDATA(0x00,0x03);
//LCD_CtrlWrite_ILI9320(0x000D, 0x0000); // Frame marker Position
LCDCOM(0x00,0x0D); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x000F, 0x0000); // RGB interface polarity
//LCDCOM(0x00,0x0F); LCDDATA(0x00,0x00);
//*************Power On sequence ****************//
//LCD_CtrlWrite_ILI9320(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCDCOM(0x00,0x10); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0011, 0x0000); // DC1[2:0], DC0[2:0], VC[2:0]
LCDCOM(0x00,0x11); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0012, 0x0000); // VREG1OUT voltage
LCDCOM(0x00,0x12); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
LCDCOM(0x00,0x13); LCDDATA(0x00,0x00);
Delay(200); // Dis-charge capacitor power voltage
//LCD_CtrlWrite_ILI9320(0x0010, 0x17B0); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCDCOM(0x00,0x10); LCDDATA(0x17,0xB0);
//LCD_CtrlWrite_ILI9320(0x0011, 0x0137); // DC1[2:0], DC0[2:0], VC[2:0]
LCDCOM(0x00,0x11); LCDDATA(0x01,0x37);
Delay(50); // Delay 50ms
//LCD_CtrlWrite_ILI9320(0x0012, 0x013C); // VREG1OUT voltage
LCDCOM(0x00,0x12); LCDDATA(0x01,0x3C);
Delay(50); // Delay 50ms
//LCD_CtrlWrite_ILI9320(0x0013, 0x1900); // VDV[4:0] for VCOM amplitude
LCDCOM(0x00,0x13); LCDDATA(0x17,0x00);
//LCD_CtrlWrite_ILI9320(0x0029, 0x001A); // VCM[4:0] for VCOMH
LCDCOM(0x00,0x29); LCDDATA(0x00,0x1A);
Delay(50);
//LCD_CtrlWrite_ILI9320(0x0020, 0x0000); // GRAM horizontal Address
LCDCOM(0x00,0x20); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0021, 0x0000); // GRAM Vertical Address
LCDCOM(0x00,0x21); LCDDATA(0x00,0x00);
// ----------- Adjust the Gamma Curve ----------//
//LCD_CtrlWrite_ILI9320(0x0030, 0x0002);
LCDCOM(0x00,0x30); LCDDATA(0x00,0x02);
//LCD_CtrlWrite_ILI9320(0x0031, 0x0606);
LCDCOM(0x00,0x31); LCDDATA(0x06,0x06);
//LCD_CtrlWrite_ILI9320(0x0032, 0x0501);
LCDCOM(0x00,0x32); LCDDATA(0x05,0x01);
//LCD_CtrlWrite_ILI9320(0x0035, 0x0206);
LCDCOM(0x00,0x35); LCDDATA(0x02,0x06);
//LCD_CtrlWrite_ILI9320(0x0036, 0x0504);
LCDCOM(0x00,0x36); LCDDATA(0x05,0x04);
//LCD_CtrlWrite_ILI9320(0x0037, 0x0707);
LCDCOM(0x00,0x37); LCDDATA(0x07,0x07);
//LCD_CtrlWrite_ILI9320(0x0038, 0x0306);
LCDCOM(0x00,0x38); LCDDATA(0x03,0x06);
//LCD_CtrlWrite_ILI9320(0x0039, 0x0007);
LCDCOM(0x00,0x39); LCDDATA(0x00,0x07);
//LCD_CtrlWrite_ILI9320(0x003C, 0x0700);
LCDCOM(0x00,0x3C); LCDDATA(0x07,0x00);
//LCD_CtrlWrite_ILI9320(0x003D, 0x0700);
LCDCOM(0x00,0x3D); LCDDATA(0x07,0x00);
//------------------ Set GRAM area ---------------//
//LCD_CtrlWrite_ILI9320(0x0050, 0x0000); // Horizontal GRAM Start Address
LCDCOM(0x00,0x50); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0051, 0x00EF); // Horizontal GRAM End Address
LCDCOM(0x00,0x51); LCDDATA(0x00,0xEF);
//LCD_CtrlWrite_ILI9320(0x0052, 0x0000); // Vertical GRAM Start Address
LCDCOM(0x00,0x52); LCDDATA(0x00,0x01);
//LCD_CtrlWrite_ILI9320(0x0053, 0x013F); // Vertical GRAM Start Address
LCDCOM(0x00,0x53); LCDDATA(0x01,0x3f);
//LCD_CtrlWrite_ILI9320(0x0060, 0x2700); // Gate Scan Line //R60H,R03H:设置扫描方向,从上到下,从左到右
LCDCOM(0x00,0x60); LCDDATA(0xa7,0x00);
//LCD_CtrlWrite_ILI9320(0x0061, 0x0001); // NDL,VLE, REV
LCDCOM(0x00,0x61); LCDDATA(0x00,0x01);
//LCD_CtrlWrite_ILI9320(0x006A, 0x0000); // set scrolling line
LCDCOM(0x00,0x6A); LCDDATA(0x00,0x00);
//-------------- Partial Display Control ---------//
//LCD_CtrlWrite_ILI9320(0x0080, 0x0000);
LCDCOM(0x00,0x80); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0081, 0x0000);
LCDCOM(0x00,0x81); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0082, 0x0000);
LCDCOM(0x00,0x82); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0083, 0x0000);
LCDCOM(0x00,0x83); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0084, 0x0000);
LCDCOM(0x00,0x84); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0085, 0x0000);
LCDCOM(0x00,0x85); LCDDATA(0x00,0x00);
//-------------- Panel Control -------------------//
//LCD_CtrlWrite_ILI9320(0x0090, 0x0010);
LCDCOM(0x00,0x90); LCDDATA(0x00,0x10);
//LCD_CtrlWrite_ILI9320(0x0092, 0x0000);
LCDCOM(0x00,0x92); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0093, 0x0003);
LCDCOM(0x00,0x93); LCDDATA(0x00,0x03);
//LCD_CtrlWrite_ILI9320(0x0095, 0x0110);
LCDCOM(0x00,0x95); LCDDATA(0x01,0x10);
//LCD_CtrlWrite_ILI9320(0x0097, 0x0000);
LCDCOM(0x00,0x97); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0098, 0x0000);
LCDCOM(0x00,0x98); LCDDATA(0x00,0x00);
//LCD_CtrlWrite_ILI9320(0x0007, 0x0173); // 262K color and display ON
LCDCOM(0x00,0x07); LCDDATA(0x01,0x73);
}
/**************************************************************************************************/
自己写的坐标设置代码如下:
void SetWindows(unsigned char x1 ,unsigned char x2,unsigned int y1,unsigned int y2)
{
unsigned int i;
LCDCOM(0x00,0x20); LCDDATA(0x00,x1); //设置ADDRESS COUNTER原点
LCDCOM(0x00,0x21); LCDDATA((unsigned char)((i=y1)>>8),(unsigned char)(i=y1));
//LCD_CtrlWrite_ILI9320(0x0050, 0x0000); // Horizontal GRAM Start Address
LCDCOM(0x00,0x50); LCDDATA(0x00,x1);
//LCD_CtrlWrite_ILI9320(0x0051, 0x00EF); // Horizontal GRAM End Address
LCDCOM(0x00,0x51); LCDDATA(0x00,x2);
//LCD_CtrlWrite_ILI9320(0x0052, 0x0000); // Vertical GRAM Start Address
LCDCOM(0x00,0x52); LCDDATA((unsigned char)((i=y1)>>8),(unsigned char)(i=y1));
//LCD_CtrlWrite_ILI9320(0x0053, 0x013F); // Vertical GRAM Start Address
LCDCOM(0x00,0x53); LCDDATA((unsigned char)((i=y2)>>8),(unsigned char)(i=y2));
LCDCOM(0x00,0x22); //写入数据到GRAM
}
/**************************************************************************************************/
无图无真相,然后就是一些测试图片:
测试图像,俄罗斯 (原文件名:IMAG0420.jpg)
测试图像,美女 (原文件名:IMAG0424.jpg)
俄罗斯高清 (原文件名:IMAG0428.jpg)
控制板和LCD板的背面 (原文件名:IMAG0431.jpg) |
|