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

📄 lcd.c

📁 基于三星s3c2440的型号为LMS350GF03 TFT液晶屏的驱动源码。里面包括有16位和24位驱动。
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -