⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_5406b 验证ok.c

📁 5406B 真彩屏应用于MTK方案的初始化代码。 经过验证可以量产用。
💻 C
字号:
#ifdef __MMI_MAINLCD_176X220__

#include "drv_comm.h"
#include "reg_base.h"
#include "lcd_sw_inc.h"
#include "lcd_sw.h"
#include "lcd_hw.h"  
#include "lcd_if.h"
extern kal_uint16  lcd_check_drv_id(void);

static void LCD_blockClear_5406B(kal_uint16 x1,kal_uint16 y1,kal_uint16 x2,kal_uint16 y2,kal_int32 data)
{
	kal_uint16 LCD_x;
	kal_uint16 LCD_y;
	
	LCD_MainLCD_CtrlWrite(0x0037);
	LCD_MainLCD_DataWrite(x1);
	LCD_MainLCD_CtrlWrite(0x0036);
	LCD_MainLCD_DataWrite(x2);
	LCD_MainLCD_CtrlWrite(0x0039);
	LCD_MainLCD_DataWrite(y1);
	LCD_MainLCD_CtrlWrite(0x0038);
	LCD_MainLCD_DataWrite(y2);
		
	LCD_MainLCD_CtrlWrite(0x0020);
	LCD_MainLCD_DataWrite(x1);
	LCD_MainLCD_CtrlWrite(0x0021);
	LCD_MainLCD_DataWrite(y1);

	LCD_MainLCD_CtrlWrite(0x0022);
		
	for(LCD_y=y1;LCD_y<=y2;LCD_y++)
	{
		for(LCD_x=x1;LCD_x<=x2;LCD_x++)
		{	
			LCD_MainLCD_DataWrite(data);
		}
	}	
	
}

static void LCD_Init_5406B(kal_uint32 bkground, void **buf_addr)
{
       static kal_bool IsFirst=KAL_TRUE;
        
       if((!IsFirst)&&(bkground>=0)) return;
       else IsFirst=KAL_FALSE;

	//--------------- Power supply condition: VCC=IOVCC=VCI=2.8V ---------------//
	LCD_MainLCD_CtrlWrite(0x0001);LCD_MainLCD_DataWrite(0x011C); //Driver output control register
	LCD_MainLCD_CtrlWrite(0x0002);LCD_MainLCD_DataWrite(0x0100); //LCD driver control
	LCD_MainLCD_CtrlWrite(0x0003);LCD_MainLCD_DataWrite(0x1030); //16-bit mode
	LCD_MainLCD_CtrlWrite(0x000F);LCD_MainLCD_DataWrite(0x1601); //Start OSC
	LCD_Delay(10);    
	LCD_MainLCD_CtrlWrite(0x0010);LCD_MainLCD_DataWrite(0x0200); //Power control 1
	LCD_MainLCD_CtrlWrite(0x0012);LCD_MainLCD_DataWrite(0x2111); //Power control 3
	LCD_Delay(10);
	LCD_MainLCD_CtrlWrite(0x0013);LCD_MainLCD_DataWrite(0x006D); //Power control 4
	LCD_MainLCD_CtrlWrite(0x0014);LCD_MainLCD_DataWrite(0x5052); //Setting VcomH / VcomAC      //可以自己调
	LCD_MainLCD_CtrlWrite(0x0015);LCD_MainLCD_DataWrite(0x0000); //VCI period
	
	LCD_Delay(50);    
	//--------------- Gamma 2.2 control ---------------//
	LCD_MainLCD_CtrlWrite(0x0050);LCD_MainLCD_DataWrite(0x0101);
	LCD_MainLCD_CtrlWrite(0x0051);LCD_MainLCD_DataWrite(0x0B24);
	LCD_Delay(10);
	LCD_MainLCD_CtrlWrite(0x0052);LCD_MainLCD_DataWrite(0x0526);
	LCD_MainLCD_CtrlWrite(0x0053);LCD_MainLCD_DataWrite(0x2605);
	LCD_Delay(10);    
	LCD_MainLCD_CtrlWrite(0x0054);LCD_MainLCD_DataWrite(0x240B);
	LCD_MainLCD_CtrlWrite(0x0055);LCD_MainLCD_DataWrite(0x0101);
	LCD_Delay(10);
	LCD_MainLCD_CtrlWrite(0x0056);LCD_MainLCD_DataWrite(0x1503);
	LCD_MainLCD_CtrlWrite(0x0057);LCD_MainLCD_DataWrite(0x0315);
	LCD_Delay(10);    
	LCD_MainLCD_CtrlWrite(0x0058);LCD_MainLCD_DataWrite(0x0106);
	LCD_MainLCD_CtrlWrite(0x0059);LCD_MainLCD_DataWrite(0x0104);
	LCD_Delay(10);
	LCD_MainLCD_CtrlWrite(0x005A);LCD_MainLCD_DataWrite(0x0E04);
	LCD_MainLCD_CtrlWrite(0x005B);LCD_MainLCD_DataWrite(0x0F00);
	LCD_Delay(10);    
	LCD_MainLCD_CtrlWrite(0x005C);LCD_MainLCD_DataWrite(0x000F);
	LCD_MainLCD_CtrlWrite(0x005D);LCD_MainLCD_DataWrite(0x040E);
	LCD_Delay(10);
	LCD_MainLCD_CtrlWrite(0x005E);LCD_MainLCD_DataWrite(0x0401);
	LCD_MainLCD_CtrlWrite(0x005F);LCD_MainLCD_DataWrite(0x0601);
	LCD_Delay(50);    
	//--------------- Orise mode ---------------//
	LCD_MainLCD_CtrlWrite(0x00F0);LCD_MainLCD_DataWrite(0x5406);
	LCD_MainLCD_CtrlWrite(0x00F2);LCD_MainLCD_DataWrite(0x00DF);
	LCD_Delay(10);
	LCD_MainLCD_CtrlWrite(0x00F0);LCD_MainLCD_DataWrite(0x0000);
	LCD_MainLCD_CtrlWrite(0x0011);LCD_MainLCD_DataWrite(0x0F38); //Power on
	LCD_MainLCD_CtrlWrite(0x0007);LCD_MainLCD_DataWrite(0x1017); //Display on
	LCD_Delay(10);    

	if(bkground>=0)
	{
		LCD_blockClear_5406B(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,0);
	}
}


static void LCD_EnterSleep_5406B(void)
{
	LCD_MainLCD_CtrlWrite(0x0010);LCD_MainLCD_DataWrite(0x0201);
	LCD_Delay(30);
}


static void LCD_ExitSleep_5406B(void)
{
	LCD_MainLCD_CtrlWrite(0x0010);LCD_MainLCD_DataWrite(0x0200);
	LCD_Delay(30);
}

static void LCD_BlockWrite_5406B(kal_uint16 startx,kal_uint16 starty,  kal_uint16 endx, kal_uint16 endy)
{
         kal_uint16  id;
	kal_prompt_trace(MOD_CC,"LCD_BlockWrite_5406B [%d,%d],[%d,%d]", startx,  endx,  starty,  endy);
    
       #ifdef LCD_CMD_DMA_MODE
	SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x0036 );
	SET_LCD_CMD_PARAMETER(1,LCD_DATA,endx);
	SET_LCD_CMD_PARAMETER(2,LCD_CMD, 0x0037);
	SET_LCD_CMD_PARAMETER(3,LCD_DATA, startx);	
	SET_LCD_CMD_PARAMETER(4,LCD_CMD,0x0038 );
	SET_LCD_CMD_PARAMETER(5,LCD_DATA,endy);
	SET_LCD_CMD_PARAMETER(6,LCD_CMD,0x0039 );
	SET_LCD_CMD_PARAMETER(7,LCD_DATA,starty);
	
	SET_LCD_CMD_PARAMETER(8,LCD_CMD,0x0020);  
	SET_LCD_CMD_PARAMETER(9,LCD_DATA,startx);
	SET_LCD_CMD_PARAMETER(10,LCD_CMD,0x0021);
	SET_LCD_CMD_PARAMETER(11,LCD_DATA,starty);

	SET_LCD_CMD_PARAMETER(12,LCD_CMD,0x0022);

	ENABLE_LCD_TRANSFER_COMPLETE_INT;
	ENABLE_LCD_ROI_CTRL_CMD_FIRST;
	SET_LCD_ROI_CTRL_NUMBER_OF_CMD(13);
	while (LCD_IS_RUNNING) {};
	START_LCD_TRANSFER;
      #else
	LCD_MainLCD_CtrlWrite(0x0036);LCD_MainLCD_DataWrite(endx);			
	LCD_MainLCD_CtrlWrite(0x0037);LCD_MainLCD_DataWrite(startx);
	LCD_MainLCD_CtrlWrite(0x0038);LCD_MainLCD_DataWrite(endy);	
	LCD_MainLCD_CtrlWrite(0x0039);LCD_MainLCD_DataWrite(starty);

	LCD_MainLCD_CtrlWrite(0x0020);LCD_MainLCD_DataWrite(startx);
	LCD_MainLCD_CtrlWrite(0x0021);LCD_MainLCD_DataWrite(starty);

	LCD_MainLCD_CtrlWrite(0x0022);	 

	ENABLE_LCD_TRANSFER_COMPLETE_INT;
	DISABLE_LCD_ROI_CTRL_CMD_FIRST;
	START_LCD_TRANSFER;		
      #endif
}

#ifdef __DIRECT_SENSOR_SUPPORT__
static void LCD_BlockWrite_5406B_temp(kal_uint16 startx,kal_uint16 starty,  kal_uint16 endx, kal_uint16 endy)
{
        	while (LCD_IS_RUNNING){};
	LCD_MainLCD_CtrlWrite(0x0036);LCD_MainLCD_DataWrite(endx);			
	LCD_MainLCD_CtrlWrite(0x0037);LCD_MainLCD_DataWrite(startx);
	LCD_MainLCD_CtrlWrite(0x0038);LCD_MainLCD_DataWrite(endy);	
	LCD_MainLCD_CtrlWrite(0x0039);LCD_MainLCD_DataWrite(starty);

	LCD_MainLCD_CtrlWrite(0x0020);LCD_MainLCD_DataWrite(startx);
	LCD_MainLCD_CtrlWrite(0x0021);LCD_MainLCD_DataWrite(starty);

	LCD_MainLCD_CtrlWrite(0x0022);
}
#endif
  
static void LCD_PWRON_5406B(kal_bool on)
{
}

static void LCD_SetContrast_5406B(kal_uint8 level)
{
}

static void LCD_ON_5406B(kal_bool on)
{
}

static void LCD_Size_5406B(kal_uint16 *out_LCD_width,kal_uint16 *out_LCD_height)
{
   	*out_LCD_width = LCD_WIDTH;
   	*out_LCD_height = LCD_HEIGHT;
}
static void LCD_Partial_On_5406B(kal_uint16 start_page,kal_uint16 end_page)
{
}

static void LCD_Partial_Off_5406B(void)
{
}

static kal_uint8 LCD_Partial_line_5406B(void)
{
	return 1;		// partial display in 1 line alignment 
}

static kal_uint8 LCD_GetParm_5406B(lcd_func_type type)
{
   switch(type)
   {
      case lcd_Bais_func:
         return 1;
      case lcd_Contrast_func:
         return 1;
      case lcd_LineRate_func:
         return 4;
      case lcd_Temperature_Compensation_func:
         return 4;
      default:
         ASSERT(0);
         return 100;
   }
}

static void LCD_SetBias_5406B(kal_uint8 *bias)
{
}

static void LCD_Contrast_5406B(kal_uint8 *contrast)
{
}

static void LCD_LineRate_5406B(kal_uint8 *linerate)
{
}

static void LCD_Temp_Compensate_5406B(kal_uint8 *compensate)
{
}

LCD_Funcs LCD_5406B =
{
	LCD_Init_5406B,
	LCD_PWRON_5406B,
	LCD_SetContrast_5406B,
	LCD_ON_5406B,
	LCD_BlockWrite_5406B,
	LCD_Size_5406B,
	LCD_EnterSleep_5406B,
	LCD_ExitSleep_5406B,
	LCD_Partial_On_5406B,
	LCD_Partial_Off_5406B,
	LCD_Partial_line_5406B,
	//----Engineering mode------
	LCD_GetParm_5406B,
	LCD_SetBias_5406B,
	LCD_Contrast_5406B,
	LCD_LineRate_5406B,
	LCD_Temp_Compensate_5406B,
         #ifdef __DIRECT_SENSOR_SUPPORT__
          LCD_BlockWrite_5406B_temp
        #endif		
};


#endif





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -