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

📄 lcd.c

📁 手机开发 MTK平台 LCD屏幕驱动源代码
💻 C
📖 第 1 页 / 共 5 页
字号:

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 + -