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

📄 lcddrive.c

📁 tft真彩屏的显示
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
* 名称:GUI_ClearSCR()
* 功能:清屏。
* 入口参数:无
* 出口参数:无
* 说明:用户根据LCM的实际情况编写此函数。
****************************************************************************/
void  GUI_ClearSCR(void)
{
	TFT_FillSCR(GUI_CCOLOR);
}


/****************************************************************************
* 名称:GUI_Point()
* 功能:在指定位置上画点。
* 入口参数:x		指定点所在列的位置
*           y		指定点所在行的位置
*           color	显示颜色
* 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
****************************************************************************/
uint8  GUI_Point(uint16 x, uint16 y, TCOLOR color)
{  /* 参数过滤 */
   if(x>=GUI_LCM_XMAX) return(0);
   if(y>=GUI_LCM_YMAX) return(0);

   /* 刷新显示 */
   TftSetWrite(x, y);
   TftSendDat(color);

   return(1);
}


/****************************************************************************
* 名称:GUI_ReadPoint()
* 功能:读取指定位置点的颜色数据。
* 入口参数:x		指定点所在列的位置
*           y		指定点所在行的位置
* 出口参数:返回值即是读出值(RRRRRGGGGGGBBBBB)。
****************************************************************************/
uint8  GUI_ReadPoint(uint16 x, uint16 y, TCOLOR *ret)
{
	uint16  dat;
   uint16  bak;

   /* 参数过滤 */
   if(x>=GUI_LCM_XMAX) return(0);
   if(y>=GUI_LCM_YMAX) return(0);

   /* 读取数据 */
   TftSetAddr(x, y);		// 设置地址
   TftSendCom(WR_RD_DATA);
   bak = TftRcvDat();
   bak = TftRcvDat();

   dat = (bak>>11);			// B色
   dat |= (bak<<11);		// R色
   dat |= (bak&0x07E0);		// G色
   *ret = dat;

   return(1);
}


/****************************************************************************
* 名称:GUI_HLine()
* 功能:画水平线。
* 入口参数:x0		水平线起点所在列的位置
*           y0		水平线起点所在行的位置
*           x1      水平线终点所在列的位置
*           color	显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void  GUI_HLine(uint16 x0, uint16 y0, uint16 x1, TCOLOR color)
{  uint16  bak;

   if(x0>x1) 						// 对x0、x1大小进行排列,以便画图
   {  bak = x1;
      x1 = x0;
      x0 = bak;
   }

   GUI_Point(x0, y0, color);		// 显示第一点
   x0++;
   while(x1>=x0)
   {  TftSendDat(color);			// 不断填充并显示
      x0++;
   }
}


/****************************************************************************
* 名称:GUI_RLine()
* 功能:画垂直线。
* 入口参数: x0		垂直线起点所在列的位置
*           y0		垂直线起点所在行的位置
*           y1      垂直线终点所在行的位置
*           color	显示颜色
* 出口参数:无
* 说明:操作失败原因是指定地址超出缓冲区范围。
****************************************************************************/
void  GUI_RLine(uint16 x0, uint16 y0, uint16 y1, TCOLOR color)
{  uint16  bak;

   if(y0>y1) 						// 对y0、y1大小进行排列,以便画图
   {  bak = y1;
      y1 = y0;
      y0 = bak;
   }

   while(y1>=y0)
   {  GUI_Point(x0, y0, color);		// 逐点显示,描出垂直线
      y0++;
   }
}

void Line(unsigned int x1,unsigned char y1,unsigned int x2,unsigned char y2,uint8 color)
//画线,起点:(x1,y1);终点:(x2-1,y2-1)
{
	register unsigned int x;
	register unsigned char y;
	register int Delta,DeltaX,DeltaY;
	Delta = 0;

	DeltaX = x2 - x1;
	DeltaY = y2 - y1;
	x = x1;
	y = y1;

	if(y1 < y2)
	{
		if(DeltaX >= 0)
		{
			if(DeltaY <= DeltaX)
			{
				do
				{
					GUI_Point(x, y, color);
					DelaymS(DLAYTIME);
					if(Delta > 0)
					{
						x++;
						y++;
						Delta += DeltaY - DeltaX;
					}
					else
					{
						x++;
						Delta += DeltaY;
					}
				}while(x <= x2);
			}
			else
			{
				do
				{
					GUI_Point(x, y,color);
					DelaymS(DLAYTIME);
					if(Delta < 0)
					{
						x++;
						y++;
						Delta += DeltaY-DeltaX;
					}
					else
					{
						y++;
						Delta -= DeltaX;
					}
				}while(y<y2);
			}
		}
		else
		{
			DeltaX =- DeltaX;
			if(DeltaY <= DeltaX)
			{
				do
				{
					GUI_Point(x, y,color);
					DelaymS(DLAYTIME);
					if(Delta <= 0)
					{
						x--;
						Delta += DeltaY;
					}
					else
					{
						x--;
						y++;
						Delta += DeltaY - DeltaX;
					}
				}while(x > x2);
			}
			else
			{
				do
				{
					GUI_Point(x, y, color);
					DelaymS(DLAYTIME);
					if(Delta < 0)
					{
						x--;
						y++;
						Delta += DeltaY - DeltaX;
					}
					else
					{
						y++;
						Delta -= DeltaX;
					}
				}while(y <= y2);
			}
		}
	}
	else
	{
		DeltaY = -DeltaY;
		if(DeltaX >= 0)
		{
			if(DeltaY <= DeltaX)
			{
				do
				{
					GUI_Point(x, y, color);
					DelaymS(DLAYTIME);
					if(Delta > 0)
					{
						x++;
						y--;
						Delta += DeltaY - DeltaX;
					}
					else
					{
						x++;
						Delta += DeltaY;
					}
				}while(x <= x2);
			}
			else
			{
				do
				{
					GUI_Point(x, y,color);
					DelaymS(DLAYTIME);
					if(Delta < 0)
					{
						x++;
						y--;
						Delta += DeltaY-DeltaX;
					}
					else
					{
						y--;
						Delta -= DeltaX;
					}
				}while(y > y2);
			}
		}
		else
		{
			DeltaX =- DeltaX;
			if(DeltaY <= DeltaX)
			{
				do
				{
					GUI_Point(x, y,color);
					DelaymS(DLAYTIME);
					if(Delta <= 0)
					{
						x--;
						Delta += DeltaY;
					}
					else
					{
						x--;
						y--;
						Delta += DeltaY - DeltaX;
					}
				}while(x > x2);
			}
			else
			{
				do
				{
					GUI_Point(x, y, color);
					DelaymS(DLAYTIME);
					if(Delta < 0)
					{
						x--;
						y--;
						Delta += DeltaY - DeltaX;
					}
					else
					{
						y--;
						Delta -= DeltaX;
					}
				}while(y >= y2);
			}
		}
	}
}












⌨️ 快捷键说明

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