?? lcd.c
字號:
void LCD_Partial_Off_ST7787(void)
{
return; //abc
#if (defined(LCD_CMD_DMA_MODE))
#if (defined(LCD_8BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0007 >> 8));
SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0007 & 0x00FF));
SET_LCD_CMD_PARAMETER(2,LCD_CMD, (0x0042 >> 8));
SET_LCD_CMD_PARAMETER(3,LCD_CMD, (0x0042 & 0x00FF));
SET_LCD_CMD_PARAMETER(4,LCD_DATA, (0xDB00 >> 8));
SET_LCD_CMD_PARAMETER(5,LCD_DATA, (0xDB00 & 0x00FF));
LCD_SEND_DMA_CMD(6);
#elif (defined(LCD_9BIT_MODE))
#elif (defined(LCD_16BIT_MODE))
LCD_set_reg(0x0007,0x0037);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x0042&0xFF00)|(0x0042&0xFF));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,(0xDB00&0xFF00)|(0xDB00&0xFF));
LCD_SEND_DMA_CMD(2);
#elif (defined(LCD_18BIT_MODE))
LCD_CtrlWrite_ST7787(0x0007);
LCD_DataWrite_ST7787(0x0037);
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0042&0xFF00)<<2)|((0x0042&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((0xDB00&0xFF00)<<2)|((0xDB00&0xFF)<<1));
LCD_SEND_DMA_CMD(2);
#endif
#else
LCD_set_reg(0x0007, 0x0037);
LCD_set_reg(0x0042, 0xDB00);
#endif
}
kal_uint8 LCD_Partial_line_ST7787(void)
{
return 1; /* partial display in 1 line alignment */
}
void LCD_blockClear_ST7787(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data)
{
kal_uint16 LCD_x;
kal_uint16 LCD_y;
kal_uint8 r_color, g_color, b_color;
x1 -= (x1 & 0x03);
x2 += (3 - (x2 & 0x03));
r_color = (data & 0xF800) >> 10; /* transfer to RGB666 */
g_color = (data >> 5) & 0x3F;
b_color = (data & 0x1F) << 1;
#if (defined(LCD_CMD_DMA_MODE))
#if (defined(LCD_8BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0044 >> 8));
SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0044 & 0x00FF));
SET_LCD_CMD_PARAMETER(2,LCD_DATA, (x2 & 0x00FF));
SET_LCD_CMD_PARAMETER(3,LCD_DATA, (x1 & 0x00FF));
SET_LCD_CMD_PARAMETER(4,LCD_CMD, (0x0045 >> 8));
SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x0045 & 0x00FF));
SET_LCD_CMD_PARAMETER(6,LCD_DATA, (y2 & 0x00FF));
SET_LCD_CMD_PARAMETER(7,LCD_DATA, (y1 & 0x00FF));
SET_LCD_CMD_PARAMETER(8,LCD_CMD, (0x0021 >> 8));
SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x0021 & 0x00FF));
SET_LCD_CMD_PARAMETER(10,LCD_DATA, (y1 & 0x00FF));
SET_LCD_CMD_PARAMETER(11,LCD_DATA, (x1 & 0x00FF));
SET_LCD_CMD_PARAMETER(12,LCD_CMD, (0x0022 >> 8));
SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x0022 & 0x00FF));
#elif (defined(LCD_9BIT_MODE))
#elif (defined(LCD_16BIT_MODE))
/*
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00))|((0x0044&0xFF)));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((x2&0xFF)<<8)|((x1&0xFF)));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00))|((0x0045&0xFF)));
SET_LCD_CMD_PARAMETER(3,LCD_DATA,((y2&0xFF)<<8)|((y1&0xFF)));
SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00))|((0x0021&0xFF)));
SET_LCD_CMD_PARAMETER(5,LCD_DATA,((y1&0xFF)<<8)|((x1&0xFF)));
SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00))|((0x0022&0xFF)));
LCD_SEND_DMA_CMD(7);
*/
//240
SET_LCD_CMD_PARAMETER(0,LCD_CMD,(0x2a));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,(x1&0xff00)>>8);
SET_LCD_CMD_PARAMETER(2,LCD_DATA,x1&0x00ff);
SET_LCD_CMD_PARAMETER(3,LCD_DATA,(x2&0xff00)>>8);
SET_LCD_CMD_PARAMETER(4,LCD_DATA,x2&0x00ff);
SET_LCD_CMD_PARAMETER(5,LCD_CMD,(0x2b));
SET_LCD_CMD_PARAMETER(6,LCD_DATA,(y1&0xff00)>>8);
SET_LCD_CMD_PARAMETER(7,LCD_DATA,y1&0x00ff);
SET_LCD_CMD_PARAMETER(8,LCD_DATA,(y2&0xff00)>>8);
SET_LCD_CMD_PARAMETER(9,LCD_DATA,y2&0x00ff);
SET_LCD_CMD_PARAMETER(10,LCD_CMD,(0x2c));
LCD_SEND_DMA_CMD(11);
#elif (defined(LCD_18BIT_MODE))
SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0044&0xFF00)<<2)|((0x0044&0xFF)<<1));
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((x2&0xFF)<<10)|((x1&0xFF)<<1));
SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0045&0xFF00)<<2)|((0x0045&0xFF)<<1));
SET_LCD_CMD_PARAMETER(3,LCD_DATA,((y2&0xFF)<<10)|((y1&0xFF)<<1));
SET_LCD_CMD_PARAMETER(4,LCD_CMD,((0x0021&0xFF00)<<2)|((0x0021&0xFF)<<1));
SET_LCD_CMD_PARAMETER(5,LCD_DATA,((y1&0xFF)<<10)|((x1&0xFF)<<1));
SET_LCD_CMD_PARAMETER(6,LCD_CMD,((0x0022&0xFF00)<<2)|((0x0022&0xFF)<<1));
LCD_SEND_DMA_CMD(7);
#endif
#else
LCD_CtrlWrite_ST7787(0x0044);
LCD_DataWrite_ST7787((((x2&0xFF)<<8)|(x1&0xFF)));
LCD_CtrlWrite_ST7787(0x0045);
LCD_DataWrite_ST7787((((y2&0xFF)<<8)|(y1&0xFF)));
LCD_CtrlWrite_ST7787(0x0021);
LCD_DataWrite_ST7787((((y1&0xFF)<<8)|(x1&0xFF)));
LCD_CtrlWrite_ST7787(0x0022);
#endif
for (LCD_y = y1; LCD_y <= y2; LCD_y++) {
for (LCD_x = x1; LCD_x <= x2; LCD_x++) {
#if (defined(LCD_8BIT_MODE))
*((volatile unsigned char *) LCD_ST7787_DATA_ADDR) = (kal_uint8)(data >> 8);
*((volatile unsigned char *) LCD_ST7787_DATA_ADDR) = (kal_uint8)(data & 0x00FF);
#elif (defined(LCD_16BIT_MODE))
*((volatile unsigned short *) LCD_ST7787_DATA_ADDR) = data;
#elif (defined(LCD_18BIT_MODE))
*((volatile unsigned int *) LCD_ST7787_DATA_ADDR)=(r_color<<12)|(g_color<<6)|b_color;
#elif (defined(LCD_9BIT_MODE))
*((volatile unsigned short *) LCD_ST7787_DATA_ADDR)=(r_color<<6)|(g_color>>3);
*((volatile unsigned short *) LCD_ST7787_DATA_ADDR)=((g_color&0x07)<<6)|b_color;
#endif
}
}
}
void LCD_ClearAll_ST7787(kal_uint16 data)
{
LCD_blockClear_ST7787(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1, data);
}
void LCD_Init_ST7787(kal_uint32 bkground, void **buf_addr)
{
#if 1
lcd_check = 0;
CLEAR_LCD_CTRL_RESET_PIN;
delay(0x5000);
SET_LCD_CTRL_RESET_PIN;
delay(0x5000);
//************* Start Initial Sequence **********//
command(0x00E3, 0x3008); // Set internal timing
command(0x00E7, 0x0012); // Set internal timing
command(0x00EF, 0x1231); // Set internal timing
command(0x0001, 0x0100); // set SS and SM bit
command(0x0002, 0x0700); // set 1 line inversion
command(0x0003, 0x1030); // set GRAM write direction and BGR=1.
command(0x0004, 0x0000); // Resize register
command(0x0008, 0x0207); // set the back porch and front porch
command(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
command(0x000A, 0x0000); // FMARK function
command(0x000C, 0x0000); // RGB interface setting
command(0x000D, 0x0000); // Frame marker Position
command(0x000F, 0x0000); // RGB interface polarity
//*************Power On sequence ****************//
command(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
command(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
command(0x0012, 0x0000); // VREG1OUT voltage
command(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
delay(200); // Dis-charge capacitor power voltage
command(0x0010, 0x1290); // SAP, BT[3:0], AP, DSTB, SLP, STB
command(0x0011, 0x0227); // R11h=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]
delay(50); // Delay 50ms
command(0x0012, 0x001B); // External reference voltage= Vci;
delay(50); // Delay 50ms
command(0x0013, 0x1900); // VDV[4:0] for VCOM amplitude
command(0x0029, 0x0009); // VCM[5:0] for VCOMH
command(0x002B, 0x000D); // Frame Rate = 91Hz
delay(50); // Delay 50ms
command(0x0020, 0x0000); // GRAM horizontal Address
command(0x0021, 0x0000); // GRAM Vertical Address
// ----------- Adjust the Gamma Curve ----------//
command(0x0030, 0x0000);
command(0x0031, 0x0406);
command(0x0032, 0x0004);
command(0x0035, 0x0305);
command(0x0036, 0x0004);
command(0x0037, 0x0207);
command(0x0038, 0x0103);
command(0x0039, 0x0707);
command(0x003C, 0x0503);
command(0x003D, 0x0004);
//------------------ Set GRAM area ---------------//
command(0x0050, 0x0000); // Horizontal GRAM Start Address
command(0x0051, 0x00EF); // Horizontal GRAM End Address
command(0x0052, 0x0000); // Vertical GRAM Start Address
command(0x0053, 0x013F); // Vertical GRAM Start Address
command(0x0060, 0xA700); // Gate Scan Line
command(0x0061, 0x0001); // NDL,VLE, REV
command(0x006A, 0x0000); // set scrolling line
//-------------- Partial Display Control ---------//
command(0x0080, 0x0000);
command(0x0081, 0x0000);
command(0x0082, 0x0000);
command(0x0083, 0x0000);
command(0x0084, 0x0000);
command(0x0085, 0x0000);
//-------------- Panel Control -------------------//
command(0x0090, 0x0010);
command(0x0092, 0x0000);
command(0x0093, 0x0003);
command(0x0095, 0x0110);
command(0x0097, 0x0000);
command(0x0098, 0x0000);
command(0x0007, 0x0133); // 262K color and display ON
lcd_check = 1;
#else
//ananzwp modified 080123 for zm24D
CLEAR_LCD_CTRL_RESET_PIN;
LCD_Delay(0x1000);
LCD_Delay(0x1000);
SET_LCD_CTRL_RESET_PIN;
LCD_Delay(0x1000);
LCD_Delay(0x1000);
//************* Start Initial Sequence **********//9325
command(0x00, 0x0001); // Start internal OSC.
command(0xE3, 0x3008); // Set the internal vcore voltage
command(0xE7, 0x0012); // Set the internal vcore voltage
command(0xEF, 0x1231); // Set the internal vcore voltage
command(0x01, 0x0100); // set SS and SM bit
command(0x02, 0x0700); // set 1 line inversion
command(0x03, 0x1030); // set GRAM write direction and BGR=1.
command(0x04, 0x0000); // Resize register
command(0x08, 0x0207); // set the back porch and front porch
command(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0]
command(0x0A, 0x0000); // FMARK function
command(0x0C, 0x0000); // RGB interface setting
command(0x0D, 0x0000); // Frame marker Position//0000
command(0x0F, 0x0000); // RGB interface polarity
//*************Power On sequence ****************//
command(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
command(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
command(0x12, 0x0000); // VREG1OUT voltage
command(0x13, 0x0000); // VDV[4:0] for VCOM amplitude
delay(80); // Dis-charge capacitor power voltage
command(0x10, 0x1490); // SAP, BT[3:0], AP, DSTB, SLP, STB
command(0x11, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]0037
delay(50); // Delay 50ms
//ananzwp for zm24D
command(0x12, 0x009C); // VREG1OUT voltage//013a
command(0x12, 0x001A); // VREG1OUT voltage//013a
delay(50); // Delay 50ms
//ananzwp for zm24D
//command(0x13, 0x0A00); // VDV[4:0] for VCOM amplitude CPT2.8 0x16-->CPT2.4 0x1a00//1600
command(0x13, 0x0F00);
command(0x29, 0x0019);
//ananzwp for zm24d
command(0x2b, 0x000d);//////
//delay(50);
//command(0x29, 0x0001); // VCM[4:0] for VCOMH
delay(50);
command(0x20, 0x0000); // GRAM horizontal Address
command(0x21, 0x0000); // GRAM Vertical Address
// ----------- Adjust the Gamma Curve ----------//
command(0x30, 0x0305);//0000//0504
command(0x31, 0x0307);//0505
command(0x32, 0x0003);//0004
command(0x35, 0x0004);//0006
command(0x36, 0x0302);//0707
command(0x37, 0x0407);//0105
command(0x38, 0x0004);//0002
command(0x39, 0x0204);//0707
command(0x3C, 0x0307);//0704
command(0x3D, 0x000c);//0807
//------------------ Set GRAM area ---------------//
command(0x50, 0x0000); // Horizontal GRAM Start Address
command(0x51, 0x00EF); // Horizontal GRAM End Address
command(0x52, 0x0000); // Vertical GRAM Start Address
command(0x53, 0x013F); // Vertical GRAM Start Address
command(0x60, 0xa700); // Gate Scan Line
command(0x61, 0x0001); // NDL,VLE, REV
command(0x6A, 0x0000); // set scrolling line
//-------------- Partial Display Control ---------//
command(0x80, 0x0000);
command(0x81, 0x0000);
command(0x82, 0x0000);
command(0x83, 0x0000);
command(0x84, 0x0000);
command(0x85, 0x0000);
//-------------- Panel Control -------------------//
command(0x90, 0x0010);
command(0x92, 0x0600);
command(0x93, 0x0003);
command(0x95, 0x0110);
command(0x97, 0x0000);
command(0x98, 0x0000);
command(0x07, 0x0133); // 262K color and display ON
#endif // 0
//ananzwp end for zm24D
//ananzwp start end
//ananzwp modified 080123 for zm24D
#if 0
#ifdef yaxin
//LCD_CtrlWrite_ST7787(0x10); // SLPIN
//Delay(100);
LCD_CtrlWrite_ST7787(0x11); // SLPOUT:Sleep out & booster on
Delay(100);
Delay(100);
LCD_CtrlWrite_ST7787(0xB1); // FRMCTR1:
LCD_DataWrite_ST7787(0x22);
LCD_DataWrite_ST7787(0x02);
LCD_DataWrite_ST7787(0x02);
//LCD_CtrlWrite_ST7787(0xBC); // ???
Delay(50);
LCD_CtrlWrite_ST7787(0xB6); // DISSET5: DISPLAY FUNCTION SET
LCD_DataWrite_ST7787(0x02);
LCD_DataWrite_ST7787(0x00);
LCD_CtrlWrite_ST7787(0xBC); // INVON:DISPLAY INVERSE
Delay(50);
Delay(80);
LCD_CtrlWrite_ST7787(0xC2); // PWCTR3:( in normal)
LCD_DataWrite_ST7787(0x01);
LCD_DataWrite_ST7787(0xe6);
LCD_DataWrite_ST7787(0x86);
LCD_DataWrite_ST7787(0x00);
LCD_DataWrite_ST7787(0x00);
Delay(80);
LCD_CtrlWrite_ST7787(0xC3); // PWCTR4:(in Idle mode )
LCD_DataWrite_ST7787(0x01); // Amount of Current in Operational Amplifier = [APB(2:0)=1]
LCD_DataWrite_ST7787(0x22); // [STEP1B_SEL(4:0)=0,-,STEP2B_SEL(3:0)=0]
LCD_DataWrite_ST7787(0x01); // [-,-,-,-,-,STEP4B_SEL(3:0)=0]
LCD_DataWrite_ST7787(0x00); // [-,STEP1BP_SEL(3:0)=0,-,STEP2BP_SEL(3:0)=0]
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -