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

📄 lcd_driver_kgm281e0_f026.c

📁 可以学习
💻 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
--------------------------------------------------------------------------*/

/*-----------------------------------------------------------------------------
* 函数:	LcdModulePowerOnOff
* 功能:	LCD模块电源控制
* 参数:	u8Value----0:关闭;1:开启 
* 返回:	none
*----------------------------------------------------------------------------*/
void Hyc_LcdModulePowerOnOff(U8 u8Value)
{
	if (u8Value != 0)
	{//点亮背光
		eGpio_SetHigh(LCDPOWER_GPIO);
	}
	else
	{//关闭背光
		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=50000;
	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(0x1008);       //  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);    
}

/*-----------------------------------------------------------------------------
* 函数:	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;

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