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

📄 lcdmodule_st7787k_cm6611.c

📁 可以学习
💻 C
字号:
//使用此驱动IC的显示屏有:TFT320240_KGM281E0

/*--------------------------------------------------------------------------
Standard include files:
--------------------------------------------------------------------------*/
#include "Interface.h"

/*--------------------------------------------------------------------------
*DEFINES
--------------------------------------------------------------------------*/
#define LCDPOWER_GPIO		GPIO_8

/*--------------------------------------------------------------------------
*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)
{
	Hyc_hyhwGpio_SetasGpio(LCDPOWER_GPIO);
	Hyc_hyhwGpio_SetOut(LCDPOWER_GPIO);
	if (u8Value != 0)
	{//点亮背光
		Hyc_hyhwGpio_SetHigh(LCDPOWER_GPIO);
	}
	else
	{//关闭背光
		Hyc_hyhwGpio_SetLow(LCDPOWER_GPIO);
	}
}

/*-----------------------------------------------------------------------------
* 函数:	drvLcd_InitLcdModuleInstructs
* 功能:	LCD模块初始化
* 参数:	none
* 返回:	none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_InitLcdModuleInstructs( void) 
{
	int i,j;

	//Hyc_drvLcd_WriteInstruct(0x10);	//Sleep in &booster off
	i=120000;
	while(i--); 
	Hyc_drvLcd_WriteInstruct(0x11);	//Sleep out &booster on
	i=1200000;
	while(i--);
	
	
	Hyc_drvLcd_WriteInstruct(0xb1);	// ;
	Hyc_drvLcd_WriteData(0x2a);	//2e
	Hyc_drvLcd_WriteData(0x06);	//10
	Hyc_drvLcd_WriteData(0x02);	//10
	
	Hyc_drvLcd_WriteInstruct(0xb2);	// ;frame
	Hyc_drvLcd_WriteData(0x36);	//37
	Hyc_drvLcd_WriteData(0x06);	//04
	Hyc_drvLcd_WriteData(0x10);	//02
	
	Hyc_drvLcd_WriteInstruct(0xb3);	// ;frame
	Hyc_drvLcd_WriteData(0x3e);	//26
	Hyc_drvLcd_WriteData(0x03);	//02
	Hyc_drvLcd_WriteData(0x03);	//02
	Hyc_drvLcd_WriteData(0x3e);	//26
	Hyc_drvLcd_WriteData(0x03);	//02
	Hyc_drvLcd_WriteData(0x03);	//02
	
	Hyc_drvLcd_WriteInstruct(0xb6);	//26
	Hyc_drvLcd_WriteData(0x02);	//02
	Hyc_drvLcd_WriteData(0x00);	//02



	Hyc_drvLcd_WriteInstruct(0xbc);
    i=1000000;
	while(i--);
	
	Hyc_drvLcd_WriteInstruct(0xc0);	//Power control 1 : Setting GVDD & Vci1
	Hyc_drvLcd_WriteData(0x00);    	//VRH[4:0]==>GVDD
    //i=12000;
	//while(i--);
	
	Hyc_drvLcd_WriteInstruct(0xc1);	//Power Control 3 ( in normal)
	Hyc_drvLcd_WriteData(0xa7); 	//03
	Hyc_drvLcd_WriteData(0x00);
	
	Hyc_drvLcd_WriteInstruct(0xc2);	//Power Control 3 ( in normal)
	Hyc_drvLcd_WriteData(0x03); 	//01
	Hyc_drvLcd_WriteData(0xf7);		//d7
	Hyc_drvLcd_WriteData(0x86);     //0x86
	Hyc_drvLcd_WriteData(0x31);	//31
	Hyc_drvLcd_WriteData(0x03);	//05
   // i=12000;
	//while(i--);
	
	Hyc_drvLcd_WriteInstruct(0xc3);	//;Power Control 4 (in Idle mode )
	Hyc_drvLcd_WriteData(0x01);		//02;Amount of Current in Operational Amplifier = [APB(2:0)=1]
	Hyc_drvLcd_WriteData(0x33);//44 	//;[STEP1B_SEL(4:0)=0,-,STEP2B_SEL(3:0)=0]
	Hyc_drvLcd_WriteData(0x01);//01 	//;[-,-,-,-,-,STEP4B_SEL(3:0)=0]
	Hyc_drvLcd_WriteData(0x00); 	//;[-,STEP1BP_SEL(3:0)=0,-,STEP2BP_SEL(3:0)=0]
	Hyc_drvLcd_WriteData(0x00); 	//;[-,-,-,-,-,STEP4BP_SEL(3:0)=0]
   // i=12000;
	//while(i--);
	
	Hyc_drvLcd_WriteInstruct(0xc4);	//;Power Control 4 (in Idle mode )
	Hyc_drvLcd_WriteData(0x01);		//02;Amount of Current in Operational Amplifier = [APB(2:0)=1]
	Hyc_drvLcd_WriteData(0xb3);//44 	//;[STEP1B_SEL(4:0)=0,-,STEP2B_SEL(3:0)=0]
	Hyc_drvLcd_WriteData(0x03);//01 	//;[-,-,-,-,-,STEP4B_SEL(3:0)=0]
	Hyc_drvLcd_WriteData(0x00); 	//;[-,STEP1BP_SEL(3:0)=0,-,STEP2BP_SEL(3:0)=0]
	Hyc_drvLcd_WriteData(0x00); 

	
	Hyc_drvLcd_WriteInstruct(0xc5);	//;Setting VcomH(MTP block)
	Hyc_drvLcd_WriteData(0xcf);    	//; 0xce VMH_R: VCOMH(6:0) ,default:28H
	Hyc_drvLcd_WriteData(0x1c);    	//1a ;VMH_COLOR8M(6:0): VCOMH ,default:28H
   // i=12000;
	//while(i--);

	Hyc_drvLcd_WriteInstruct(0xc6);	//Setting VcomAC
	Hyc_drvLcd_WriteData(0x23); //f4  22 	//VCOMAC voltage control 14h=5V , 06h=4.3V
	Hyc_drvLcd_WriteData(0x00);    	//VCOMAC voltage control in idle mode :default: 0
   // i=12000;
	//while(i--);	
	
	
	//***************
	Hyc_drvLcd_WriteInstruct(0xe0);	
	Hyc_drvLcd_WriteData(0x03);		
	Hyc_drvLcd_WriteData(0x03);
	Hyc_drvLcd_WriteData(0x18);
	Hyc_drvLcd_WriteData(0x1c); 	
	Hyc_drvLcd_WriteData(0x19);
    Hyc_drvLcd_WriteData(0x14);		
	Hyc_drvLcd_WriteData(0x10);
	Hyc_drvLcd_WriteData(0x10);
	Hyc_drvLcd_WriteData(0x18); 	
	Hyc_drvLcd_WriteData(0x00);
	Hyc_drvLcd_WriteData(0x0f);		
	Hyc_drvLcd_WriteData(0x03);
	Hyc_drvLcd_WriteData(0x07);
	
	Hyc_drvLcd_WriteInstruct(0xe1);	
	Hyc_drvLcd_WriteData(0x00);		
	Hyc_drvLcd_WriteData(0x07);
	Hyc_drvLcd_WriteData(0x1d);
	Hyc_drvLcd_WriteData(0x1f); 	
	Hyc_drvLcd_WriteData(0x11);
    Hyc_drvLcd_WriteData(0x19);		
	Hyc_drvLcd_WriteData(0x15);
	Hyc_drvLcd_WriteData(0x14);
	Hyc_drvLcd_WriteData(0x12); 	
	Hyc_drvLcd_WriteData(0x05);
	Hyc_drvLcd_WriteData(0x0f);		
	Hyc_drvLcd_WriteData(0x03);
	Hyc_drvLcd_WriteData(0x03);
	//***************
//omit    
    Hyc_drvLcd_WriteInstruct(0xf4);	//;Setting ARBIT_2
	Hyc_drvLcd_WriteData(0xff);    	//;[arb2_wr_sel(3:0)or men_scrd_sel(2:0),arb2_rd_sel(3:0)or men_wr_sel(2:0)]
	Hyc_drvLcd_WriteData(0x3f);		//;[ramwrn_sel,arb0_sel,arb2_st_sel(1:0),arb2_wrgap_sel(3:0)]

	Hyc_drvLcd_WriteInstruct(0xf5);	//;PARAtin DISP
	Hyc_drvLcd_WriteData(0x10);    	//;[PDM1,PDM0,oe_del_sel1,oe_del_sel0,eqpw1,eqpw0,-,-]

	Hyc_drvLcd_WriteInstruct(0xfb);	//Vcom & Source EQ setting (1 PARAMETER)
	Hyc_drvLcd_WriteData(0x7f);    	//;Vcom_porsel,Vcom_mul_mode,SV_mode,Vcom_mid2_sel(1:0),Vcom_mid1_sel(1:0)]
	
//omit	
	Hyc_drvLcd_WriteInstruct(0x36);	// DISPLAY FUNCTION SET
	Hyc_drvLcd_WriteData(0x60);



	Hyc_drvLcd_WriteInstruct(0x20);	//DISPLAY INVERSE
	Hyc_drvLcd_WriteInstruct(0x3a);
	Hyc_drvLcd_WriteData(0x05);    //65K
	
	i=60000;
	while(i--);


	Hyc_drvLcd_WriteInstruct(0x29);	//DISPLAY ON

}
/*-----------------------------------------------------------------------------
* 函数:	drvLcd_DisplayOn
* 功能:	打开显示
* 参数:	none
* 返回:	none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_DisplayOn(void)
{
//   Hyc_drvLcd_InitLcdModuleInstructs1();
   Hyc_drvLcd_WriteInstruct(0x29);  //display on
//   delay(40);
//   Hyc_drvLcd_WriteData(0x0020);
}

/*-----------------------------------------------------------------------------
* 函数:	drvLcd_DisplayOff
* 功能:	关闭显示
* 参数:	none
* 返回:	none
*----------------------------------------------------------------------------*/
void drvLcd_DisplayOff(void)
{

    Hyc_drvLcd_WriteInstruct(0xb1);	// ;frame
	Hyc_drvLcd_WriteData(0x60);	//2e
	Hyc_drvLcd_WriteData(0x10);	//02
	Hyc_drvLcd_WriteData(0x10);	//02
	Hyc_drvLcd_WriteInstruct(0x28);	//display off
}



/*-----------------------------------------------------------------------------
* 函数:	drvLcd_LCDModulePowerOn
* 功能:	打开LCD模块电源
* 参数:	none
* 返回:	none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_LCDModulePowerOn(void)
{
	Hyc_drvLcd_InitLcdModuleInstructs();	//sleep out = reInitialize
	//Hyc_drvLcd_DisplayOn();	
	
	Hyc_RefreshScreen_Lcd();
	Hyc_LcdModulePowerOnOff(1);
}

/*-----------------------------------------------------------------------------
* 函数:	drvLcd_LCDModulePowerOff
* 功能:	关闭LCD模块电源
* 参数:	none
* 返回:	none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_LCDModulePowerOff(void)
{
	drvLcd_DisplayOff();
	Hyc_LcdModulePowerOnOff(0);

	//Hyc_drvLcd_WriteInstruct(0x28);	//display off
	//Hyc_drvLcd_WriteInstruct(0x10);
}

/*-----------------------------------------------------------------------------
* 函数:	drvLcd_InitLCDModule
* 功能:	
* 参数:	none
* 返回:	none
*----------------------------------------------------------------------------*/
void Hyc_drvLcd_InitLCDModule(void)
{
	Hyc_LcdModulePowerOnOff(0);
	Hyc_drvLcd_InitLcdModuleInstructs();
	Hyc_drvLcd_ClearLcdRAM();
	Hyc_drvLcd_DisplayOn();
	Hyc_LcdModulePowerOnOff(1);
}
/*-----------------------------------------------------------------------------
* 函数:	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;
/*
    tempData=(0x00FF&rect->y);
    Hyc_drvLcd_WriteInstruct(0x0020);                               //Specify the x address in RAM
	Hyc_drvLcd_WriteData(tempData); 
	
    tempData=(0x01FF&rect->x);
	Hyc_drvLcd_WriteInstruct(0x0021);                               //Specify the y address in RAM
	Hyc_drvLcd_WriteData(tempData); 

	tempData=(0x00FF&rect->y);
	Hyc_drvLcd_WriteInstruct(0x0050);                              //Specify the horizontal start positions
	Hyc_drvLcd_WriteData(tempData);   
				
	tempData=(0x00FF&(rect->y+rect->h-1));                         //Specify the horizontal end positions
	Hyc_drvLcd_WriteInstruct(0x0051); 
	Hyc_drvLcd_WriteData(tempData); 
				
	tempData=(0x01FF&rect->x); 
	Hyc_drvLcd_WriteInstruct(0x0052);                             //Specify the Vertical start positions
	Hyc_drvLcd_WriteData(tempData); 
				
    tempData=(0x01FF&(rect->x+rect->w-1));
	Hyc_drvLcd_WriteInstruct(0x0053);                               //Specify the Vertical end positions
	Hyc_drvLcd_WriteData(tempData); 
	
	Hyc_drvLcd_WriteInstruct(0x0022);                               //RAM write	
*/
	Hyc_drvLcd_WriteInstruct(0x2a);
	Hyc_drvLcd_WriteData(0x0001&(rect->x>>8));
	Hyc_drvLcd_WriteData(0x00FF&rect->x);
	tempData=rect->x+rect->w-1;
	Hyc_drvLcd_WriteData(0x0001&(tempData>>8));
	Hyc_drvLcd_WriteData(0x00FF&tempData);

	Hyc_drvLcd_WriteInstruct(0x2b);						//Specify the y address in RAM
	Hyc_drvLcd_WriteData(0x0001&(rect->y>>8));
	Hyc_drvLcd_WriteData(0x00FF&rect->y);
	tempData=rect->y+rect->h-1;
	Hyc_drvLcd_WriteData(0x0001&(tempData>>8));
	Hyc_drvLcd_WriteData(0x00FF&tempData);

	Hyc_drvLcd_WriteInstruct(0x2c);
}

⌨️ 快捷键说明

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