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

📄 lcd.c

📁 MTK平台LCD驱动
💻 C
📖 第 1 页 / 共 3 页
字号:

kal_uint8 LCD_Partial_line_HX8306A(void)
{
	return 1;		/* partial display in 1 line alignment */
}


void LCD_blockClear_HX8306A(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))
		#elif (defined(LCD_9BIT_MODE))
		#elif (defined(LCD_16BIT_MODE))
		#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_HX8306A(0x0044);
		LCD_DataWrite_HX8306A((((x2&0xFF)<<8)|(x1&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0045);
		LCD_DataWrite_HX8306A((((y2&0xFF)<<8)|(y1&0xFF)));
		LCD_CtrlWrite_HX8306A(0x0021);
		LCD_DataWrite_HX8306A((((y1&0xFF)<<8)|(x1&0xFF)));
		LCD_CtrlWrite_HX8306A(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_HX8306A_DATA_ADDR)=(kal_uint8)((data&0xFF00)>>8);
			*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR)=(kal_uint8)(data&0xFF);
		#elif (defined(LCD_16BIT_MODE))
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=data;
		#elif (defined(LCD_18BIT_MODE))
			*((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(r_color<<12)|(g_color<<6)|b_color;
//				*((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(kal_uint16) data;
		#elif (defined(LCD_9BIT_MODE))
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=(r_color<<6)|(g_color>>3);
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=((g_color&0x07)<<6)|b_color;
		#endif
		}
	}
}

void LCD_ClearAll_HX8306A(kal_uint16 data)
{
   LCD_blockClear_HX8306A(0,0,LCD_WIDTH-1,LCD_HEIGHT-1,data);
}

void LCD_set_reg(kal_uint16 reg_index, kal_uint16 reg_data)
{
	LCD_CtrlWrite_HX8306A(reg_index);
	LCD_DataWrite_HX8306A(reg_data);
}

void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr)
{
	volatile kal_uint32 i;
	kal_uint16 background = (kal_uint16)bkground;
	kal_uint16 read_data;


    lcd_check = 0;
   
   
	CLEAR_LCD_CTRL_RESET_PIN;
	LCD_Delay(0x1000);
	SET_LCD_CTRL_RESET_PIN;
	LCD_Delay(0x1000);

	LCD_set_reg(0x0000,0x0001);
	
	LCD_Delay(0x200);				/* delay 10ms */

	LCD_set_reg(0x0001,0x011B);
	LCD_set_reg(0x0002,0x0700);
	LCD_set_reg(0x0003,0x1200);//1230
//	LCD_set_reg(0x0003,0x1030);

	LCD_set_reg(0x0004,0x0000);
	LCD_set_reg(0x0005,0x0000);
//	LCD_set_reg(0x0007,0x0003);
	LCD_set_reg(0x0007,0x0007);
	LCD_set_reg(0x0008,0x0202);
	LCD_set_reg(0x0009,0x0000);
	LCD_set_reg(0x000B,0x0000);
	LCD_set_reg(0x000C,0x0003);
	LCD_set_reg(0x0040,0x0000);
	LCD_set_reg(0x0041,0x00EF);
	LCD_set_reg(0x0042,0xDB00);
	LCD_set_reg(0x0043,0xDB00);
	LCD_set_reg(0x0044,0xAF00);
	LCD_set_reg(0x0045,0xDB00);

	LCD_set_reg(0x0010,0x0000);
	LCD_set_reg(0x0011,0x0000);
	LCD_set_reg(0x0012,0x0000);
	LCD_set_reg(0x0013,0x0000);
	LCD_set_reg(0x0013,0x1611);
	LCD_set_reg(0x0012,0x0003);
	
	LCD_Delay(0x800);
	LCD_set_reg(0x0010,0x4140);
	LCD_set_reg(0x0012,0x0013);
	
	LCD_Delay(0x800);
	LCD_set_reg(0x0010,0x4140);
	
	LCD_Delay(0x800);
	LCD_set_reg(0x0013,0x3611);
	
	LCD_Delay(0x800);

	LCD_set_reg(0x0030,0x0005);
	LCD_set_reg(0x0031,0x0607);
	LCD_set_reg(0x0032,0x0107);
	LCD_set_reg(0x0033,0x0506);
	LCD_set_reg(0x0034,0x0304);
	LCD_set_reg(0x0035,0x0003);
	LCD_set_reg(0x0036,0x0707);
	LCD_set_reg(0x0037,0x0402);
	LCD_set_reg(0x0038,0x0100);
	LCD_set_reg(0x0039,0x0400);

	LCD_set_reg(0x0007,0x0005);
	
	LCD_Delay(0x800);
	LCD_set_reg(0x0007,0x0025);
	LCD_set_reg(0x0007,0x0027);
	
	LCD_Delay(0x800);
	LCD_set_reg(0x0007,0x0037);
	
	LCD_Delay(0x800);

   //readreg_HX8306A(0x0039);	

	LCD_ClearAll_HX8306A(0xFFFF);

	lcd_power_ctrl_shadow1=0x4140;
	lcd_power_ctrl_shadow3=0x0013;
	lcd_power_ctrl_shadow4=0x3611;
	
	LCD_Delay(0x80000);
	/* turn on backlight */
//	*((volatile unsigned short *) 0x80120150) &= 0xF3FF;
//	*((volatile unsigned short *) 0x80120000) |= 0x20;
//	*((volatile unsigned short *) 0x801200C0) |= 0x20;
    lcd_check = 1;
    

}

void LCD_Init_S1D19122(kal_uint32 bkground, void **buf_addr)
{
	volatile kal_uint32 i;
	kal_uint16 background = (kal_uint16)bkground;
	kal_uint16 read_data;
    unsigned short int temp, LUT;


    lcd_check = 0;
   
   
	CLEAR_LCD_CTRL_RESET_PIN;
	LCD_Delay(0x1000);
	SET_LCD_CTRL_RESET_PIN;
	LCD_Delay(0x1000);


    LCD_CtrlWrite_HX8306A(0x01);	  //SOFT RESET
  
    LCD_CtrlWrite_HX8306A(0xb0);	  //display control 
    LCD_DataWrite_HX8306A(0x05);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0xf0);
    LCD_DataWrite_HX8306A(0x0a);
    LCD_DataWrite_HX8306A(0x38);
    LCD_DataWrite_HX8306A(0x02);
    LCD_DataWrite_HX8306A(0x0a);
    LCD_DataWrite_HX8306A(0x2a);
    
    LCD_DataWrite_HX8306A(0x2b);
    LCD_DataWrite_HX8306A(0x30);
    LCD_DataWrite_HX8306A(0x31);
    LCD_DataWrite_HX8306A(0x37);
    LCD_DataWrite_HX8306A(0x02);
    LCD_DataWrite_HX8306A(0x36);
    LCD_DataWrite_HX8306A(0x40);
    LCD_DataWrite_HX8306A(0x02);
    
    LCD_DataWrite_HX8306A(0x81);
    LCD_DataWrite_HX8306A(0x04);
    LCD_DataWrite_HX8306A(0x05);
    LCD_DataWrite_HX8306A(0x64);
    
    LCD_CtrlWrite_HX8306A(0xfc);	  //gamma set 0
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x10);
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x10);
    LCD_DataWrite_HX8306A(0x42);
    LCD_DataWrite_HX8306A(0x42);
    
    LCD_DataWrite_HX8306A(0x22);
    LCD_DataWrite_HX8306A(0x11);    
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x22);
    LCD_DataWrite_HX8306A(0x99);
    LCD_DataWrite_HX8306A(0xaa);
    LCD_DataWrite_HX8306A(0xaa);
    LCD_DataWrite_HX8306A(0xaa);
    
    LCD_DataWrite_HX8306A(0xbb);
    LCD_DataWrite_HX8306A(0xbb);
    LCD_DataWrite_HX8306A(0xaa);
    LCD_DataWrite_HX8306A(0x33);
    LCD_DataWrite_HX8306A(0x33);
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x01);
    
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00); 
    
    LCD_CtrlWrite_HX8306A(0xfd);	  //gamma set 0
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x10);
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x10);
    LCD_DataWrite_HX8306A(0x42);
    LCD_DataWrite_HX8306A(0x42);
    
    LCD_DataWrite_HX8306A(0x22);
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x22);
    LCD_DataWrite_HX8306A(0x99);
    LCD_DataWrite_HX8306A(0xaa);
    LCD_DataWrite_HX8306A(0xaa);
    LCD_DataWrite_HX8306A(0xaa);
    
    LCD_DataWrite_HX8306A(0xbb);
    LCD_DataWrite_HX8306A(0xbb);
    LCD_DataWrite_HX8306A(0xaa);
    LCD_DataWrite_HX8306A(0x33);
    LCD_DataWrite_HX8306A(0x33);
    LCD_DataWrite_HX8306A(0x11);
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x01);
    
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x11);
    
    LCD_CtrlWrite_HX8306A(0xb8);
    
    LCD_CtrlWrite_HX8306A(0x00);
    
    LCD_CtrlWrite_HX8306A(0xbc);  
    LCD_Delay(300);
    
    LCD_CtrlWrite_HX8306A(0xbe);	  //EVR set
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x15);
    LCD_DataWrite_HX8306A(0x0d);
    LCD_DataWrite_HX8306A(0x06);
    LCD_DataWrite_HX8306A(0x08);
    LCD_DataWrite_HX8306A(0x15);
    LCD_DataWrite_HX8306A(0x10);
    LCD_DataWrite_HX8306A(0x00);
    
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    
    LCD_CtrlWrite_HX8306A(0xc0);	     //lcd modle definition
    LCD_DataWrite_HX8306A(0x0e);     //if parallel set oe
    LCD_DataWrite_HX8306A(0x00);     //
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
      
    LCD_CtrlWrite_HX8306A(0xc1);	  //power definition
    LCD_DataWrite_HX8306A(0x2f);
    LCD_DataWrite_HX8306A(0x23);
    LCD_DataWrite_HX8306A(0xb4);
    LCD_DataWrite_HX8306A(0xff);
    LCD_DataWrite_HX8306A(0x24);
    LCD_DataWrite_HX8306A(0x03);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x04);
    
    LCD_DataWrite_HX8306A(0x04);
    LCD_DataWrite_HX8306A(0x04);
    LCD_DataWrite_HX8306A(0x20);
    LCD_DataWrite_HX8306A(0x20);
    LCD_DataWrite_HX8306A(0x00);
    
    LCD_CtrlWrite_HX8306A(0xbc);  
    LCD_Delay(300);
    
    LCD_CtrlWrite_HX8306A(0xc2);	     //interface mode select
    LCD_DataWrite_HX8306A(0x13);
    
    LCD_CtrlWrite_HX8306A(0xd0);	     //lcdc interface
    LCD_DataWrite_HX8306A(0x00);
    
    LCD_CtrlWrite_HX8306A(0x11);	  //sleep out
    LCD_Delay(1000);
    
    LCD_CtrlWrite_HX8306A(0x26);	  //gamma set
    LCD_DataWrite_HX8306A(0x08);
    
    LCD_CtrlWrite_HX8306A(0x35);	  //TE line on
    LCD_DataWrite_HX8306A(0x00);
    
    LCD_CtrlWrite_HX8306A(0x36);	     //memory access control
    LCD_DataWrite_HX8306A(0xd0);
    
    LCD_CtrlWrite_HX8306A(0x38);
    LCD_Delay(100);
    
    LCD_CtrlWrite_HX8306A(0x3a);	   //65k color
    LCD_DataWrite_HX8306A(0x05);

    
    LCD_CtrlWrite_HX8306A(0x2a);	     //column address set
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x01);
    LCD_DataWrite_HX8306A(0x3f);
    
    LCD_CtrlWrite_HX8306A(0x2b);	     //page address set
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0x00);
    LCD_DataWrite_HX8306A(0xef);
    

    LCD_CtrlWrite_HX8306A(0x2d);
    
    temp=0;
    for (LUT=0;LUT<64; LUT++)
    {
     LCD_DataWrite_HX8306A(temp);
     temp+=8;
     
     }
     temp=0;
    for (LUT=0;LUT<64; LUT++)
    {
     LCD_DataWrite_HX8306A(temp);
     temp+=4;
     
     }
     temp=0;
    for (LUT=0;LUT<64; LUT++)
    {
     LCD_DataWrite_HX8306A(temp);
     temp+=8;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -