📄 tft_sunplus_t112_auo_panel.h
字号:
if((FONT_SIZE==FONT_SIZE8W16H)|(FONT_SIZE==FONT_SIZE6W16H))
OSDCfgWr(0x0f,0x40);
#endif
//
OSDCfgWr(CHAR_RAM_BASE_A,CHAR_MAIN_MENU_START); //To setup character index start address.
//If start address is 0x9c0,
//You have get ((0x9c0 >> 5) & 0x7f) to store it
OSDCfgWr(CHAR_RAM_END_A,CHAR_RAM_END); //This is to set index end address.
OSDCfgWr(BLINK_CTRL,0x09);
OSDCfgWr(ALPHA_BLD_CTRL,0x84);
OSDLoadColor();
OSDSetRamAddr(FONT_DATA_START_ADDRESS);
twdWr_Burst_A(OSD_RAM_DL);
//Below is re-writted // chagne by Sherman 06'02'06
if((FONT_SIZE==FONT_SIZE8W16H)|(FONT_SIZE==FONT_SIZE6W16H)){
for(j=0;j<(TOTAL_FONT_NUM/2)+1;j++)
for(i=0; i<FONT_HEIGHT; i++){
twdWr_Burst_D(AllFonts[2*j+1][2*i+1]);
twdWr_Burst_D(AllFonts[2*j][2*i+1]);
}
}else{
for(j=0;j<TOTAL_FONT_NUM;j++)
for(i=0; i<FONT_HEIGHT; i++){
twdWr_Burst_D(AllFonts[j][2*i]);
twdWr_Burst_D(AllFonts[j][2*i+1]);
}
}
//0x400==1024;
for(i=(TOTAL_FONT_NUM+1)*FONT_HEIGHT; i<0x400; i++){
twdWr_Burst_D(0x00);
twdWr_Burst_D(0x00);
}
twdWr_Burst_P();
for(i=0;i<OSD_LINE_NUM;i++){
OSDCleanLine(0,i,0,31);
OSDSetLineAttribute(i,0x80);
}
#endif
}
typedef enum{
S_NTSC=0x01,
S_PAL,
S_SECAM,
S_NTSC_4, // Add by Sherman 06'01'26
S_PAL_M, // Add by Sherman 06'01'26
S_PAL_CN, // Add by Sherman 06'01'26
S_END
}VIDEOSTANDARD;
const BYTE ucaZoomDataP0_PAL[]={
//0x40, 0x70, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x84, 0x85, 0x88, 0x89, 0x8a, 0x8b, 0xc8,
//0xb0, 0xb2, 0xb6, 0xb8, 0xbe, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0x30, 0x79 , 0xe2
//full
0x0C, 0xb1, 0x66, 0x2E, 0x4A, 0x26, 0x00, 0x00, 0xC7, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x15,
0x79, 0x10, 0xEA, 0xE7, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xea, 0x00, 0x83, 0x00, 0x11,
//Zoom 1
0x0C, 0xb1, 0x66, 0x2E, 0x4A, 0x26, 0x00, 0x82, 0xC7, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x15,
0x79, 0x10, 0xEA, 0xE7, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xea, 0x00, 0x83, 0x00, 0x11,
//Zoom 2, zoom wide 1 in Himax8806A
0x0C, 0xb1, 0x66, 0x2E, 0x4A, 0x26, 0x00, 0xC3, 0xC7, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x15,
0x79, 0x10, 0xEA, 0xE7, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xea, 0x00, 0x83, 0x00, 0x11,
//_4:3
0x0C, 0xb1, 0xDD, 0x3D, 0x4A, 0x26, 0x00, 0x00, 0xB3, 0x11, 0x00, 0x00, 0x00, 0x00, 0x15,
0x79, 0x11, 0xEA, 0xE5, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x68, 0x01, 0xEA, 0x00, 0x83, 0x00, 0x11,
//Zoom 3, zoom 2 in Himax
0x0c, 0xb1, 0x99, 0xB9, 0x29, 0x8D, 0x00, 0x00, 0xDD, 0x12, 0x00, 0x00, 0x00, 0x00, 0x15,
0x79, 0x23, 0xEA, 0xB3, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xEA, 0x00, 0x83, 0x00, 0x11,
//Zoom 4, wide in Himax 8806A
0x0c, 0xb1, 0x99, 0xB9, 0x29, 0x99, 0x00, 0xCA, 0xDD, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x15,
0x79, 0x11, 0xEA, 0xE3, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0xea, 0x00, 0x83, 0x00, 0x11,
//Zoom5 , zoom wide 2 in Himax 8806A
0x0c, 0xb1, 0x99, 0xB9, 0x29, 0x8D, 0x00, 0xCA, 0xDD, 0x12, 0x00, 0x00, 0x00, 0x00, 0x15,
0x79, 0x23, 0xEA, 0xB3, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xEA, 0x00, 0x83, 0x00, 0x11,
//Zoom6, zoom 3 in Himax 8806A
0x0c, 0xb1, 0x99, 0xB9, 0x29, 0x8D, 0x00, 0x00, 0xDD, 0x04, 0x00, 0x00, 0x00, 0x00, 0x15,
0x79, 0x22, 0xEA, 0xA7, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xEA, 0x00, 0x83, 0x00, 0x11,
//Zoom7
0x16, 0xb1, 0xA9, 0x3A, 0x29, 0x76, 0x00, 0x00, 0xDD, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x16,
0x10, 0x23, 0xea, 0x55, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xEA, 0x00, 0x03, 0x20, 0x11,
/* bigger size
0x3c, 0xA9, 0x3A, 0x29, 0x64, 0x00, 0x00, 0xDD, 0x92, 0x00, 0x00, 0x00, 0x00, 0x17,
0x10, 0x37, 0xea, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xEA, 0x00, 0x03, 0x20,
*/
};
const BYTE ucaZoomDataP2_PAL[]={
//full
0x88, 0x50, 0x2E, 0xC1,
// Zoom 1
0x88, 0x50, 0x64, 0x8C,
// Zoom 2
0x88, 0x50, 0x64, 0x8C,
//_4:3
0x82, 0x50, 0x2E, 0xC1,
// Zoom 3, Zoom2 in Himax
0x88, 0x50, 0x58, 0x95,
// Zoom 4
0x88, 0x50, 0x2E, 0xC1,
// Zoom 5, zoom wide 2 in Himax 8806A
0x88, 0x50, 0x58, 0x95,
// Zoom 6, zoom 3 in Himax 8806A
0x88, 0x50, 0x4C, 0xA2,
// Zoom 7
//0xD8, 0x00, 0x8A, 0x31 //bigger size
0xb0, 0x28, 0x38, 0x71
};
#define TIME_PROTOCOL 0x7D
#define GATE_PREDRIVE 0x03
const BYTE TconP1Data[]={ //10~35
0x21,TIME_PROTOCOL,0x02,0x02,0x0C,0x02,0x02,0xf2,0x01,0x29,0x00,
0x01,0x18,GATE_PREDRIVE,0x00,0x00,0x01,0xFB,0x01,0x37,0x00,0x06
};
#define P1TconCnt sizeof(TconP1Data)/sizeof(BYTE)
#define TconAddress 0x20
#define GAMMA_ADDR 0x93
#define GAMMA_DATA 0x94
#define GAMMA_TABLE_DATA_SIZE 33
/* Image Control */
#define IMG_FUN_CTRL 0x90
#define GAMMA_R 0xc0
#define GAMMA_G 0x80
#define GAMMA_B 0x40
#define GAMMA_RGB 0x00//0x3F
#define ENCONTRAST 0x10
#define ENBRIGHT 0x08
#define ENCSC 0x04
#define ENGAMMA 0x02
#define ENDITHER 0x01
#define PATTERN_CTRL 0x91
#define EFMCLR 0x80
#define DIGI_CONTRASTR 0x92
#define DIGI_CONTRASTG 0x93
#define DIGI_CONTRASTB 0x94
#define DIGI_BRIGHTR 0x96
#define DIGI_BRIGHTG 0x97
#define DIGI_BRIGHTB 0x98
#define YCoefCSC 0x97
#define CrCoef_R 0x98
#define CbCoef_G 0x99
#define CrCoef_G 0x9A
#define CbCoef_B 0x9B
#define GAMMA_ADDR 0x93
#define GAMMA_DATA 0x94
#define DITHERING 0x9C
/* OSD register definition */
#define OSD_CFG_INDEX 0xA0
#define OSD_CFG_DATA 0xA1
#define OSD_RAM_AL 0xA2
#define OSD_RAM_AH 0xA3
#define OSD_RAM_DL 0xA4
#define OSD_RAM_DH 0xA5
const BYTE GammaDataTableRGB0[] = {
0x00,0x0B,0x1B,0x27,0x34,0x43,0x52,0x60,
0x6E,0x76,0x81,0x89,0x8F,0x94,0x98,0x9D,
0xA1,0xA4,0xA8,0xAB,0xAC,0xB1,0xB5,0xBA,
0xC2,0xC8,0xCF,0xD8,0xDE,0xE5,0xEE,0xF7,0xFF};
BYTE **pcGammaData[]={
GammaDataTableRGB0,
GammaDataTableRGB0,
GammaDataTableRGB0
};
const BYTE T112_Config_Data_50[]=
{
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/*0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x60,0x60,0x00,0x20,0x00,0x00,
/*1*/ 0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x83,0x00,0xA0,0x00,0xFF,0x03,
/*2*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*3*/ 0x83,0x00,0x7F,0x3F,0x00,0x00,0x00,0x40,0x50,0x00,0x20,0x03,0x00,0x00,0x00,0x10,
/*4*/ 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*5*/ 0x30,0x66,0x3D,0x08,0xD0,0x02,0x20,0x01,0x02,0xD8,0x38,0x01,0x03,0x00,0x00,0x00,
/*6*/ 0x01,0x8F,0x0F,0x0F,0x04,0x08,0x88,0x00,0x80,0x80,0x00,0x7F,0x80,0x00,0x00,0x00,
/*7*/ 0xB0,0x00,0x66,0x2E,0x4A,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80,0x80,
/*8*/ 0x00,0x36,0x9E,0x00,0xC7,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*9*/ 0x06,0x00,0x00,0x00,0x00,0x10,0x00,0x95,0xCC,0x64,0xD0,0x81,0x02,0x10,0xFF,0x40,
/*A*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*B*/ 0x7C,0x00,0x10,0x00,0xE0,0x01,0xF0,0x00,0xE7,0x02,0x0C,0x01,0x10,0x00,0x03,0x00,
/*C*/ 0x01,0x08,0x00,0x00,0x00,0x22,0x00,0x00,0x15,0x02,0x03,0x00,0x00,0x00,0x00,0x00,
/*D*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0xEA,0x00,
/*E*/ 0x91,0xF4,0x11,0x00,0x0F,0x0E,0x1D,0x00,0x07,0x80,0x13,0x44,0x00,0x00,0x00,0x00,
/*F*/ 0x50,0x04,0x00,0x54,0x57,0xD2,0xA0,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00
};
const BYTE T112_Config_Data_52[]=
{
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/*0*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*1*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*2*/ 0x21,0x71,0x02,0x02,0x0C,0x02,0x02,0xF2,0x01,0x29,0x00,0x01,0x00,0x03,0x00,0x00,
/*3*/ 0x01,0xFB,0x01,0x37,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*4*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*5*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*6*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*7*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*8*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*9*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*A*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*B*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*C*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*D*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*E*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*F*/ 0x50,0x04,0x00,0x54,0x57,0xD2,0xA0,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00
};
const BYTE T112_Config_Data_54[]=
{
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
/*0*/ 0x33,0x09,0x4B,0x03,0xD8,0x32,0x0A,0x24,0x45,0x32,0x5B,0x00,0x67,0x07,0x00,0x0C,
/*1*/ 0x27,0xFF,0x06,0x82,0x40,0x64,0x74,0xCB,0x2A,0x09,0x8A,0xCB,0x20,0x00,0x00,0x00,
/*2*/ 0x3E,0x3E,0x00,0x80,0xE9,0x0F,0x2D,0x50,0x22,0x4E,0xD6,0x4E,0x23,0x48,0x88,0x50,
/*3*/ 0x2E,0xC1,0x70,0x0E,0x6C,0x90,0x70,0x0E,0x00,0x0A,0x0E,0x00,0x05,0x00,0x00,0x00,
/*4*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*5*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*6*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*7*/ 0x1F,0xFF,0xE7,0x00,0x2A,0x09,0x68,0xCB,0x23,0x80,0xFF,0x00,0xFE,0xFE,0x00,0x01,
/*8*/ 0x05,0x00,0x52,0x6F,0x07,0x20,0x03,0x10,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,
/*9*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*A*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*B*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*C*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*D*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*E*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*F*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/* Two Wire Bus Slave Interface */
#define TW_INTERFACE 0xF1
#define AUTO_INC 0x04
#define TWO_BUS 0x00
#define TWO_FOUR_BUS 0x01
#define TWO_DDC_BUS 0x02
#define TWO_BVSI_BUS 0x03
#define DID_L 0xf6
#define V_SHARP_MSK 0x01
#define V_BRIGHT_MAX 0xFF //0xB2 //0xFF Bruce 2005-07-04
#define V_BRIGHT_DEF 0x01
#define V_BRIGHT_MIN 0x00 //0x4E //0x00 Bruce 2005-07-04
#define V_CONTRAST_MAX 0xFF //0xB2 //0xFF Bruce 2005-07-04
#define V_CONTRAST_DEF 0x80
#define V_CONTRAST_MIN 0x00 //0x4E //0x00 Bruce 2005-07-04
#define V_SAT_MAX 0xFF //0xB2 //0xFF Bruce 2005-07-04
#define V_SAT_DEF 0x80
#define V_SAT_MIN 0x00 //0x4E //0x00 Bruce 2005-07-04
#define V_HUE_MAX 0xFF //0xB2 //0xFF Bruce 2005-07-04
#define V_HUE_DEF 0x80
#define V_HUE_MIN 0x00 //0x4E //0x00 Bruce 2005-07-04
#define V_SHARP_MAX 0x06 //0x15//0x06 Bruce 2005-07-04 // 0x05 Ruby 2004-10-07
#define V_SHARP_DEF 0x01
#define V_SHARP_MIN 0x00
#define V_SHARP_MSK 0x01
#define V_SHARP_DS 0x00
// add by Sherman 06'01'18
#define V_RGB_MAX 0x0f
#define V_RGB_DEF 0x0f
#define V_RGB_MIN 0x00
// add by Sherman 06'01'23
#define V_VCOMA_MAX 0x1f
#define V_VCOMA_DEF 0x02 // 0x1a
#define V_VCOMA_MIN 0x00
// add by Sherman 06'01'23
#define V_VCOMD_MAX 0x1f
#define V_VCOMD_DEF 0x13 // 0x17
#define V_VCOMD_MIN 0x00
#define VRGB 0xE4 // add by Sherman 06'01'18
#define VVCOMA 0xE5 // add by Sherman 06'01'23
#define VVCOMD 0xE6 // add by Sherman 06'01'23
#define VIDEO_ADDR 0x54 //I2C address
#define VSHARP 0x80
// #define VBRIGHT 0x09 // Ruby 2004-10-08 //page 2
// #define VCONTRAST 0x08
#define VBRIGHT 0x69 //page 0
#define VCONTRAST 0x68
#define VSAT 0x6c
#define VHUE 0x0b
typedef struct tagEEPVIDEO
{
BYTE cBright;
BYTE cContrast;
BYTE cSat;
BYTE cHue;
BYTE cSharp;
BYTE cVolume;
BYTE cB2;
BYTE cB8;
BYTE cB2_PAL;
BYTE cB8_PAL;
BYTE cFlag;
BYTE cFlag_PAL;
BYTE cGamma;
BYTE cFLAG_INDEX;
BYTE cTVCHANNEL_INDEX;
BYTE cTVCHANNEL_STAT;
#ifdef T112
BYTE cRGB; // add by Sherman 06'01'18
BYTE cVCOMA; // add by Sherman 06'01'23
BYTE cVCOMD; // add by Sherman 06'01'23
#endif
} EEPVIDEO;
EEPVIDEO EepVideo;
void OSDResetVideoData(void)
{
EepVideo.cBright = V_BRIGHT_DEF;
EepVideo.cContrast = V_CONTRAST_DEF ;
EepVideo.cSharp = V_SHARP_DEF;
EepVideo.cHue = V_HUE_DEF;
EepVideo.cSat = V_SAT_DEF;
EepVideo.cVolume = 0x80;
EepVideo.cGamma = 0;
#ifdef T112 // add by Sherman 06'01'18
EepVideo.cRGB = V_RGB_DEF;
EepVideo.cVCOMA = V_VCOMA_DEF; // add by Sherman 06'01'23
EepVideo.cVCOMD = V_VCOMD_DEF; // add by Sherman 06'01'23
#endif
}
void OSDSetVideoValues(void)
{
// I2CWriteByte(VIDEO_ADDR,VSHARP,(I2CReadByte(VIDEO_ADDR,VSHARP)&0xF0)|EepVideo.cSharp);
I2CWriteByte(TW101+4,0x80,V_SHARP_MSK|(EepVideo.cSharp<<1));
I2CWriteByte(VIDEO_ADDR,VBRIGHT,EepVideo.cBright);
I2CWriteByte(VIDEO_ADDR,VCONTRAST,EepVideo.cContrast);
I2CWriteByte(TW101,VBRIGHT,EepVideo.cBright);
I2CWriteByte(TW101,VCONTRAST,EepVideo.cContrast);
I2CWriteByte(VIDEO_ADDR,VSAT,EepVideo.cSat);
I2CWriteByte(VIDEO_ADDR,VHUE,EepVideo.cHue-0x80);
#ifdef T112
I2CWriteByte(TW101,VRGB,EepVideo.cRGB); // add by Sherman 06'01'18
I2CWriteByte(TW101,VVCOMA,EepVideo.cVCOMA); // add by Sherman 06'01'23
I2CWriteByte(TW101,VVCOMD,EepVideo.cVCOMD); // add by Sherman 06'01'23
#endif
LoadGammaTable(EepVideo.cGamma);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -