📄 displaylib.c
字号:
Write_LDI_LTS222(0x18,0xF7); // PARTIAL 2 DISPLAY AREA STARTING REGISTER 1
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
Write_LDI_LTS222(0x1B,0x07); // org
// Write_LDI_LTS222(0x1B,0x01); // 90 rotate
// Write_LDI_LTS222(0x1B,0x02); // 90 rotate
// Write_LDI_LTS222(0x1B,0x03); // 90 rotate
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
Write_LDI_LTS222(0x1F,0x5a); // org
// Write_LDI_LTS222(0x1F,0x5E); // 90 rotate
Write_LDI_LTS222(0x20,0x54); // org, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
// Write_LDI_LTS222(0x20,0x5F); // 90 rotate, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
Write_LDI_LTS222(0x1E,0xc1); //
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
Write_LDI_LTS222(0x21,0x00); // PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2
Write_LDI_LTS222(0x3B,0x01); //
// delay about 40ms
delayLoop(LCD_DELAY_1MS*40);
Write_LDI_LTS222(0x00,0x20); // CONTROL REGISTER 1
Write_LDI_LTS222(0x02,0x01); // RGB INTERFACE REGISTER
// delay about 10ms
delayLoop(LCD_DELAY_1MS*10);
// Reg16_OPCLK_DIV = 0x0201; // 6.4
}
void Write_LDI_LTS222(int address, int data)
{
int j;
unsigned char DELAY=20;
if(debug_continue)
{
Temp_forDebug(address,data);
}
LCD_DEN_Hi; // EN = High CS high
LCD_DCLK_Hi; // SCL High
LCD_DSERI_Lo; // Data Low
delayLoop(DELAY);
LCD_DEN_Lo; // EN = Low CS Low
delayLoop(DELAY);
LCD_DCLK_Lo; // SCL Low
delayLoop(DELAY);
for (j = 7; j >= 0; j--)
{
if ((address >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
if(j != 0)
{
LCD_DCLK_Lo;
delayLoop(DELAY); // CLOCK = Low
}
}
LCD_DSERI_Lo; // Data Low
delayLoop(DELAY);
LCD_DEN_Hi; // EN = High
delayLoop(DELAY);
LCD_DEN_Lo; // EN = Low
delayLoop(DELAY);
LCD_DCLK_Lo;
delayLoop(DELAY); // CLOCK = Low
for (j = 7; j >= 0; j--)
{
if ((data >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
if(j != 0)
{
LCD_DCLK_Lo;
delayLoop(DELAY); // CLOCK = Low
}
}
LCD_DEN_Hi; // EN = High
delayLoop(DELAY);
}
#define LTV350 (TRUE)
void InitLDI_LTV350(void)
{
// LCD module reset
rGPBDAT |= (1<<(LCD_nRESET));
rGPBDAT &= ~(1<<(LCD_nRESET)); // goes to LOW
// delay about 5ms
delayLoop(LCD_DELAY_1MS*10);
rGPBDAT |= (1<<(LCD_nRESET)); // goes to HIGH
//debug_continue = TRUE;
debug_continue = FALSE;
//SET_CONFIG_PORT( spi1)
rGPLCON &= ~(((3<<(LCD_DEN_BIT*2))) | ((3<<(LCD_DCLK_BIT*2))) | ((3<<(LCD_DSERI_BIT*2))));
rGPLCON |= (((1<<(LCD_DEN_BIT*2))) | ((1<<(LCD_DCLK_BIT*2))) | ((1<<(LCD_DSERI_BIT*2))));
// pull-up pull-down disable
rGPLUDP &= ~(((3<<(LCD_DEN_BIT*2))) | ((3<<(LCD_DCLK_BIT*2))) | ((3<<(LCD_DSERI_BIT*2))));
rGPLUDP |= (((2<<(LCD_DEN_BIT*2))) | ((2<<(LCD_DCLK_BIT*2))) | ((2<<(LCD_DSERI_BIT*2))));
// delay about 5ms
delayLoop(LCD_DELAY_1MS*10);
LCD_DEN_Hi;
LCD_DCLK_Hi;
LCD_DSERI_Hi;
///////////////////////////////////////////////////////////////////
// Init_Lcd_Function
//////////////////////////////////////////////////////////////////
#if LTV350
Write_LDI_LTV350(0x01,0x001d);
Write_LDI_LTV350(0x02,0x0000);
Write_LDI_LTV350(0x03,0x0000);
Write_LDI_LTV350(0x04,0x0000);
Write_LDI_LTV350(0x05,0x50a3);
Write_LDI_LTV350(0x06,0x0000);
Write_LDI_LTV350(0x07,0x0000);
Write_LDI_LTV350(0x08,0x0000);
Write_LDI_LTV350(0x09,0x0000);
Write_LDI_LTV350(0x0a,0x0000);
Write_LDI_LTV350(0x10,0x0000);
Write_LDI_LTV350(0x11,0x0000);
Write_LDI_LTV350(0x12,0x0000);
Write_LDI_LTV350(0x13,0x0000);
Write_LDI_LTV350(0x14,0x0000);
Write_LDI_LTV350(0x15,0x0000);
Write_LDI_LTV350(0x16,0x0000);
Write_LDI_LTV350(0x17,0x0000);
Write_LDI_LTV350(0x18,0x0000);
Write_LDI_LTV350(0x19,0x0000);
#else
Write_LDI_LTV350(0x09,0x0000);
#endif
///////////////////////////////////////////////////////////////////
// Power On Reset Display off State
//////////////////////////////////////////////////////////////////
//Write_LDI_LTV350(0x09,0x0000);
// delay about 10ms
delayLoop(LCD_DELAY_1MS*10);
///////////////////////////////////////////////////////////////////
// Power Setting Function 1
//////////////////////////////////////////////////////////////////
#if LTV350
Write_LDI_LTV350(0x09,0x4055);
Write_LDI_LTV350(0x0a,0x0000);
#else
Write_LDI_LTV350(0x09,0x4055);
Write_LDI_LTV350(0x0a,0x2000);
#endif
// delay about 10ms
delayLoop(LCD_DELAY_1MS*10);
/////////////////////////////////////////////////////////////////////
// Power Setting 2
/////////////////////////////////////////////////////////////////////
#if LTV350
Write_LDI_LTV350(0x0a,0x2000);
#else
Write_LDI_LTV350(0x09,0x4055);
#endif
// delay about 50ms
delayLoop(LCD_DELAY_1MS*50);
///////////////////////////////////////////////////////////////////
// Instruction Setting
///////////////////////////////////////////////////////////////////
#if LTV350
Write_LDI_LTV350(0x01,0x409d);
Write_LDI_LTV350(0x02,0x0204);
Write_LDI_LTV350(0x03,0x2100);
Write_LDI_LTV350(0x04,0x1000);
Write_LDI_LTV350(0x05,0x5003);
Write_LDI_LTV350(0x06,0x0009); //vbp
Write_LDI_LTV350(0x07,0x000f); //hbp
Write_LDI_LTV350(0x08,0x0800);
Write_LDI_LTV350(0x10,0x0000);
Write_LDI_LTV350(0x11,0x0000);
Write_LDI_LTV350(0x12,0x000f);
Write_LDI_LTV350(0x13,0x1f00);
Write_LDI_LTV350(0x14,0x0000);
Write_LDI_LTV350(0x15,0x0000);
Write_LDI_LTV350(0x16,0x0000);
Write_LDI_LTV350(0x17,0x0000);
Write_LDI_LTV350(0x18,0x0000);
Write_LDI_LTV350(0x19,0x0000);
#else
Write_LDI_LTV350(0x01,0x409d);
Write_LDI_LTV350(0x02,0x0204);
Write_LDI_LTV350(0x03,0x0100);
Write_LDI_LTV350(0x04,0x3000);
Write_LDI_LTV350(0x05,0x4003);
Write_LDI_LTV350(0x06,0x0009); //vbp
Write_LDI_LTV350(0x07,0x000f); //hbp
Write_LDI_LTV350(0x08,0x0c00);
Write_LDI_LTV350(0x10,0x0103);
Write_LDI_LTV350(0x11,0x0301);
Write_LDI_LTV350(0x12,0x1f0f);
Write_LDI_LTV350(0x13,0x1f0f);
Write_LDI_LTV350(0x14,0x0707);
Write_LDI_LTV350(0x15,0x0307);
Write_LDI_LTV350(0x16,0x0707);
Write_LDI_LTV350(0x17,0x0000);
Write_LDI_LTV350(0x18,0x0004);
Write_LDI_LTV350(0x19,0x0000);
#endif
// delay about 2 frames
delayLoop(LCD_DELAY_1MS*50);
///////////////////////////////////////////////////////////////////
// Display On Sequence
///////////////////////////////////////////////////////////////////
#if LTV350
Write_LDI_LTV350(0x09,0x4a55);
Write_LDI_LTV350(0x0a,0x2000);
#else
Write_LDI_LTV350(0x09,0x4a55);
Write_LDI_LTV350(0x05,0x5003);
#endif
}
void Write_LDI_LTV350(int address, int data)
{
uint8 dev_id_code=0x1D;
int j;
unsigned char DELAY=50;
if(debug_continue)
{
Temp_forDebug(address,data);
}
LCD_DEN_Hi; // EN = High CS high
LCD_DCLK_Hi; // SCL High
LCD_DSERI_Hi; // Data Low
delayLoop(DELAY);
LCD_DEN_Lo; // EN = Low CS Low
delayLoop(DELAY);
for (j = 5; j >= 0; j--)
{
LCD_DCLK_Lo; // SCL Low
if ((dev_id_code >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
}
// RS = "0" : index data
LCD_DCLK_Lo; // CLOCK = Low
LCD_DSERI_Lo;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
// Write
LCD_DCLK_Lo; // CLOCK = Low
LCD_DSERI_Lo;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
for (j = 15; j >= 0; j--)
{
LCD_DCLK_Lo; // SCL Low
if ((address >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
}
LCD_DSERI_Hi;
delayLoop(DELAY);
LCD_DEN_Hi; // EN = High
delayLoop(DELAY*10);
LCD_DEN_Lo; // EN = Low CS Low
delayLoop(DELAY);
for (j = 5; j >= 0; j--)
{
LCD_DCLK_Lo; // SCL Low
if ((dev_id_code >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
}
// RS = "1" instruction data
LCD_DCLK_Lo; // CLOCK = Low
LCD_DSERI_Hi;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
// Write
LCD_DCLK_Lo; // CLOCK = Low
LCD_DSERI_Lo;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
for (j = 15; j >= 0; j--)
{
LCD_DCLK_Lo; // SCL Low
if ((data >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
}
LCD_DEN_Hi; // EN = High
delayLoop(DELAY);
}
//
//========================================================================================
//========================================================================================
// library function for FIMV test
//
void Setup_RgbIf( void)
{
uint32 LcdBppMode;
rMISCCR |= (1<<28); // select LCD controller for TFT lcd controller
SetLcdPort();
Init_LDI();
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
printf("\nSelect Display BPP mode\n\n 0: RGB 16bpp (565) 1: RGB 24bpp (888)\n");
LcdBppMode = GetIntNum();
if((LcdBppMode<0)||(LcdBppMode>1))
LcdBppMode = 0;
switch(LcdBppMode)
{
case 0 : LcdBppMode = WINCONx_16BPP_565;
break;
case 1 : LcdBppMode = WINCONx_24BPP_888;
break;
}
Basic_Display_Setting(LCD_WIN_0,LCD_BUF_0,LcdBppMode,lcd_horizon_value,lcd_line_value);
if (LcdBppMode == WINCONx_16BPP_565)
*WINCONx_Reg_Addr[LCD_WIN_0] |= (1<<WINCON_SWAP_S);
Display_Start(LCD_WIN_0);
}
//
//========================================================================================
//========================================================================================
// library function for Power Test
//
void Test_Lcd_QVGA(void)
{
uint32 i,j,k;
SetLcdPort();
Init_LDI();
LcdWindowOnOff(LCD_WIN_ALL,LCD_OFF);
LcdEnvidOnOff(LCD_OFF);
Basic_Display_Setting(LCD_WIN_1,LCD_BUF_0,WINCONx_16BPP_565,lcd_horizon_value,lcd_line_value);
if(lcd_type==LCD_MODULE_LTS222)
{
for(j=0;j<screen_height;j++)
for(i=0;i<screen_width;i++)
PutPixel(i,j,snail16bpp[k++]);
}
else if(lcd_type==LCD_MODULE_LTV350)
{
for(j=0;j<screen_height;j++)
for(i=0;i<screen_width;i++);
// PutPixel(i,j,prayer16bpp[k++]);
}
Display_Start(LCD_WIN_1);
}
//
//========================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -