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

📄 ili9320tp.c

📁 液晶顯示驅動程序源碼
💻 C
字号:
//use ILI9320 or equivalent IC for 240RGB*320 QVGA  LCM
//8080 mcu timing  16bit data bus
//VDD=VCI=3.3V
//LM-M0N0TCTLW3D  FPC
//LCD: HDT24G03C-A(Arima)
//writed by beyond
//DATE:2007/08/13

#include <reg52.h>
//#include <gray.h> 
//#include <main.h>
#include<pic.h>

sfr16 DPTR=0x82;
      
sbit RES = P3^0;
sbit A0 =  P3^1;  
sbit WRB = P3^2;      
//sbit CS_MAIN=P3^6;    

sbit AUTOB =P0^6; 
sbit STEPB =P0^7;  

sbit DCLK = P3^3;
sbit CSA  = P3^4;
sbit DIN  = P3^5;
sbit DOUT = P3^6;
sbit ENTI = P3^7;

void main_init(void);
void main_Write_COM(unsigned int  wrcomH);
void main_Write_DATA(unsigned int DH);
void main_W_com_data(unsigned int com1,dat1);
void picture(void);
void main_DAT(unsigned int OY,unsigned int WS);	
void main_address_set(void);
void main_Pattern(unsigned int jk,jm);
void main_gray(void);
void color(void);
void blue(void);

void main_picture(void);

void delaymms(int count);
void delayms(int count);
void point(void);
int  ADS7843_WriteRead(unsigned char px);
void press(void);

main()
{

    RES=1;
	delaymms(300);
	RES=0;
	delaymms(300);
	RES=1;
	delaymms(700);
  
	main_init();   
	while(1)
	{
       main_Pattern(0xf800,0xf800);         //red     
	  //delaymms(10);
       press();

     ///  
      main_Pattern(0xf800,0x001f);         //blue      
//	    delaymms(100);
    	press();
      
    main_Pattern(0x001f,0x07e0);         //green
	  //  delaymms(100);
 		press();			
 	
 		
 	  
	main_Pattern(0x0000,0x0000);         //black        
	    //delaymms(100);
    //
 		press();	
 		
      //  main_gray();                         //gray
	 //  delaymms(10);
 		//press();
 	//	color();                             //color
	 //   delaymms(100);
 	//	press();
  	//	blue();                              //blue
	  //  delaymms(100);
 	//	press();  

	
       main_Pattern(0xffff,0xffff);         //white     
	    //delaymms(1);

 	  press();	

      main_gray();                         //gray
        // delaymms(10);
      press();
      picture();                          //picture
     // delaymms(10);
    
     press();
    while(1)
     {
      if(ENTI==0) 
	   {
	    point();
		}
      }
   }
}


void main_init(void)
{
    //9320
      delayms(50);      //this delay time is necessary
    main_W_com_data(0x00e5, 0x8000);
    main_W_com_data(0x0000, 0x0001); 	   // Start internal OSC.
    main_W_com_data(0x0001, 0x0100);	   // set SS and SM bit
    main_W_com_data(0x0002, 0x0700);	   // set 1 line inversion 0700
    main_W_com_data(0x0003, 0x1030);	   // 10b0 set GRAM write direction and BGR=1. 
    main_W_com_data(0x0004, 0x0000);	   // Resize register
    
    main_W_com_data(0x0008, 0x0202);	   // set the back porch and front porch
    main_W_com_data(0x0009, 0x0000);	   // set non-display area refresh cycle ISC[]
    main_W_com_data(0x000A, 0x0000);	   // FMARK function
    main_W_com_data(0x000C, 0x0000);         // RGB interface setting
    main_W_com_data(0x000D, 0x000f);	   // Frame marker Position
    main_W_com_data(0x000F, 0x0000);         // RGB interface polarity
  
  //*************Power On sequence ****************
    main_W_com_data(0x0010, 0x0000);         // SAP, BT[3:0], AP, DSTB, SLP, STB
    main_W_com_data(0x0011, 0x0007);         // DC1[2:0], DC0[2:0], VC[2:0]
    main_W_com_data(0x0012, 0x0000);         // VREG1OUT voltage
    main_W_com_data(0x0013, 0x0000);         // VDV[4:0] for VCOM amplitude
      delayms(20);                                // Dis-charge capacitor power voltage
  
    main_W_com_data(0x0010, 0x1fb0);         //0x17b0   SAP, BT[3:0], AP, DSTB, SLP, STB
    main_W_com_data(0x0011, 0x0007);        //0137 //0134 OK // DC1[2:0], DC0[2:0], VC[2:0]
      delayms(20);			            // Delay 50ms  
    main_W_com_data(0x0012, 0x011e);        //013E     // VREG1OUT voltage
      delayms(20);			           // Delay 50ms
    main_W_com_data(0x0013, 0x1f00);       //1500  /1f00      // VDV[4:0] for VCOM amplitude
    main_W_com_data(0x0029, 0x001f);          // VCM[4:0] for VCOMH  //13
      delayms(20);    
    
    main_W_com_data(0x0020, 0x0000);         // GRAM horizontal Address
    main_W_com_data(0x0021, 0x0000);         // GRAM Vertical Address
    main_W_com_data(0x002B, 0x0020);
  
  // ----------- Adjust the Gamma  Curve ----------//
  /*
    main_W_com_data(0x0030, 0x0000);		
    main_W_com_data(0x0031, 0x0505);		
    main_W_com_data(0x0032, 0x0004);
    
    		
    main_W_com_data(0x0035, 0x0006);		
    main_W_com_data(0x0036, 0x0707);		
    main_W_com_data(0x0037, 0x0105);		
    main_W_com_data(0x0038, 0x0002);		
    main_W_com_data(0x0039, 0x0707);
    
    main_W_com_data(0x003C, 0x0704);		
    main_W_com_data(0x003D, 0x0807);	
   
  */
   
    main_W_com_data(0x0030, 0x0403);		  
    main_W_com_data(0x0031, 0x0403);		  
    main_W_com_data(0x0032, 0x0403);                                         
                 
    main_W_com_data(0x0035, 0x0000);		  
    main_W_com_data(0x0036, 0x0000);		  
    main_W_com_data(0x0037, 0x0403);		  
    main_W_com_data(0x0038, 0x0403);		  
    main_W_com_data(0x0039, 0x0403);            
                            
    main_W_com_data(0x003C, 0x0000);		  
    main_W_com_data(0x003D, 0x1400);	
    
    
    
   /* 
       
     main_W_com_data(0x0030, 0x0000);
     main_W_com_data(0x0031, 0x0201);
     main_W_com_data(0x0032, 0x0202);                                      		                          
     main_W_com_data(0x0035, 0x0106);
     main_W_com_data(0x0036, 0x1000);
     main_W_com_data(0x0037, 0x0302);
     main_W_com_data(0x0038, 0x0707);
     main_W_com_data(0x0039, 0x0707);                                      
     main_W_com_data(0x003C, 0x0600);
     main_W_com_data(0x003D, 0x020E);
    
  */
                                              
       
  //------------------ Set GRAM area ---------------//
    main_W_com_data(0x0050, 0x0000);	    // Horizontal GRAM Start Address  00
    main_W_com_data(0x0051, 0x00EF);	    // Horizontal GRAM End Address
    main_W_com_data(0x0052, 0x0000);	    // Vertical GRAM Start Address
    main_W_com_data(0x0053, 0x013F);	    // Vertical GRAM Start Address
        
         
    main_W_com_data(0x0060, 0x2700);	    // Gate Scan Line
    main_W_com_data(0x0061, 0x0001);	    // NDL,VLE, REV
    main_W_com_data(0x006A, 0x0000);	    // set scrolling line
        
  //-------------- Partial Display Control ---------//
    main_W_com_data(0x0080, 0x0000);
    main_W_com_data(0x0081, 0x0000);
    main_W_com_data(0x0082, 0x0000);
    main_W_com_data(0x0083, 0x0000);
    main_W_com_data(0x0084, 0x0000);
    main_W_com_data(0x0085, 0x0000);
    
  //-------------- Panel Control -------------------//
    main_W_com_data(0x0090, 0x0000); //0010
    main_W_com_data(0x0092, 0x0000);//0000
    main_W_com_data(0x0093, 0x0003);//0003
    main_W_com_data(0x0095, 0x0110);//0110
    main_W_com_data(0x0097, 0x0000);
    main_W_com_data(0x0098, 0x0000);
  

    main_W_com_data(0x0007, 0x0173);	    //    0x0173 262K color and display ON

}

void main_Write_COM(unsigned int  wrcomH)		
{	
//	 CS_MAIN =0;	
    DPTR=wrcomH;
					
	A0=0;
	P2=DPH;	

	A0=0;
	P1=DPL;					
	WRB=0;
	WRB=1;
//	CS_MAIN =1;	
}


void main_Write_DATA(unsigned int DH)		
{
///	CS_MAIN =0;	
    DPTR=DH;							
	A0=1;										
	P2=DPH;	

	A0=1;										
	P1=DPL;						
	WRB=0;
	WRB=1;
//	CS_MAIN =1;	
}

void main_DAT(int OY, WS)		
{
//	CS_MAIN =0;	
    //DPTR=;							
	A0=1;										
	P2=OY;	

	A0=1;										
	P1=WS;						
	WRB=0;
	WRB=1;
//	CS_MAIN =1;	
}




void main_W_com_data(unsigned int com1,dat1)
{
   main_Write_COM(com1);
   main_Write_DATA(dat1);
}


void main_address_set(void)
{
   
    main_W_com_data(0x0020,0x0000);
    main_W_com_data(0x0021,0x0000);
    main_Write_COM(0x0022);
}


void main_Pattern(unsigned int jk,jm)
{
    int  i,j;
    main_address_set();

    for(i=0;i<240;i++)
     {
      main_Write_DATA(jk);
     }

    for(i=0;i<318;i++)
	 {
      main_Write_DATA(jk);
	  for (j=0;j<238;j++)
	   	{
         main_Write_DATA(jm);
	    }
       main_Write_DATA(jk);
	  }

   for(i=0;i<240;i++)
     {
      main_Write_DATA(jk);
     }
}






void main_gray(void)
{
    unsigned char  A,B,C;
    unsigned int  i,j,k,DH;
    //unsigned  char  DH;

    main_address_set();
    
 for(k=0;k<160;k++)
  {  
    A=0;
    B=0;
    C=0; 

   for(i=0;i<16;i++)
   {
     DH=(A<<11)+(B<<5)+C;
    for(j=0;j<15;j++)
     {
      main_Write_DATA(DH);
     }
	A=A+2;
    B=B+4;
    C=C+2;
   }
  }


  for(i=0;i<160;i++)
   {
   for(j=0;j<120;j++)
     {
     main_Write_DATA(0xffff);
     }

   for(j=0;j<120;j++)
     {
     main_Write_DATA(0x0000);
     }
   }
}



void color(void)
{

    unsigned int  i,j;
   main_address_set();

for(i=0;i<64;i++)
  { 
    for(j=0;j<240;j++)
    {
      main_Write_DATA(0xf800);
    }
  }

for(i=0;i<64;i++)
  {  
    for(j=0;j<240;j++)
    {
      main_Write_DATA(0x07e0);
    }
   }

for(i=0;i<64;i++)
  {
    for(j=0;j<240;j++)
    {
      main_Write_DATA(0x001f);
    }
  }

for(i=0;i<64;i++)
  {
    for(j=0;j<240;j++)
    {
      main_Write_DATA(0XFFE0);  //yellow
    }  
  }
for(i=0;i<64;i++)
  {
    for(j=0;j<240;j++)
    {
      main_Write_DATA(0XFFFF);
    }
   } 
 }


void blue(void)
{
    unsigned int i,j;
    main_address_set();

	for(i=0;i<320;i++)
	 {
	  for(j=0;j<48;j++)
	   {
	 main_Write_DATA(0x001f);
	   }

	  for(j=0;j<48;j++)
	   {
	 main_Write_DATA(0x000f);
	   }

	  for(j=0;j<48;j++)
	   {
	 main_Write_DATA(0x0007);
	   }

     for(j=0;j<48;j++)
	   {
	 main_Write_DATA(0x0003);
	   }

     for(j=0;j<48;j++)
	   {
	 main_Write_DATA(0x0001);
	   }
	  }
}

void picture(void)                  //picture
{
   int i,j,x=0,y=1,a,c;
   main_address_set();

  for(i=0;i<60;i++)
   {
    for(j=0;j<240;j++)
    {
	 main_Write_DATA(0x0000);
    }
   }

  for(j=0;j<200;j++)
   {                    //1 
     for (c=0;c<45;c++)
      {
	 main_Write_DATA(0x0000);
      }

    for (a=45;a<195;a++)
      {
	  main_DAT(pic[x],pic[y]); 

      x=x+2;
      y=y+2;
      }

    for (c=195;c<240;c++)
      {
	 main_Write_DATA(0x0000);
      }
   }                //2

  for(i=0;i<60;i++)
    {
     for(j=0;j<240;j++)
      {
	 main_Write_DATA(0x0000);
      }
    }
}

/*
void picture(void)                  //picture
{
   int i,j,x=0,y=1,a;
  
   
    main_W_com_data(0x0001, 0x0100);	   // set SS and SM bit
    main_W_com_data(0x0002, 0x0700);	   // set 1 line inversion 0700
    main_W_com_data(0x0003, 0x1030);	   // 10b0 set GRAM write direction and 
    main_W_com_data(0x0050, 45);		  
    main_W_com_data(0x0051,194);            
                            
    main_W_com_data(0x0052,60);		  
    main_W_com_data(0x0053,259);	
    
      main_W_com_data(0x0020,45);
      main_W_com_data(0x0021,60);
      main_Write_COM(0x0022);
  
    for (j=0;j<200;j++)
    {
    for (a=0;a<150;a++)
      {
	  main_DAT(pic[x],pic[y]); 

      x=x+2;
      y=y+2;
      }
     }
  
}

*/
void press(void)              // powertip  STEP or AUTO Status 
{
   while (AUTOB==0&STEPB==1)
      {} 
		  
      if(STEPB==0)
         {
	    delaymms(5);
	 while(STEPB==0)
      	         {}
            }
	 else if(AUTOB==1)
	 {  
	 delaymms(5);
	  }
}  



void delayms(int count)   
{
        int i,j;
        for(i=0;i<count;i++)		
                for(j=0;j<500;j++);				
}


void delaymms(int count)   /* X10ms */
{
        int i,j;
        for(i=0;i<count;i++)		
                for(j=0;j<2;j++);				
}


int  ADS7843_WriteRead(unsigned char px)
{
     int dat,i;
         CSA=0;
         px = px|0x80;
     
         DCLK=0;
	     DIN=0;

        delaymms(5);

     for(i=0;i<8;i++)
        {
      if((px&0x80)!= 0)
	    {
        DIN=1;
	    }
	else
	    {
	    DIN=0;
        }
        delaymms(1);
        DCLK=1;
        delaymms(1);
        DCLK=0;
        delaymms(1);

        px=px<<1;

       }
  	    DIN=0;
        delaymms(1);
        DCLK=1;
        delaymms(1);

        dat=0;

    for(i=0;i<8;i++)
       {
	   dat=dat<<1;
       DCLK=0;
    if(DOUT!= 0) dat=dat|1;
       DCLK=1;                       
              
	  delaymms(1);
      }
      DCLK=0;
	  delaymms(1);
   for(i=0;i<3;i++)
      {
      DCLK=1;
	  delaymms(1);
      DCLK=0;
	  delaymms(1);
      }

      CSA=1;
      return(dat);
      }




void point(void)
{ 
 long int x,y,xx,yy; 

	 x=0;
	 y=0;

//y=320-((( ADS7843_WriteRead(0x98))-20)*320/236);
//y=320-(( ADS7843_WriteRead(0x98)-20)*180/256)*2; 
y=320-(( ADS7843_WriteRead(0x98)-19)*183/256)*2; 
yy=320-( ADS7843_WriteRead(0x98)*180/236)*2; 
//x=240-(( ADS7843_WriteRead(0xD8)-2)*240/256);
x=240-(( ADS7843_WriteRead(0xD8)-15)*281/256);
//xx=240-( ADS7843_WriteRead(0xD8));
xx=240-( ADS7843_WriteRead(0xD8));

      if ((yy>0x120)&&(yy<0x13f))
        {       
             if (xx<0x30)
              {
  	         //  main_address_set();
               main_Pattern(0xffff,0xffff);
              }
      //if ((yy>0x120)&&(yy<0x13f))
           
               if((xx<0x60)&&(xx>0x30))
             {
           //   main_address_set();
               main_Pattern(0x07e0,0x07e0);
             }
    // if ((yy>0x120)&&(yy<0x13f))
            
               if((xx<0x90)&&(xx>0x60))
             {
            //  main_address_set();
             // main_Pattern(0x001f,0x001f);
		   	 picture();   
              }
     // if ((yy>0x120)&&(yy<0x13f))
             
               if((xx<0xc0)&&(xx>0x90))
             {
            //   main_address_set();
             main_Pattern(0x0000,0x0000);
              }

      // if ((yy>0x120)&&(yy<0x13f))   
           //  if (xx>0xc0)
           // { 
         
	       //   main_address_set();
            //  main_Pattern(0x0000,0xffff);
          // }
          }
               else  

         
    main_W_com_data(0x0020,x);
    main_W_com_data(0x0021,y+1);
     
    main_Write_COM(0x0022);

   main_Write_DATA(0xffff);
  //******************************  main_Write_DATA(0xffff);

    main_W_com_data(0x0020,x);
    main_W_com_data(0x0021,y);
    
     main_Write_COM(0x0022);
    main_Write_DATA(0xffff);
  // ************************** main_Write_DATA(0xffff);
  // **************************** main_Write_DATA(0xffff);

    main_W_com_data(0x0020,x+1);
    main_W_com_data(0x0021,y);
  
 
   main_Write_COM(0x0022);
    main_Write_DATA(0xffff);
  // **************************** main_Write_DATA(0xffff);
  // ***************************** main_Write_DATA(0xffff);



//	 xx=0;
//	 yy=0;
}




⌨️ 快捷键说明

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