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

📄 tft_c.c

📁 通过C语言编写的控制TFT真彩液晶的驱动程序。
💻 C
字号:
#include "common.h"
#include "zk.h"
#include "tk.h"
#include "lcd.h"

void wlcddata(uint mdata)
{	 
	 while(MCUfifoset==1);
   MCUclk=0;
   MUX0 = 0;
   MUX1 = 0;
   MUX2 = 0;
	 Lpin=mdata;
	 MCUclk=1;
	
	 MUX0 = 1;
	 MCUclk=0;
	 mdata=mdata>>8;
	 Lpin=mdata;
	 MCUclk=1;
}


void wlcdaddr(ulong maddr,bit i)
{ 
	  while(MCUfifoset==1); 
	  MCUfifoclk = 0; 
    if(i==0)
	{
		MUX0 = 0;
    MUX1 = 1;
	  MUX2 = 0;
		MCUclk=0;
		Lpin=maddr;
		maddr=maddr>>8;
		if(maddr&0x00000001==1)
		 Hpin=1;
		else
		 Hpin=0;
		MCUclk=1;

		MUX0=1;
		maddr=maddr>>1;
		MCUclk=0;
		Lpin=maddr;
		Hpin=0;
		MCUclk=1;
  }

	else
	{
		MUX0 = 0;
		MCUclk=0;
    MUX1 = 0;
    MUX2 = 1;
		MCUclk=1;
	}
	MCUfifoclk = 1;
}

void Pset(uint x,uchar y,uchar color,bit layer)
{
	ulong addr;
	uint  mdata;
	
	addr=(ulong)(x+1)*240;
	addr=addr-y-1;
	mdata=color;
	if(layer)
		mdata=mdata<<8;
	
  wlcddata(mdata);
  wlcdaddr(addr,0);
}

void Fill(uint x,uchar y,uint width,uchar height,uchar color,bit layer)
{
	ulong addr;
	uint  mdata,i;
	uchar j;
	
  mdata=color;
	if(layer)
		mdata=mdata<<8;	
	wlcddata(mdata);
				
	for(i=x;i<x+width;i++)
	{ 
		addr=(ulong)(i+1)*240;	
		for(j=y;j<y+height;j++)
		{
			if(j==y)
       {
       	addr=addr-j-1;
			  wlcdaddr(addr,0);
			 }
			 else
			 	wlcdaddr(addr,1);
		}
	}
}

void Line(uint x,uchar y,uint length,uchar dir,uchar color,bit layer)
{
	uint i;
	uint mdata;
	ulong addr;

	if(dir==0)
	{
		for(i=x;i<x+length;i++)
		{
			Pset(i,y,color,layer);
		}
	}
	else if(dir==1)
	{ 
		mdata=color;
  	if(layer)
			mdata=mdata<<8;
		wlcddata(mdata);
	
		addr=(ulong)(x+1)*240;
		for(i=y;i<length+y;i++)
		{
			if(i==y)
       {
       	addr=addr-i-1;
			  wlcdaddr(addr,0);
			 }
			 else
			 	wlcdaddr(addr,1);
		}
	}
}

void BMPDisplay(uint x,uchar y,uint width,uchar height,uchar dir,uchar BMP[],bit layer)
{
	uchar i;
	uint j;
	uint mdata;
	ulong addr;

	for(j=0;j<width;j++)
	{
		addr=(ulong)(x+1+j)*240;
		for(i=0;i<height;i++)
		{
			if(dir==0)
			{
				if(layer)
					mdata=BMP[j*height+i]*256;
				else
					mdata=BMP[j*height+i];
			}
			else
			{
				if(layer)
					mdata=BMP[i*height+j]*256;
				else
					mdata=BMP[i*height+j];
			}
			wlcddata(mdata);
			if(i==0)
       {
       	addr=addr-y-1;
			  wlcdaddr(addr,0);
			 }
			 else
			 	wlcdaddr(addr,1);	
		}
	}
}

void DrawButton(uint x,uchar y,uchar length,uchar PushPull,bit layer)
{
	uchar i;
	
	Line(x,y,length,0,0x70,layer);
	Line(x,y+19,length,0,0x70,layer);
	Line(x,y,20,1,0x70,layer);
	Line(x+length-1,y,20,1,0x70,layer);


	if(PushPull==0)
	{
		BMPDisplay(x+1,y+1,6,18,0,BMPButtonStart,layer);
		for(i=0;i<length-14;i++)
		{
			BMPDisplay(x+7+i,y+1,1,18,0,BMPButtonBody,layer);
		}
		BMPDisplay(x+length-7,y+1,6,18,0,BMPButtonEnd,layer);
	}
	else
	{
		Line(x+1,y+1,length-2,0,0x8d,layer);
		Line(x+1,y+1,18,1,0x8d,layer);
		Line(x+2,y+2,length-4,0,0x91,layer);
		Line(x+2,y+2,16,1,0x91,layer);
		Line(x+length-3,y+2,16,1,0x99,layer);
		Line(x+length-2,y+1,18,1,0x9d,layer);
		Line(x+3,y+17,length-5,0,0x99,layer);
		Line(x+2,y+18,length-3,0,0x9d,layer);
		Fill(x+3,y+3,length-6,14,0x95,layer);
	}
}

void WriteChar(uint x,uchar y,uchar character,uchar color,uchar backcolor,bit layer)
{
	uchar i,k,chardata;
	ulong addr;
	uint  mdata;

	for(i=0;i<6;i++)
	{	
		addr=(ulong)(i+1+x)*240-y-1;	
		chardata=AZK[character-0x20][i*2];
		for(k=0;k<8;k++)
		{
			if((chardata&0x01)==1)
			{
			 mdata=color;
			 if(layer)
			 	mdata=mdata<<8;	
			 wlcddata(mdata);
			 wlcdaddr(addr,0);
			}
			else
			{
				if(backcolor!=0) 
				{
					mdata=backcolor;
					if(layer)
						mdata=mdata<<8;
					wlcddata(mdata);	
					wlcdaddr(addr,0);	
					}
			}
			addr--; 
			chardata>>=1;
		}
		chardata=AZK[character-0x20][i*2+1];
		for(k=0;k<4;k++)
		{
			if((chardata&0x01)==1)
			{
			 mdata=color;
			if(layer)
				mdata=mdata<<8;
			 wlcddata(mdata);
			 wlcdaddr(addr,0);
			}
			else
			{
				if(backcolor!=0) 
				{
					if(layer)
				 		mdata=backcolor*256;
			 		else
					  mdata=backcolor;	
			 		wlcddata(mdata);	
			 		wlcdaddr(addr,0);	
					}
			}
		  addr--;
			chardata>>=1;
		}
	}
	if(backcolor!=0) Line(x+6,y,12,1,backcolor,layer);
	//gNextPoint=x+6;
}

void BigChar(uint x,uchar y,uchar character,uchar color,uchar backcolor,bit layer)
{
	uchar j,i,k,chardata;
	ulong addr;
	uint  mdata;
	
	for(i=0;i<15;i++)
	{
		addr=(ulong)(i+1+x)*240-y-1;	
		for(j=0;j<3;j++)
		{
			chardata=BZK[character][i*3+j];
			for(k=0;k<8;k++)
			{
				if((chardata&0x01)==1)
				{
				 if(layer)
				 	mdata=color*256;
			 	 else
				 	mdata=color;	
			   wlcddata(mdata);
			   wlcdaddr(addr,0);
				}
				else
				{
					if(backcolor!=0)
					{
						if(layer)
				 			mdata=backcolor*256;
			 			else
						  mdata=backcolor;	
			 			wlcddata(mdata);	
			 			wlcdaddr(addr,0);	
					}				
					else
						wlcddata(0);
				}
			  addr--;
				chardata>>=1;
			}
		}
	}
//	if(backcolor!=0) Line(x+6,y,12,1,backcolor,layer);
//	gNextPoint=x+15;
}

void WritebigChar(uint x,uchar y,uchar character,uchar color,uchar backcolor,bit layer)
{
	uchar i,k,chardata;
	ulong addr;
	uint  mdata;

	for(i=0;i<12;i++)
	{	
		addr=(ulong)(i+1+x)*240-y-1;
		chardata=AZK[character-0x20][(i/2)*2];
		for(k=0;k<16;k++)
		{
			if((chardata&0x01)==1)
			{
			 mdata=color;
			 if(layer)
			 	mdata=mdata<<8;	
			 wlcddata(mdata);
			 wlcdaddr(addr,0);
			}
			else
			{
				if(backcolor!=0) 
				{
					mdata=backcolor;
					if(layer)
						mdata=mdata<<8;
					wlcddata(mdata);	
					wlcdaddr(addr,0);	
					}
			}
			addr--; 
			if(k%2)
				chardata>>=1;
		}
		chardata=AZK[character-0x20][(i/2)*2+1];
		for(k=0;k<8;k++)
		{
			if((chardata&0x01)==1)
			{
			 mdata=color;
			if(layer)
				mdata=mdata<<8;
			 wlcddata(mdata);
			 wlcdaddr(addr,0);
			}
			else
			{
				if(backcolor!=0) 
				{
					if(layer)
				 		mdata=backcolor*256;
			 		else
					  mdata=backcolor;	
			 		wlcddata(mdata);	
			 		wlcdaddr(addr,0);	
					}
			}
		  addr--;
			if(k%2)
				chardata>>=1;
		}
	}
	if(backcolor!=0) Line(x+12,y,24,1,backcolor,layer);
}

void WriteHZ(uint x,uchar y,uchar character,uchar color,uchar backcolor,bit layer)
{
	uchar k,i,chardata;
	ulong addr;
	uint  mdata;
	
	for(i=0;i<12;i++)
	{
		addr=(ulong)(i+1+x)*240-y-1;
		chardata=HZK[character][i*2];
		for(k=0;k<8;k++)
		{
			if((chardata&0x01)==1)
			{
				mdata=color;
				if(layer)
					mdata=mdata<<8;
			  wlcddata(mdata);
			  wlcdaddr(addr,0);
			}
			else
			{
				if(backcolor!=0) 
				{
					if(layer)
				 		mdata=backcolor*256;
			 		else
					  mdata=backcolor;	
			 		wlcddata(mdata);
			 		wlcdaddr(addr,0);
			 	}
			}
			addr--; 
			chardata>>=1;
		}
		chardata=HZK[character][i*2+1];
		for(k=0;k<4;k++)
		{
			if((chardata&0x01)==1)
			{
				 mdata=color;
				 if(layer)
					 mdata=mdata<<8;
			   wlcddata(mdata);
			   wlcdaddr(addr,0);
			}
			else
			{
				if(backcolor!=0)
				{
					if(layer)
				 		mdata=backcolor*256;
			 		else
					  mdata=backcolor;	
			 		wlcddata(mdata);
			 		wlcdaddr(addr,0);
			 	}	 	 
			}
			addr--;
			chardata>>=1;
		}
	}
	if(backcolor!=0) Line(x+12,y,12,1,backcolor,layer);
	//gNextPoint=x+12;
}


void WritebigHZ(uint x,uchar y,uchar character,uchar color,uchar backcolor,bit layer)
{
	uchar k,i,chardata;
	ulong addr;
	uint  mdata;
	
	for(i=0;i<24;i++)
	{
		addr=(ulong)(i+1+x)*240-y-1;
		chardata=HZK[character][(i/2)*2];
		for(k=0;k<16;k++)
		{
			if((chardata&0x01)==1)
			{
				mdata=color;
				if(layer)
					mdata=mdata<<8;
			  wlcddata(mdata);
			  wlcdaddr(addr,0);
			}
			else
			{
				if(backcolor!=0) 
				{
					if(layer)
				 		mdata=backcolor*256;
			 		else
					  mdata=backcolor;	
			 		wlcddata(mdata);
			 		wlcdaddr(addr,0);
			 	}
			}
			addr--; 
			if(k%2)
				chardata>>=1;
		}
		chardata=HZK[character][(i/2)*2+1];
		for(k=0;k<8;k++)
		{
			if((chardata&0x01)==1)
			{
				 mdata=color;
				 if(layer)
		 			mdata=mdata<<8;	
			   wlcddata(mdata);
			   wlcdaddr(addr,0);
			}
			else
			{
				if(backcolor!=0)
				{
					if(layer)
				 		mdata=backcolor*256;
			 		else
					  mdata=backcolor;	
			 		wlcddata(mdata);
			 		wlcdaddr(addr,0);
			 	}	 	 
			}
			addr--;
			if(k%2)
				chardata>>=1;
		}
	}
	if(backcolor!=0) Line(x+24,y,24,1,backcolor,layer);
}

void StrDisplayHZ(uint x,uchar y,uchar str[],uchar strlen,uchar color,uchar backcolor,bit layer)
{
	uchar i;
	for(i=0;i<strlen;i++)
	{
		WriteHZ(x+i*13,y,str[i],color,backcolor,layer);
	}
}

void StrDisplaybigHZ(uint x,uchar y,uchar str[],uchar strlen,uchar color,uchar backcolor,bit layer)
{
	uchar i;
	for(i=0;i<strlen;i++)
	{
		WritebigHZ(x+i*26,y,str[i],color,backcolor,layer);
	}
}

void StrDisplayASC(uint x,uchar y,uchar str[],uchar strlen,uchar color,uchar backcolor,bit layer)
{
	uchar i;
	for(i=0;i<strlen;i++)
	{
		WriteChar(x+i*7,y,str[i],color,backcolor,layer);
	}
}

void StrDisplaybigASC(uint x,uchar y,uchar str[],uchar strlen,uchar color,uchar backcolor,bit layer)
{
	uchar i;
	for(i=0;i<strlen;i++)
	{
		WritebigChar(x+i*13,y,str[i],color,backcolor,layer);
	}
}

void sanjiao(uint x,uchar y,uchar color,bit layer)
{
	ulong addr;
	uint  mdata,i;
	uchar j,s=19,t=0;
	
	mdata=color;
	if(layer)
		mdata=mdata<<8;
	wlcddata(mdata);
				
	for(i=x;i<x+17;i++)
	{ 
		if(i%2)
			{
				s=s-2;
				t++;
			}
		addr=(ulong)(i+1)*240;	
		for(j=y;j<y+s;j++)
		{
			if(j==y)
       {
       	addr=addr-y-1-t;
			  wlcdaddr(addr,0);
			 }
			 else
			 	wlcdaddr(addr,1);
		}
	}
}

void CharDisplay(uint x,uchar y,uchar num,uchar color,uchar backcolor,uchar layer)
{
	uchar i;
	i=(uchar)(num/100);
	WriteChar(x,y,i+0x30,color,backcolor,layer);
	num-=i*100;
	i=(uchar)(num/10);
	WriteChar(x+6,y,i+0x30,color,backcolor,layer);
	num-=i*10;
	WriteChar(x+12,y,num+0x30,color,backcolor,layer);
}

⌨️ 快捷键说明

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