📄 lcd.c
字号:
SPI_Write(0x13,0x40CA);
SPI_Write(0x10,0x310C);//310c 511c
delay_lcd(1000);
SPI_Write(0x12,0x1658);
delay_lcd(500);
SPI_Write(0x01,0x2B1D);
SPI_Write(0x02,0x0300);
SPI_Write(0x03,0xD040);//DISENABLE DE
SPI_Write(0x08,0x0014); ///VBP=16
SPI_Write(0x09,0x000E);///HBP=16
SPI_Write(0x76,0x2213);
SPI_Write(0x0B,0x33E0);
SPI_Write(0x0C,0x0020);
SPI_Write(0x76,0x0000);
SPI_Write(0x0D,0x0000);
SPI_Write(0x0E,0x0000);
SPI_Write(0x14,0x0000);
SPI_Write(0x15,0x0803);
SPI_Write(0x16,0x0000);
SPI_Write(0x30,0x0209);
SPI_Write(0x31,0x0404);
SPI_Write(0x32,0x0E07);
SPI_Write(0x33,0x0602);
SPI_Write(0x34,0x0707);
SPI_Write(0x35,0x0707);
SPI_Write(0x36,0x0707);
SPI_Write(0x37,0x0206);
SPI_Write(0x38,0x0F06);
SPI_Write(0x39,0x0611);
}
//##############################################
void LCD_DISPLAY_ON_Sequence(void)
{
delay_lcd(500);//Wait more than 2 frames
SPI_Write(0x07,0x0001);
delay_lcd(500);//Wait more than 2 frames
SPI_Write(0x07,0x0101);
delay_lcd(500);//Wait more than 2 frames
SPI_Write(0x76,0x2213);
SPI_Write(0x1C,0x7777);
SPI_Write(0x0B,0x33E0);
SPI_Write(0x76,0x0000);
SPI_Write(0x07,0x0103);
}
//##############################################
void LCD_DISPLAY_OFF_Sequence(void)
{
//Display On Status
SPI_Write(0x76,0x2213);//R76h ← 2213h
SPI_Write(0x0B,0x33E1);//R0Bh ← 33E1h
SPI_Write(0x76,0x0000);//R76h ← 0000h
SPI_Write(0x07,0x0102);//R07h ← 0102h
delay_lcd(500);//Wait more than 2 frames
SPI_Write(0x07,0x0100);//R07h ← 0100h
delay_lcd(500);//Wait more than 2 frames
SPI_Write(0x12,0x0000);//R12h ← 0000h
SPI_Write(0x10,0x0100);//R10h ← 0100h
//Display Off Status
}
//##############################################
void LCD_POWER_OFF_Sequence(void)
{
//System Power ON
SPI_Write(0x07,0x0000);//R07h ← 0000h
SPI_Write(0x10,0x0000);//R10h ← 0000h
SPI_Write(0x11,0x0000);//R11h ← 0000h
SPI_Write(0x12,0x0000);//R12h ← 0000h
//System Power Off
}
//##############################################
void LCD_Stand_by_IN_Sequence(void)
{
//Display On Status
//Display off sequence
//Stand-by setting
SPI_Write(0x10,0x0001);//R10h ← 0001h
}
//##############################################
void LCD_Stand_by_Cancel_Sequence(void)
{
//Stand-by
SPI_Write(0x10,0x0000);//R10h ← 0000h
//Power on sequence
//Display on sequence
//Display on
}
//##############################################
void SPI_Write(unsigned char Index,unsigned short REG_DATA)
{
unsigned char DeviceID = 0x74;
unsigned char lcd_Index = (unsigned char)(Index & 0xff);
unsigned char lcd_data0 = (unsigned char)((REG_DATA >> 8)& 0xff);
unsigned char lcd_data1 = (unsigned char)( REG_DATA & 0xff);
rGPGDAT &= ~(1<<2); //nLCD_CS low
while(!(rSPSTA0&0x1)); //Check for Trasfer ready Flag high
rSPTDAT0 = (DeviceID | 0x0); //Send Device ID code
while(!(rSPSTA0&0x1)); //Check for Trasfer ready Flag high
rSPTDAT0= 0x00; //Write register 8 bit
while(!(rSPSTA0&0x1)); //Check for Trasfer ready Flag high
rSPTDAT0 = lcd_Index; //Write register 8 bit
while(!(rSPSTA0&0x1)); //Check for Trasfer ready Flag high
rGPGDAT |= (1<<2); //nLCD_CS high
delay_lcd(1);
rGPGDAT &=~(1<<2); //nLCD_CS low
while(!(rSPSTA0&0x1)); //Check for Trasfer ready Flag high
rSPTDAT0 = (DeviceID |0x2); //Send Device ID code
while(!(rSPSTA0&0x1)); //Check for Trasfer ready Flag high
rSPTDAT0 = lcd_data0; //Write the data first 8 bit
while(!(rSPSTA0&0x1)); //Check for Trasfer ready Flag high
rSPTDAT0 = lcd_data1; //Write the data second 8 bit
while(!(rSPSTA0&0x1));
rGPGDAT |=(1<<2); //nLCD_CS high
delay_lcd(1); //need to delay 50us
}
//##############################################
void Init_Display( void )
{
//unsigned int clkval_calc; // 040507
//unsigned short *pwc;
// Set up the LCD controller registers to display a power-on bitmap image.
// Follow the configuration order for setting the ports.
// 1) setting value(GPnDAT)
// 2) setting control register (GPnCON)
// 3) configure pull-up resistor(GPnUP)
// s2440IOP->GPBDAT |=(1<<0);
// s2440IOP->GPBUP |= (1<<0);
// s2440IOP->GPBCON &= ~(3<<0);
// s2440IOP->GPBCON |= (1<<0);
//GPD15~GPD11[31:22] ->set function pin VD[23]~VD[19]:10 10 10 10 10
//GPD7~GPD2 [15: 4] ->set function pin VD[15]~VD[10]:10 10 10 10 10 10
//rGPDCON = 0xaaaaaaaa;
//rGPDUP = 0xffffffff; //pull up disable register for port D
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
rGPDUP = 0xffffffff;
//GPC15~GPC11[31:22] ->set function pin VD[7]~VD[3]:10 10 10 10 10
//GPC7[15:14] ->Set function pin LCDVF2:10
//GPC6[13:12] ->Set Output pin:01(CS)
//GPC5[11:10] ->Set Output pin:01(Reset)
//GPC4[ 9: 8] ->Set function pin VM:10
//GPC3[ 7: 6] ->Set function pin VFRAME:10
//GPC2[ 5: 4] ->Set function pin VLINE:10
//GPC1[ 3: 2] ->Set function pin VCLK:10
//GPC0[ 1: 0] ->Set Output pin:01(backlight)
//rGPCCON = 0xaaaa56aa; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND
//rGPCUP = 0xffffffff; // Disable Pull-up register
rGPCCON = 0xaaaa56a9; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,
rGPCUP = 0xffffffff; // Disable Pull-up register
#if RGB16BPP
TMS350_LCD_CONTROLER_SetUP16();//********** LMS350QV_TEST_START
#else
TMS350_LCD_CONTROLER_SetUP24();
#endif
delay_lcd(10);
InitSPI();
}
/**************************************************************
320×240 16Bpp TFT LCD全屏填充特定颜色单元或清屏
**************************************************************/
void RGB_Start_PATTERN16(void)
{
int x, y;
unsigned int raw;
unsigned short * frameptr16;
frameptr16 =(unsigned short *) LCD_BUFFER_16bpp;
for( y = 0; y < 320; y++ ) {
if(y < 64)
raw = (0x1f<<11); //RED
else if(y < 128)
raw = 0x0000; //Black
else if(y < 192)
raw = 0xffff; //White
else if(y < 256)
raw = (0x3f<<5); //Green
else
raw = (0x1f<<0); //Blue
for( x = 0; x < 240; x++ ) {
*frameptr16 = raw;
frameptr16++;
}
}
}
/**************************************************************
在LCD屏幕上指定坐标点画一个指定大小的图片16bpp
**************************************************************/
static void Paint_Bmp_16bpp(int x0,int y0,int h,int l,unsigned char bmp[])
{
int x,y;
U32 c;
int p = 0;
for( y = y0 ; y < l ; y++ )
{
for( x = x0 ; x < h ; x++ )
{
c = bmp[p+1] | (bmp[p]<<8) ;
if ( ( (x0+x) < SCR_XSIZE_TFT_320240) && ( (y0+y) < SCR_YSIZE_TFT_320240) )
LCD_BUFFER_16bpp[y0+y][x0+x] = c ;
p = p + 2 ;
}
}
}
/**************************************************************
320×240 16Bpp TFT LCD全屏填充特定颜色单元或清屏
**************************************************************/
static void Lcd_ClearScr( U32 c)
{
unsigned int x,y ;
for( y = 0 ; y < SCR_YSIZE_TFT_320240 ; y++ )
{
for( x = 0 ; x < SCR_XSIZE_TFT_320240 ; x++ )
{
LCD_BUFFER_16bpp[y][x] = c ;
}
}
}
/**************************************************************
在LCD屏幕上指定坐标点画一个指定大小的图片24bpp
**************************************************************/
static void Paint_Bmp_24bpp(int x0,int y0,int h,int l,unsigned char bmp[])
{
int x,y;
U32 c;
int p = 0;
for( y = y0 ; y < l ; )
{
for( x = x0 ; x < h ; )
{
c = (bmp[p]) |(bmp[p+1]<<8) ;
if ( ( (x0+x+1) < SCR_XSIZE_TFT_320240_24) && ( (y0+y+1) < SCR_YSIZE_TFT_320240_24) )
{
LCD_BUFFER_24bpp[y0+y][x0+x] = c ;
LCD_BUFFER_24bpp[y0+y+1][x0+x+1] =bmp[p+2];
}
p = p + 3;
x=x+2;
}
y=y+2;
}
}
//########################################################
//ragma optimize ("",off)
void delay_lcd(unsigned int msDelay)
{
unsigned int i;
unsigned int tick;
tick=msDelay*1200;
for(i=0;i<tick;i++);
}
//ragma optimize ("",on)
//########################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -