📄 lcd_5406b 验证ok.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 + -