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

📄 lcd.c

📁 S3C2440A + ADS 控制 TFT LCD(LTV350QV-F0E) 的驱动
💻 C
字号:
#include "def.h"
#include "lcd.h"
#include "2440addr.h"
#include "uart.h"

unsigned short LCD_BUFER[240][320]; 

extern unsigned char gImage_1[153600];

extern unsigned char gImage_2[153600];

//void Delay(unsigned int time);

void  MS_Delay(unsigned int time)
{

   int tt;
   
	for(;time>0;time--)
	{
	
	for(tt=100000;tt>0;tt--){}
	
	}

}

void  US_Delay(unsigned int time)
{
	int tt;
	
	for(;time>0;time--){
	
	for(tt=400;tt>0;tt--)
	{}
	}

}


 void lcd_port_init()
 {
   rGPCCON = 0xaa95aaaa;
   
   rGPCUP = 0x0;
   
   rGPDCON = 0xaaaaaaaa;//0xaa95aaa5
   
   rGPDUP = 0x0;
 
 
 }
 
 
 void lcd_register_init()
 {
   
   unsigned int addrstart;
   unsigned int addrstart_low;
   unsigned int addrstart_high;
   unsigned int addrend; 
   unsigned int addrend_low;
 
   rLCDCON1 = (6<<8)|(0<<7)|(3<<5)|(12<<1)|(0);
   rLCDCON2 = (8<<24)|(239<<14)|(3<<6)|(2);
   rLCDCON3 = (19<<19)|(319<<8)|(3);
   // rLCDCON4 = (18<<8);
   //rLCDCON5 = (15<<8)|(0<<1)|(1);
   rLCDCON4 = 18;
   rLCDCON5 =((1<<11)|(1<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<1)|(1));
  
   //rLCDSADDR1 = (((0x30000000&0x7fffffff)>>22)|((0x30000000&0x3ffff)>>1));
   
   //rLCDSADDR2 = (((0x30000000&0x3ffff)>>1)+320*240*2);
   
   addrstart = (unsigned int) LCD_BUFER;
   addrstart_high =  addrstart>>22;
   addrstart_low  = addrstart&0x3fffff;
   addrend =  addrstart + 320*240*2;
   addrend_low = addrend&0x3fffff;
   
   rLCDSADDR1 = (addrstart_high<<21)|(addrstart_low>>1);
   rLCDSADDR2 =  addrend_low>>1;
   
   rLCDSADDR3 = 320;
   
   rLCDINTMSK = 0x3;
   
   rTCONSEL = 0x0;
   
   rTPAL = 0x0;
 
 
 
 }

void  LTV350QV_Write(unsigned short index, unsigned short regdata)
{

   unsigned  short int  tmp1;
   unsigned  short int tmp2;
   unsigned  int  tmp3;
   unsigned  short int i;
   
    CS_H;//#define CS_H    rGPCDAT |=(1<<8)
    SCLK_H;//#define SCLK_H  rGPCDAT |=(1<<9)
    SDI_H;//#define SDI_H   rGPCDAT |=(1<<10)
    US_Delay(100);
  
    tmp1 = 0x74;        //start byte 
    tmp2 = index;  
    tmp3 = (tmp1<<16)|tmp2;
   
   CS_L;//#define CS_L    rGPCDAT &=~(1<<8)
   US_Delay(100);
   
   for(i=0;i<24;i++)
   {
      SCLK_L;//#define SCLK_L  rGPCDAT &=~(1<<9)
      
      if(tmp3&(1<<(23-i)))
       { 
          SDI_H;
       }
       else
       {
          SDI_L;//#define SDI_L   rGPCDAT &=~(1<<10)
       }
       
      US_Delay(100);
      SCLK_H;
      US_Delay(100);    
   }
   
   CS_H;
   
    Uart_Printf("ddd\n"); 
    
    US_Delay(100);
   
   tmp1 = 0x76;
   tmp2 = regdata;
   tmp3 = (tmp1<<16)|tmp2;
      
    CS_L;
    US_Delay(100);
   
   for(i=0;i<24;i++)
   {
      SCLK_L;
      
      if(tmp3&(1<<(23-i)))
      {
        SDI_H;
      }      
      else
      {
        SDI_L;
      }
      
       US_Delay(100);
       SCLK_H;
       US_Delay(100);    
   }
   
   CS_H;
   US_Delay(100);
   
   Uart_Printf("a\n");
}
  
 
 void LTV350QV_init()
 {
    MS_Delay(5);
    LTV350QV_Write(9,0x0);
    MS_Delay(10);
    
    LTV350QV_Write(9,0x4000);
    LTV350QV_Write(10,0x2000);
    
    LTV350QV_Write(9,0x4055);
    
    MS_Delay(50);
    
    LTV350QV_Write(1,0x409d);
    LTV350QV_Write(2,0x0204);
    LTV350QV_Write(3,0x0100);
    LTV350QV_Write(4,0x3000);
    LTV350QV_Write(5,0x4003);
    LTV350QV_Write(6,0x000a);
    LTV350QV_Write(7,0x0021);
    LTV350QV_Write(8,0x0c00);
    LTV350QV_Write(10,0x0103);
    LTV350QV_Write(11,0x0301);
    LTV350QV_Write(12,0x1f0f);
    LTV350QV_Write(13,0x1f0f);
    LTV350QV_Write(14,0x0707);
    LTV350QV_Write(15,0x0307);
    LTV350QV_Write(16,0x0707);
    LTV350QV_Write(17,0x0);
    LTV350QV_Write(18,0x0004);
    LTV350QV_Write(19,0x0);
   
    MS_Delay(200);
   
    LTV350QV_Write(9,0x4a55);
    LTV350QV_Write(5,0x5003);
 
 
  Uart_Printf("b\n");

 }
 

 void Lcd_ClearScr(unsigned short color)
 {
   unsigned short i;
   unsigned short j;
   
   for(i=0;i<240;i++)
   {
     for(j=0;j<320;j++)
     {
       LCD_BUFER[i][j] = color;
       
     }  
     US_Delay(5);
   }

  
  Uart_Printf("c\n");

 }
 

 
 void Test_Pic(void)
 {
   
   Lcd_Pic_H(gImage_1);
   MS_Delay(1000);
   Lcd_Pic_V(gImage_2);
   MS_Delay(1000);
 }
 
 void Lcd_Pic_H(unsigned  char *p)  //行
 {
   unsigned int i;
   unsigned char *h;
   unsigned char *k;
   h=p;
   k=(unsigned char *)LCD_BUFER;
    
   for(i=0;i<153600;i++)
  
     {
       *k=*h;
       h++;
       k++;
       
       US_Delay(5);
     }
   
  }
  
  
   void Lcd_Pic_V(unsigned  char *p)   //列
 {
   unsigned int i;
   unsigned int j;
   //unsigned int n;
      
   unsigned char *h;
   unsigned char *k;
   h=p;
   k=(unsigned char *)LCD_BUFER;
   
   for(i=0;i<320*2;i++)
    {
      for(j=0;j<240*2;j++)
      {
       *(k+j*320+i) = *(h+j*320+i);
      // h++;
       //k++;
       
       US_Delay(5);
      }
  
    }
 }
 
 
 void lcd_displayen()
 {
 
   rLCDCON1 |= 1;
   US_Delay(100);
 
   Uart_Printf("d\n");
 }
 

⌨️ 快捷键说明

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