📄 lcdmodule_st7787k_cm6611.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 + -