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

📄 9320ok.c

📁 一个驱动TFT屏的程序
💻 C
字号:
/****************************************************************************
 Controller IC:ILI9320,LG 2.4 TFT
 Paraller type:16 bit-8080 interface
 
 Resolutions:  240*320 pixels
 P0         : DB0---DB7===>D10-D17
 P1         : P1.4 P1.3 P1.2 P1.1 P1.0
	           RES  CS1  RS  /WR    RD
 Modified date: 2006.09.24
     Writer by: victor
note:register high 8bit must 00
****************************************************************************/
#include <reg52.h>
#include<intrins.h>

#define DisplayCol  240  //160
#define DisplaySeg  320   //128

#define StartCol  0 //
#define StartSeg  0 //

#define DataPort  P0
#define ContPort  P1

sbit _RST = P1^7;
sbit _CS1 = P1^4;
sbit  RS  = P1^5;  
sbit _WR  = P3^7;   //3.6
sbit _RD  = P3^6;   //3.7
sbit led=P1^6;
sbit  R1=P1^0;
sbit  R2=P1^1;
sbit  R3=P1^2;
sbit  ROMCS=P1^3;   //flash memory chip 1
sbit  LBLPowerOn=P3^4;         //backlight DC/DC on 

unsigned int xdata *ptr;
unsigned int page,seg;

void delay(unsigned int param)
{
   int i;
   for(;param>0;param--)
	for(i=0;i<960;i++);
}


void LCD_Index(unsigned char index)
{
    RS=0;
	P0=0;
    led=1;
    //delay(0);
    led=0;

	_CS1 =0;
    DataPort=index;
    _WR=0;
   //delay(0);
   _WR=1;
   _CS1 =1;
} 

void LCD_DataWrite(unsigned int set_db)
{
    RS=1;
	_CS1 =1;
    P0=set_db>>8;
    led=1;
    led=0;

	_CS1 =0;
    P0=set_db;
    _WR=0;
    _WR=1;
	_CS1 =1;
} 


void LCD_CmdWrite(unsigned char index,unsigned int set_db)
{

   LCD_Index(index);
   LCD_DataWrite(set_db);
}

void LCD_Reset(void)
{
    _CS1=0;
    _RST=1;
	_RD=1;

    delay(10);
	_RST=0;
	delay(60);
	_RST=1;
	delay(10);
}



void LCD_Initial1(void)       //initial code 1
{
   

	LCD_CmdWrite(0x00,0x0001); 
  	LCD_CmdWrite(0x01,0x0000); 
	LCD_CmdWrite(0x02,0x0300); 
	LCD_CmdWrite(0x03,0x10a0); 
	LCD_CmdWrite(0x04,0x0000); 
	LCD_CmdWrite(0x08,0x0202); 
	LCD_CmdWrite(0x09,0x0000); 
	LCD_CmdWrite(0x0a,0x0000); 
	LCD_CmdWrite(0x0c,0x0003); 
	LCD_CmdWrite(0x0d,0x0000); 
	LCD_CmdWrite(0x0f,0x0000); 
	LCD_CmdWrite(0x10,0x0000); 
	LCD_CmdWrite(0x11,0x0007); 
	LCD_CmdWrite(0x12,0x0000); 
	LCD_CmdWrite(0x13,0x0000); 
	delay(10);
	LCD_CmdWrite(0x10,0x17b0); 
	LCD_CmdWrite(0x11,0x0007); 
	delay(10);
	LCD_CmdWrite(0x12,0x011d); 
	LCD_CmdWrite(0x13,0x1500); 
	LCD_CmdWrite(0x29,0x000a); 
	LCD_CmdWrite(0x20,0x0000); 
	LCD_CmdWrite(0x21,0x0000); 
	LCD_CmdWrite(0x30,0x0000); 
	LCD_CmdWrite(0x31,0x0505); 
	LCD_CmdWrite(0x32,0x0004); 
	LCD_CmdWrite(0x35,0x0006); 
	LCD_CmdWrite(0x36,0x0707); 
	LCD_CmdWrite(0x37,0x0105); 
	LCD_CmdWrite(0x38,0x0002); 
	LCD_CmdWrite(0x39,0x0707); 
	LCD_CmdWrite(0x3c,0x0704); 
	LCD_CmdWrite(0x3d,0x0807); 
	LCD_CmdWrite(0x60,0x2700); 
	LCD_CmdWrite(0x61,0x0001); 
	LCD_CmdWrite(0x07,0x0173); 
}

//----------------------------------------------------------------------


void Checker(unsigned int param1,unsigned int param2) //Full on,off,checkerboard,bar
{
    LCD_Index(0x22);
    for(page=0;page<DisplayCol;page++)
	{
		for(seg=0;seg<DisplaySeg;seg++)
		{
		   if(seg%2) 
		   {
		     LCD_DataWrite(param1);
		   }
            else 
			{
			  LCD_DataWrite(param2);
    		}
		}
	}
}


void test(void)  //test
{
	for(page=0;page<DisplayCol;page++)
	{
		for(seg=0;seg<DisplaySeg;seg++)
		 {
                 if (page<3) 
				   {
				     LCD_DataWrite(0xffff);
					 delay(10);
				   }
                 else 
				     LCD_DataWrite(0x0000);
		 }
    }
}

void WriteGrid1(void)
{
	for(page=0;page<DisplayCol;page++)
		{
		for(seg=0;seg<DisplaySeg;seg++)
			{
			 switch((page/16+seg/16)%3)
             {
               case 0: LCD_DataWrite(0x001f);break;  //red
               case 1: LCD_DataWrite(0x07e0);break;  //green
               case 2: LCD_DataWrite(0xf800);break;  //blue
              }
			}
		}
}

void WriteBar1(void)
{
    unsigned char i;
    unsigned int n,m;
    LCD_Index(0x22);
		 for(i=0;i<80;i++)
		{
		   for(m=0;m<240;m++)
		   LCD_DataWrite(0xf800);
		}
	    for(i=0;i<80;i++)
		{
		   for(m=0;m<240;m++)
		   LCD_DataWrite(0x07e0);
		}
	    for(i=0;i<80;i++)
		{
		   for(m=0;m<240;m++)
		   LCD_DataWrite(0x001f);
		}
	    for(i=0;i<80;i++)
		{
		   for(m=0;m<240;m++)
		   LCD_DataWrite(0xffff);
		}


}

//============================================
void Field(void)
{
	unsigned char x;
	unsigned int y;
    LCD_Index(0x22);
	for(y=0;y<320;y++)
		for(x=0;x<240;x++)
		{
			if((y==0)||(y==1)||(y==158)||(y==159)||(y==318)||(y==319)){LCD_DataWrite(0xffff);}
			else if((x==0)||(x==1)||(x==118)||(x==119)||(x==238)||(x==239)){LCD_DataWrite(0xffff);}
			else{LCD_DataWrite(0x0000); }
		}
}


void WR_DATA(unsigned char temp1,temp2)
{
    RS=1;
	_CS1 =1;
    DataPort=temp1;
    led=1;
    led=0;

	_CS1 =0;
    DataPort=temp2;
    _WR=0;
    _WR=1;
	_CS1 =1;
} 

//========================================================
void showpicture1()
{
    unsigned char xdata *p;
    unsigned int i,j,temp1,temp2;
    unsigned long  n=0;
    R1=0;
    R2=0;
    R3=0;  
	LCD_CmdWrite(0x20,0x0000);   
	LCD_CmdWrite(0x21,0x0000);  
    LCD_Index(0x22);


    for(i=0;i<320;i++)
	{
	      for(j=0;j<240;j++)
		  {
		      ROMCS=0;
			  temp1=*p++;
              temp2=*p++;
			  ROMCS=1;
			  WR_DATA(temp1,temp2);
			  n+=1;
			  if(n==65535)
			  {
			      R1=1;
                  R2=0;
                  R3=0;  
			  }
			  if(n==65535*2)
			  {
			      R1=0;
                  R2=1;
                  R3=0;  
			  }
			  if(n==65535*3)
			  {
			      R1=1;
                  R2=1;
                  R3=0;  
			  }

			  n+=1;
			  if(n==65535)
			  {
			      R1=1;
                  R2=0;
                  R3=0;  
			  }
			  if(n==65535*2)
			  {
			      R1=0;
                  R2=1;
                  R3=0;  
			  }
			  if(n==65535*3)
			  {
			      R1=1;
                  R2=1;
                  R3=0;  
			  }
	       }
     }
} 

//-----------------------------------------------------------------------------

 void main(void)
{   

   unsigned int step=0;
   delay(10); 
   LCD_Reset(); 
   LCD_Initial1();

	for(step=0;step<8;step++)	
	{
		switch(step)
		{
			case 2: Checker(0xffff,0xffff);break;  //all on 
			case 3: Checker(0x0000,0x0000);break;  //all off 
			case 4: Checker(0x07e0,0x07e0);break;  //green
            case 5: Checker(0x001f,0x001f);break;  //red 
			case 6: Checker(0xf800,0xf800);break;  //blue
            case 1: Field(); break;           //Gird
			case 7: WriteBar1(); break;            //bar
			case 0: showpicture1(); break;            //bitbmp
			//case 8: WriteBmp(1); break;                  //
			//case 9: WriteBoundary();// Power_Off();
			step=0; break;//boundary
 	    }
	   delay(100);
   }
}

⌨️ 快捷键说明

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