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

📄 ili9325.c

📁 ILI9325的51驱动程序,驱动2.4TFT屏
💻 C
📖 第 1 页 / 共 5 页
字号:
	WriteWord(boutd,numbelImg,0x004C,0x0012,0x0000);

}

void FillIconWindow(long int Xstart,long int Ystart,unsigned int rgb)
{
	unsigned char i,j;

	BlockWrite(Xstart,Xstart+29,Ystart,Ystart+29);

	for(i=0;i<30;i++)			   
		for(j=0;j<30;j++)
		{
			WriteChar(rgb);
		}
}

void WriteIconWindow(long int Xstart,long int Ystart,unsigned char code *p)
{
	unsigned char i,j;	  

	BlockWrite(Xstart,Xstart+29,Ystart,Ystart+29);
	
	CS0=0;
	RS=1;
	RD0=1;
	
	for(i=0;i<30;i++)
	{
		for(j=0;j<30;j++)
		{
			DBH=*p++;  
			DBL=*p++;
			WR0=0;
			WR0=1;
		}
	}
	
	RS=1;
	CS0=1;
} 

unsigned char ConvPosX(unsigned int x)
{
	if(x<=300) x=0;

	if(x>300)
	{
		x=(x-300)/14.58;  //(3800-300)/240=14.58
	}
	if(x>239) x=239;

	return x;
}
unsigned int ConvPosY(unsigned int y)
{

	if(y<=250) y=0;

	if(y>250)
	{
		y=(y-250)/10.78;  //(3700-250)/320=10.78
	}

	if(y>319) y=319;

	return y;
}
void WritePixel(unsigned char x,unsigned int y,unsigned int rgb)
{
	//x: x_start & x_end; y:y_start & y_end;
	unsigned char i;	

	BlockWrite(x,x+3,y,y+3);

	for(i=0;i<16;i++)
	{
		WriteChar(rgb);
	}
	//DispPos(ConvPosX(TP_X),ConvPosY(TP_Y));

}
void DrawLine(unsigned char Xstart,unsigned int Ystart,unsigned char Xend,unsigned int Yend,unsigned int rgb)
{
	unsigned int i;

	if (Xstart==Xend)
	{
		BlockWrite(Xstart,Xstart,Ystart,Yend);

		for(i=Ystart;i<Yend+1;i++)
		{
			WriteChar(rgb);
		}	
	}
	if (Ystart==Yend)
	{
		BlockWrite(Xstart,Xend,Ystart,Ystart);

		for(i=Xstart;i<Xend+1;i++)
		{
			WriteChar(rgb);
		}	
	}

}

void DrawGird(unsigned int rgb)
{
	unsigned int i;

	for(i=15;i<ROW-1;i=i+16)
	{
		DrawLine(0,i,COL-1,i,rgb);
	}
	for(i=15;i<COL-1;i=i+16)
	{
		DrawLine(i,0,i,ROW-1,rgb);
	}							 

}

void StartSPI(void) //SPI开始
{
	DCLK=0;
	TP_CS=1;
	DIN=1;
	DCLK=1;
	TP_CS=0;
}


void WriteCharToTP(unsigned char dat)  
{
	unsigned char i;

	DCLK=0;
	for(i=0;i<8;i++)
	{
		dat<<=1;
		DIN=CY;
		DCLK=0; _nop_();_nop_();_nop_();  
		DCLK=1; _nop_();_nop_();_nop_();
	}
}

unsigned int ReadCharFromTP(void)  
{
	unsigned char i;
	unsigned int dat=0;

	for(i=0;i<12;i++)
	{
		dat<<=1;
		DCLK=1; _nop_();_nop_();_nop_();  
		DCLK=0; _nop_();_nop_();_nop_();
		if(DOUT) dat++;
	}
	return dat;
}


void StartTPTest(void) //外部中断0 用来接受键盘发来的数据
{
   Delay(30); 
   StartSPI(); 
   // while(BUSY); 
   Delay(10);
   WriteCharToTP(0x90); //送控制字 10010000 即用差分方式读X坐标 
   // while(BUSY); 
   Delay(10);
   DCLK=1; _nop_();_nop_();_nop_();_nop_();
   DCLK=0; _nop_();_nop_();_nop_();_nop_();
   TP_Y=ReadCharFromTP();
   WriteCharToTP(0xD0); //送控制字 11010000 即用差分方式读Y坐标 
   DCLK=1; _nop_();_nop_();_nop_();_nop_();
   DCLK=0; _nop_();_nop_();_nop_();_nop_();
   TP_X=ReadCharFromTP();
   TP_CS=1;
}

void EnterSLP(void)
{
	//FOR ILI9325

	WriteComm(0x0007);WriteData(0x0000); 
	
	Delay(50);	
	
	WriteComm(0x0010);WriteData(0x0000);
	WriteComm(0x0011);WriteData(0x0000);
	WriteComm(0x0012);WriteData(0x0000);
	WriteComm(0x0013);WriteData(0x0000);
	
	Delay(100);		
	
	WriteComm(0x0010);WriteData(0x0002);	

}

void ExitSLP(void)
{
	//FOR ILI9325

	WriteComm(0x0010);WriteData(0x0000); 
	WriteComm(0x0011);WriteData(0x0000); 
	WriteComm(0x0012);WriteData(0x0000); 
	WriteComm(0x0013);WriteData(0x0000); 
	
	Delay(50);	
		
	WriteComm(0x0010);WriteData(0x1690); 
	WriteComm(0x0011);WriteData(0x0227); 
	
	Delay(50);
	
	WriteComm(0x0012);WriteData(0x001D);
	WriteComm(0x0013);WriteData(0x0800);
	WriteComm(0x0029);WriteData(0x0014);
	
	Delay(50);
	
	WriteComm(0x0007);WriteData(0x0133); 
}


void InitLCD(void)
{

	//FOR WTK2.8,ILI9325

	WriteComm(0x00E3);WriteData(0x3008); 
	WriteComm(0x00E7);WriteData(0x0012);   
	WriteComm(0x00EF);WriteData(0x1231);  
				
	WriteComm(0x0001);WriteData(0x0100);  
	WriteComm(0x0002);WriteData(0x0700);  
	WriteComm(0x0003);WriteData(0x1030);  	
	WriteComm(0x0004);WriteData(0x0000);  
	WriteComm(0x0008);WriteData(0x0207);  
	WriteComm(0x0009);WriteData(0x0000);  
	WriteComm(0x000A);WriteData(0x0000);  
	WriteComm(0x000C);WriteData(0x0000);  
	WriteComm(0x000D);WriteData(0x0000);  
	WriteComm(0x000F);WriteData(0x0000);  
	
	WriteComm(0x0010);WriteData(0x0000);  
	WriteComm(0x0011);WriteData(0x0007);  
	WriteComm(0x0012);WriteData(0x0000);  
	WriteComm(0x0013);WriteData(0x0000);  
	
	Delay(100);		
	
	WriteComm(0x0010);WriteData(0x1690);  
	WriteComm(0x0011);WriteData(0x0227);  
	WriteComm(0x0012);WriteData(0x001D);  
	WriteComm(0x0013);WriteData(0x0800);  
	WriteComm(0x0029);WriteData(0x0014);  
	Delay(100);		
	
	WriteComm(0x0020);WriteData(0x0000);  
	WriteComm(0x0021);WriteData(0x0000);  
	
	WriteComm(0x0030);WriteData(0x0007);  
	WriteComm(0x0031);WriteData(0x0707);  
	WriteComm(0x0032);WriteData(0x0006);  
	WriteComm(0x0035);WriteData(0x0704);  
	WriteComm(0x0036);WriteData(0x1F04);  
	WriteComm(0x0037);WriteData(0x0004);  
	WriteComm(0x0038);WriteData(0x0000);  
	WriteComm(0x0039);WriteData(0x0706);  
	WriteComm(0x003C);WriteData(0x0701);  
	WriteComm(0x003D);WriteData(0x000F); 
	
	WriteComm(0x0050);WriteData(0x0000);  
	WriteComm(0x0051);WriteData(0x00ef);  
	WriteComm(0x0052);WriteData(0x0000);  
	WriteComm(0x0053);WriteData(0x013f);  
	
	WriteComm(0x0060);WriteData(0xA700);  
	WriteComm(0x0061);WriteData(0x0001);  
	WriteComm(0x006a);WriteData(0x0000);  
	
	WriteComm(0x0080);WriteData(0x0000);  
	WriteComm(0x0081);WriteData(0x0000);  
	WriteComm(0x0082);WriteData(0x0000);  
	WriteComm(0x0083);WriteData(0x0000);  
	WriteComm(0x0084);WriteData(0x0000);  
	WriteComm(0x0085);WriteData(0x0000);  
	
	WriteComm(0x0090);WriteData(0x0010);  
	WriteComm(0x0092);WriteData(0x0000);  
	WriteComm(0x0093);WriteData(0x0003);  
	WriteComm(0x0095);WriteData(0x0110);  
	WriteComm(0x0097);WriteData(0x0000);  
	WriteComm(0x0098);WriteData(0x0000);  

	WriteComm(0x0007);WriteData(0x0133);  

}


void INT0_CTRL(unsigned char i)
{	
	//IE: EX0 1-外部INT0 打开;0-外部INT0 关闭

	PX0 = 0;	    // IP:中断优先级为0
	IT0 = 0;        // TCON:低电平触发
	EX0 = i;        // 1-外部INT0 打开	0-外部INT0 关闭

	//EA  = 1;       // 1-所有中断有效;0-关闭所有中断

}

void INT0_FUN(void) interrupt 0	 // P3.2
{	 

	EX0 = 0; //外部0关闭
	EA=0;	 //所有中断无效
	
	TP_IRQ=1;
	StartTPTest();
 	if(FG_DISP_POS) DispPos(TP_X,TP_Y); 
	
	//tp test point 1
	if(((TP_X>=1700)&&(TP_X<=0x2000))&&((TP_Y>=1700)&&(TP_Y<=0x2000))&&(FG_STEP_1)) 
	{
		FillIconWindow(COL/2-15,ROW/2-15,0xffff); 
		//DrawGird(0x2410);
		WriteIconWindow(COL-30,0,cursorIcon);     
		FG_STEP=FG_STEP<<1;Delay(50);	
	}    

	//tp test point 2
	if(((TP_X>=3300)&&(TP_X<=3800))&&((TP_Y>=100)&&(TP_Y<=600))&&(FG_STEP_2))
	{
		FillIconWindow(COL-30,0,0xffff); 
		//DrawGird(0x2410);
		WriteIconWindow(0,0,cursorIcon); 
		FG_STEP=FG_STEP<<1;Delay(50);
	}

	//tp test point 3
	if(((TP_X>=100)&&(TP_X<=600))&&((TP_Y>=100)&&(TP_Y<=600))&&(FG_STEP_3))	
	{ 
		FillIconWindow(0,0,0xffff);
		//DrawGird(0x2410);
		WriteIconWindow(0,ROW-30,cursorIcon);
		FG_STEP=FG_STEP<<1;Delay(50);
	}

	//tp test point 4
	if(((TP_X>=100)&&(TP_X<=600))&((TP_Y>=3300)&&(TP_Y<=3800))&&(FG_STEP_4))
	{
		FillIconWindow(0,ROW-30,0xffff);
		//DrawGird(0x2410);
		WriteIconWindow(COL-30,ROW-30,cursorIcon);
		FG_STEP=FG_STEP<<1;Delay(50);
	}

	//tp test point 5
	if(((TP_X>=3300)&&(TP_X<=3800))&&((TP_Y>=3300)&&(TP_Y<=3800))&&(FG_STEP_5))
	{
		FillIconWindow(COL-30,ROW-30,0xffff);
		//DrawGird(0x2410);
		WriteIconWindow(COL/2-15,ROW/2-15,goodIcon);
		FG_STEP=0x01;Delay(300);
		FG_STEP=FG_STEP<<1; 
	}

	// draw line test
 	if(FG_STEP_6)
	{
		WritePixel(ConvPosX(TP_X),ConvPosY(TP_Y),0xf800);
		DispPos(ConvPosX(TP_X),ConvPosY(TP_Y));
	}

	BlockWrite(0,COL-1,0,ROW-1);
	
	EX0 = 1; //外部0 打开
	EA=1;	 //所有中断有效

}

void T0_CTRL(unsigned char i)
{	

	TMOD=0x01;    // T0:16位定时器
	PT0 = 1;	  // IP: 中断优先级为1

	TH0=0x00;
	TL0=0x00;

    ET0 = 1;  	  
    TR0 = i;  	 // 1-T0 打开; 0-T0 关闭

	//EA  = 1;     // 1-所有中断有效;0-关闭所有中断

}

void T0_FUN(void) interrupt 1
{
	ET0 = 0; 		 // T0无效
    TR0 = 0; 		 //	T0关断

	KEY2 = 1;
	KEY3 = 1;
	KEY4 = 1;

⌨️ 快捷键说明

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