?? lcd_driver_kgm281e0_f035.c
字號:
//使用此驅動IC的顯示屏有:TFT320240_KGM281E0
/*--------------------------------------------------------------------------
Standard include files:
--------------------------------------------------------------------------*/
#include "Interface.h"
/*--------------------------------------------------------------------------
*DEFINES
--------------------------------------------------------------------------*/
#define LCDPOWER_GPIO GPIO_6
/*--------------------------------------------------------------------------
*TYPEDEFS
--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------
*STRUCTURE
--------------------------------------------------------------------------*/
const struct StaticMemoryControl stMemoryCtrlCfg_Lcd =
{
0, //SMT:1;d
0, //BL:2;
0, //BCM:1;
0, //NFE:1;
0, //CE:1;
1, //BW;
1,//2, //TAS:3; //setup time
0, //6800Mode:1;
1,//1, //TAH:3; //hold time
0, //Dummy1:1;
2,//3, //TBP:4; //write time
1, //TAW:4;
2, //STRV:4;
0 //Dummy0:4;
};
/*--------------------------------------------------------------------------
* Variable ,constant or function
--------------------------------------------------------------------------*/
U8 gScreen_Display_Mode = 0; //顯示方式
/*-----------------------------------------------------------------------------
* 函數: LcdModulePowerOnOff
* 功能: LCD模塊電源控制
* 參數: u8Value----0:關閉;1:開啟
* 返回: none
*----------------------------------------------------------------------------*/
void Hyc_LcdModulePowerOnOff(U8 u8Value)
{
if (u8Value != 0)
{//點亮背光
Hyc_eGpio_SetHigh(LCDPOWER_GPIO);
}
else
{//關閉背光
Hyc_eGpio_SetLow (LCDPOWER_GPIO);
}
}
/*-----------------------------------------------------------------------------
* 函數: drvLcd_InitLcdModuleInstructs
* 功能: LCD模塊初始化
* 參數: none
* 返回: none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_InitLcdModuleInstructs( void)
{
int i;
Hyc_drvLcd_WriteInstruct(0x00E5); // Start internal OSC.
Hyc_drvLcd_WriteData(0x8000);
Hyc_drvLcd_WriteInstruct(0x0000); // Start internal OSC.
Hyc_drvLcd_WriteData(0x0001);
i=5000;
while(i--);
Hyc_drvLcd_WriteInstruct(0x0001); // set SS and SM bit
Hyc_drvLcd_WriteData(0x0100);
Hyc_drvLcd_WriteInstruct(0x0002);
Hyc_drvLcd_WriteData(0x0700);
Hyc_drvLcd_WriteInstruct(0x0003); //縱向 scan
Hyc_drvLcd_WriteData(0x1010); // 0x1028
Hyc_drvLcd_WriteInstruct(0x0004); // Resize register
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0008); // set the back porch and front porch
Hyc_drvLcd_WriteData(0x0202);
Hyc_drvLcd_WriteInstruct(0x0009); // set non-display area refresh cycle ISC[3:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x000A); // FMARK function
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x000C); // RGB interface setting
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x000D); // Frame marker Position
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x000F); // RGB interface polarity
Hyc_drvLcd_WriteData(0x0000);
//*************Power On sequence ****************//
Hyc_drvLcd_WriteInstruct(0x0010); // SAP, BT[3:0], AP, DSTB, SLP, STB
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0011); // DC1[2:0], DC0[2:0], VC[2:0]
Hyc_drvLcd_WriteData(0x0007);
Hyc_drvLcd_WriteInstruct(0x0012); // VREG1OUT voltage
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0013); // VDV[4:0] for VCOM amplitude
Hyc_drvLcd_WriteData(0x0000);
i=100000;
while(i--); // Dis-charge capacitor power voltage
Hyc_drvLcd_WriteInstruct(0x0010); // SAP, BT[3:0], AP, DSTB, SLP, STB
Hyc_drvLcd_WriteData(0x17B0); //0X1690,0x17B0
Hyc_drvLcd_WriteInstruct(0x0011); // DC1[2:0], DC0[2:0], VC[2:0]
//drvLcd_WriteData(0x0007); //0x0001
Hyc_drvLcd_WriteData(0x0031); //0x0037
i=100000;
while(i--); // Delay 50ms
Hyc_drvLcd_WriteInstruct(0x0012); // VREG1OUT voltage此參數如調得過小,會出現屏閃
//drvLcd_WriteData(0x013f); //0X013e,0x013C
Hyc_drvLcd_WriteData(0x0138); //0x013a
i=100000;
while(i--); // Delay 50ms
Hyc_drvLcd_WriteInstruct(0x0013); // VDV[4:0] for VCOM amplitude調大后會出現明顯色階,且變暗
//drvLcd_WriteData(0x1a00); //0X1a00,0x1300
//drvLcd_WriteData(0x0c00); //0X1a00,0x1300
Hyc_drvLcd_WriteData(0x1500); //0x1800
Hyc_drvLcd_WriteInstruct(0x0029); // VCM[4:0] for VCOMH
//drvLcd_WriteData(0x0012); //0X0000,0x0004
Hyc_drvLcd_WriteData(0x0005); //0x0008
i=100000;
while(i--); // Delay 50ms
Hyc_drvLcd_WriteInstruct(0x0020); // GRAM horizontal Address
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0021); // GRAM Vertical Address
Hyc_drvLcd_WriteData(0x0000);
//Hyc_drvLcd_WriteInstruct(0x002B); // Frame Rate and Color Control-----16M_EN, Dither, FR_SEL[1:0]
//drvLcd_WriteData(0x0020);
// ----------- Adjust the Gamma Curve ----------//
//V3.0
Hyc_drvLcd_WriteInstruct(0x0030);
Hyc_drvLcd_WriteData(0x0007);
Hyc_drvLcd_WriteInstruct(0x0031);
Hyc_drvLcd_WriteData(0x0203); //0x0306
Hyc_drvLcd_WriteInstruct(0x0032);
Hyc_drvLcd_WriteData(0x0001); //0x0200
Hyc_drvLcd_WriteInstruct(0x0035);
Hyc_drvLcd_WriteData(0x0007); //0x0107
Hyc_drvLcd_WriteInstruct(0x0036);
Hyc_drvLcd_WriteData(0x0407); //0x0404
Hyc_drvLcd_WriteInstruct(0x0037);
Hyc_drvLcd_WriteData(0x0607); //0x0606
Hyc_drvLcd_WriteInstruct(0x0038);
Hyc_drvLcd_WriteData(0x0106); //0x0105
Hyc_drvLcd_WriteInstruct(0x0039);
Hyc_drvLcd_WriteData(0x0007);
Hyc_drvLcd_WriteInstruct(0x003C);
Hyc_drvLcd_WriteData(0x0007); //0x0600
Hyc_drvLcd_WriteInstruct(0x003D);
Hyc_drvLcd_WriteData(0x001e);
// ---------- Window Address Area ---------- //
Hyc_drvLcd_WriteInstruct(0x0050); // Horizontal GRAM Start Address-----HSA[7:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0051); // Horizontal GRAM End Address-----HEA[7:0]
Hyc_drvLcd_WriteData(0x00EF);
Hyc_drvLcd_WriteInstruct(0x0052); // Vertical GRAM Start Address-----VSA[8:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0053); // Vertical GRAM Start Address-----VEA[8:0]
Hyc_drvLcd_WriteData(0x013F);
// ---------- Gate Scan Control ---------- //
//Hyc_drvLcd_WriteInstruct(0x0060); // GS, NL[5:0], SCN[5:0]--
//Hyc_drvLcd_WriteData(0x2700);
Hyc_drvLcd_WriteInstruct(0x0060); //vertical scan
//Hyc_drvLcd_WriteData(0x2700); //0xA700
Hyc_drvLcd_WriteData(0xa700); //0xA700
Hyc_drvLcd_WriteInstruct(0x0061); // NDL,VLE, REV
Hyc_drvLcd_WriteData(0x0001);
Hyc_drvLcd_WriteInstruct(0x006A); // VL[8:0]
Hyc_drvLcd_WriteData(0x0000);
// ---------- Partial Display Control ---------- //
Hyc_drvLcd_WriteInstruct(0x0080); // Partial Image 1 Display Position-----PTDP0[8:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0081); // Partial Image 1 Start Address-----PTSA0[8:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0082); // Partial Image 1 End Address-----PTEA0[8:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0083); // Partial Image 2 Display Position-----PTDP1[8:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0084); // Partial Image 2 Start Address-----PTSA1[8:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0085); // Partial Image 2 Start Address-----PTEA1[8:0]
Hyc_drvLcd_WriteData(0x0000);
// ---------- Panel Interface Control ---------- //
Hyc_drvLcd_WriteInstruct(0x0090); // Panel Interface Control 1-----DIVI[1:0], RTNI[4:0]
Hyc_drvLcd_WriteData(0x0010); //0x0013
Hyc_drvLcd_WriteInstruct(0x0092); // Panel Interface Control 2-----NOWI[2:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0093); // Panel Interface Control 3-----MCPI[2:0]
Hyc_drvLcd_WriteData(0x0003);
Hyc_drvLcd_WriteInstruct(0x0095); // Panel Interface Control 4-----DIVE[1:0], RTNE[5:0]
Hyc_drvLcd_WriteData(0x0110);
Hyc_drvLcd_WriteInstruct(0x0097); // Panel Interface Control 5-----NOWE[3:0]
Hyc_drvLcd_WriteData(0x0000);
Hyc_drvLcd_WriteInstruct(0x0098); // Panel Interface Control 6-----MCPE[2:0]
Hyc_drvLcd_WriteData(0x0000);
}
void Hyc_drvLcd_DisplayVerticalMode(void)
{
if(gScreen_Display_Mode==1)
{
Hyc_drvLcd_WriteInstruct(0x0003); //縱向 scan
Hyc_drvLcd_WriteData(0x1010);
Hyc_SetLcdRowColumn(cLCD_TOTAL_ROW,cLCD_TOTAL_COLUMN);
gScreen_Display_Mode=0;
}
}
void Hyc_drvLcd_DisplayHorizontalMode(void)
{
if(gScreen_Display_Mode==0)
{
Hyc_drvLcd_WriteInstruct(0x0003); //橫向 scan
Hyc_drvLcd_WriteData(0x1008);
Hyc_SetLcdRowColumn(cLCD_TOTAL_COLUMN,cLCD_TOTAL_ROW);
gScreen_Display_Mode=1;
}
}
/*-----------------------------------------------------------------------------
* 函數: drvLcd_InitLCDModule
* 功能:
* 參數: none
* 返回: none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_InitLCDModule(void)
{
Hyc_LcdModulePowerOnOff(0);
Hyc_drvLcd_InitLcdModuleInstructs();
Hyc_drvLcd_ClearLcdRAM();
Hyc_drvLcd_WriteInstruct(0x0007); //display on
Hyc_drvLcd_WriteData(0x0173);
}
/*-----------------------------------------------------------------------------
* 函數: drvLcd_LCDModulePowerOn
* 功能: 打開LCD模塊電源
* 參數: none
* 返回: none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_LCDModulePowerOn(void)
{
//Hyc_drvLcd_InitLcdModuleInstructs(); //sleep out = reInitialize
//Hyc_drvLcd_WriteInstruct(0x0007);
//Hyc_drvLcd_WriteData(0x0173);
//Hyc_RefreshScreen_Lcd();
Hyc_LcdModulePowerOnOff(1);
}
/*-----------------------------------------------------------------------------
* 函數: drvLcd_LCDModulePowerOff
* 功能: 關閉LCD模塊電源
* 參數: none
* 返回: none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_LCDModulePowerOff(void)
{
//Hyc_drvLcd_WriteInstruct(0x0007); //display off
//Hyc_drvLcd_WriteData(0x0000); //0x0001
Hyc_LcdModulePowerOnOff(0);
//Hyc_drvLcd_WriteInstruct(0x0010); //sleep in
//Hyc_drvLcd_WriteData(0x17B2); //0x0001
}
/*-----------------------------------------------------------------------------
* 函數: drvLcd_DisplayOn
* 功能: 打開顯示
* 參數: none
* 返回: none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_DisplayOn(void)
{
Hyc_drvLcd_WriteInstruct(0x0007); //display on
Hyc_drvLcd_WriteData(0x0173);
}
/*-----------------------------------------------------------------------------
* 函數: drvLcd_DisplayOff
* 功能: 關閉顯示
* 參數: none
* 返回: none
*----------------------------------------------------------------------------*/
void drvLcd_DisplayOff(void)
{
Hyc_drvLcd_WriteInstruct(0x0007); //display off
Hyc_drvLcd_WriteData(0x0000); //0x0001
}
/*-----------------------------------------------------------------------------
* 函數: drvLcd_ContrastAdjust
* 功能: 調整對比度
* 參數: none
* 返回: none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_ContrastAdjust (U8 u8Contrast)
{
//待實現
}
/*-----------------------------------------------------------------------------
* 函數: drvLcd_SetRowColumn
* 功能: 設置彩色顯示屏的顯示起始地址,地址為行序號和列序號row和Column,以及高度
* 和寬度
* 參數: kRow - 行序號 , 起始行:0
* kColumn - 列序號 ,起始列:0
* U16 kHeight - 高度
* U16 kWidth - 寬度
* 返回: none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_SetRowColumn_Lcd(RECT *rect)
{
U16 tempData;
U16 kRow;
U16 kColumn;
U16 kHeight;
U16 kWidth;
kRow=rect->y;
kColumn=rect->x;
kHeight=rect->h;
kWidth=rect->w;
if (gScreen_Display_Mode == 0)
{//240*320
tempData=(0x00FF&kColumn);
Hyc_drvLcd_WriteInstruct(0x0020); //Specify the x address in RAM
Hyc_drvLcd_WriteData(tempData);
tempData=(0x01FF&(319-kRow));
Hyc_drvLcd_WriteInstruct(0x0021); //Specify the y address in RAM
Hyc_drvLcd_WriteData(tempData);
tempData=(0x00FF&kColumn);
Hyc_drvLcd_WriteInstruct(0x0050); //Specify the horizontal start positions
Hyc_drvLcd_WriteData(tempData);
tempData=(0x00FF&(kColumn+kWidth-1)); //Specify the horizontal end positions
Hyc_drvLcd_WriteInstruct(0x0051);
Hyc_drvLcd_WriteData(tempData);
tempData=(0x01FF&(319-(kRow+kHeight-1)));
Hyc_drvLcd_WriteInstruct(0x0052); //Specify the Vertical start positions
Hyc_drvLcd_WriteData(tempData);
tempData=(0x01FF&(319-kRow));
Hyc_drvLcd_WriteInstruct(0x0053); //Specify the Vertical end positions
Hyc_drvLcd_WriteData(tempData);
}
else
{
tempData=(0x00FF&(239-kRow));
Hyc_drvLcd_WriteInstruct(0x0020); //Specify the x address in RAM
Hyc_drvLcd_WriteData(tempData);
tempData=(0x01FF&(319-kColumn));
Hyc_drvLcd_WriteInstruct(0x0021); //Specify the y address in RAM
Hyc_drvLcd_WriteData(tempData);
tempData=(0x00FF&(239-(kRow+kHeight-1)));
Hyc_drvLcd_WriteInstruct(0x0050); //Specify the horizontal start positions
Hyc_drvLcd_WriteData(tempData);
tempData=(0x00FF&(239-kRow)); //Specify the horizontal end positions
Hyc_drvLcd_WriteInstruct(0x0051);
Hyc_drvLcd_WriteData(tempData);
tempData=(0x01FF&(319-(kColumn+kWidth-1)));
Hyc_drvLcd_WriteInstruct(0x0052); //Specify the Vertical start positions
Hyc_drvLcd_WriteData(tempData);
tempData=(0x01FF&(319-kColumn));
Hyc_drvLcd_WriteInstruct(0x0053); //Specify the Vertical end positions
Hyc_drvLcd_WriteData(tempData);
}
Hyc_drvLcd_WriteInstruct(0x0022); //RAM write
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -