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

📄 tft_api.c

📁 用OV7720制作摄像头的详细电路原理图
💻 C
📖 第 1 页 / 共 4 页
字号:
void TFT_PutPixelLine(WIN_HANDLE Handle, short x, short y, short len, COLOR *ColorTab){	STR_WINDOW *Window = g_WinList + Handle;	short Sx, Sy, Ex;	short LB, RB, TB, BB;	COLOR color;	if((Handle < 0) || (Handle >= MAX_WINDOW) || (Window->Flag == 0))		return;	LB = Window->TLx>=0 ? Window->TLx : 0;					// Left bound	RB = Window->BRx;										// Right bound	TB = Window->TLy>=0 ? Window->TLy : 0;					// Top bound	BB = Window->BRy;										// Bottom bound	Sx = Window->TLx + x;	Sy = Window->TLy + y;	Ex = Window->TLx + x + len;	if((Sy<TB) || (Sy>BB))return;							// 如果线在工作区外则直接退出	if((Sx<LB && Ex<LB) || (Sx>RB && Ex>RB))return;	if(Sx<LB)												// 确定实际绘画区域	{		ColorTab += (LB - Sx);		Sx = LB;	}	if(Ex>RB) Ex = RB;	color = TFT_GetColor(Handle);	while(Sx != Ex)	{		TFT_SetColor(Handle, *ColorTab++);		TFT_PutPixelAbsolute(Handle, Sx, Sy);		Sx++;	}	TFT_SetColor(Handle, color);}//=============================================================//语法格式:	void TFT_Line(STR_WINDOW *Window, short x1, short y1, short x2, short y2);//实现功能:	在工作区中画直线//参数:		Window - 工作窗口指针//				x1 - 起始点的x坐标(相对于工作区)//				y1 - 起始点的y坐标(相对于工作区)//				x2 - 结束点的x坐标(相对于工作区)//				y2 - 结束点的y坐标(相对于工作区)//返回值:		无//=============================================================void TFT_Line(WIN_HANDLE Handle, short x1, short y1, short x2, short y2){	STR_WINDOW *Window = g_WinList + Handle;	short Sx, Sy, Ex, Ey;	short LB, RB, TB, BB;	short Offset_x,Offset_y,Offset_k = 0;	short Err_d = 1;	short W, H;	if((Handle < 0) || (Handle >= MAX_WINDOW) || (Window->Flag == 0))		return;	TFT_GetWorkBufSize(&W, &H);	LB = Window->TLx>=0 ? Window->TLx : 0;					// Left bound	RB = Window->BRx;	// Right bound	TB = Window->TLy>=0 ? Window->TLy : 0;					// Top bound	BB = Window->BRy;	// Bottom bound	Sx = Window->TLx + x1;	Sy = Window->TLy + y1;	Ex = Window->TLx + x2;	Ey = Window->TLy + y2;	if((Sx<LB && Ex<LB) || (Sx>RB && Ex>RB))return;			// 如果线在工作区外则直接退出	if((Sy<TB && Ey<TB) || (Sy>BB && Ey>BB))return;	if(Sx<LB) Sx = LB;										// 确定实际绘画区域	if(Sx>RB) Sx = RB;		if(Sy<TB) Sy = TB;	if(Sy>BB) Sy = BB;	if(Ex<LB) Ex = LB;	if(Ex>RB) Ex = RB;	if(Ey<TB) Ey = TB;	if(Ey>BB) Ey = BB;		if(Sy>Ey)	{		Offset_x = Sx;		Sx = Ex;		Ex = Offset_x;		Offset_y = Sy;		Sy = Ey;		Ey = Offset_y;	}	Offset_x = Ex-Sx;	Offset_y = Ey-Sy;	TFT_PutPixelAbsolute(Handle, Sx, Sy);	if(Offset_x<=0)	{		Offset_x = Sx-Ex;		Err_d = -1;	}	if(Offset_x>Offset_y)	{		while(Sx!=Ex)		{			if(Offset_k>0)			{				Sy += 1;				Offset_k += (Offset_y-Offset_x);			}			else Offset_k += Offset_y; 			Sx += Err_d;			TFT_PutPixelAbsolute(Handle, Sx,Sy);		}		}	else	{		while(Sy!=Ey)		{			if(Offset_k>0)			{				Sx += Err_d;				Offset_k += (Offset_x-Offset_y);			}			else Offset_k += Offset_x;			Sy += 1;			TFT_PutPixelAbsolute(Handle, Sx, Sy);		}	}}//=============================================================//语法格式:	void TFT_Circle(STR_WINDOW *Window, unsigned x,unsigned y,unsigned r,unsigned Mode);//实现功能:	在工作区中画圆//参数:		Window - 工作窗口指针//				x - 圆心的x坐标(相对于工作区)//				y - 圆心的y坐标(相对于工作区)//				r - 圆的半径//				Mode -	0(PAINT_HOLLOW)	空心圆//						1(PAINT_SOLID)	实心圆//返回值:		无//=============================================================void TFT_Circle(WIN_HANDLE Handle, unsigned x,unsigned y,unsigned r,unsigned Mode){	STR_WINDOW *Window = g_WinList + Handle;	int dx,dy,ref;	int Temp;		if((Handle < 0) || (Handle >= MAX_WINDOW) || (Window->Flag == 0))		return;	if(r == 0)return;	dx = r;	dy = 1;	ref = 707 * r / 1000;									// 参考值为0.707r	if(Mode == PAINT_SOLID)									// 实心圆	{		while(dy <= dx)		{			if(dx > ref)				TFT_Line(Handle, x + ref + 1, y + dy, x + dx, y + dy);			if(x >= ref + 1 && dx > ref)			{				if(x < dx)					Temp = 0;				else					Temp = x - dx;				TFT_Line(Handle, Temp, y + dy, x - ref - 1, y + dy);			}						if(y >= dy && dx > ref)				TFT_Line(Handle, x + ref + 1, y - dy, x + dx, y - dy);			if(x >= ref + 1 && y >= dy && dx > ref)			{				if(x < dx)					Temp = 0;				else					Temp = x - dx;				TFT_Line(Handle, Temp, y - dy, x - ref - 1, y - dy);			}			if(dy != dx || dx == ref)			{				if(y < dx)					Temp = 0;				else					Temp = y - dx;				TFT_Line(Handle, x + dy, Temp, x + dy, y + dx);			}			if(x >= dy && (dy != dx || dy == ref))			{				if(y < dx)					Temp = 0;				else					Temp = y - dx;				TFT_Line(Handle, x - dy, Temp, x - dy, y + dx);			}						dy++;			if((r*r-dy*dy)<=(dx-1)*dx)				dx--;		}		TFT_Line(Handle, x + ref + 1, y, x + r, y);		if(x >= ref + 1)		{			if(x < r)				Temp = 0;			else				Temp = x - r;			TFT_Line(Handle, Temp, y, x - ref - 1, y);		}		if(y < r)			Temp = 0;		else			Temp = y - r;		TFT_Line(Handle, x, Temp, x, y + r);	}	else													// 空心圆	{		while(dy <= dx)		{			TFT_PutPixel(Handle, x + dx, y + dy);			TFT_PutPixel(Handle, x - dx, y + dy);			TFT_PutPixel(Handle, x + dx, y - dy);			TFT_PutPixel(Handle, x - dx, y - dy);			if(dx != dy)			{				TFT_PutPixel(Handle, x + dy, y + dx);				TFT_PutPixel(Handle, x + dy, y - dx);				TFT_PutPixel(Handle, x - dy, y + dx);				TFT_PutPixel(Handle, x - dy, y - dx);			}			dy++;			if((r*r-dy*dy)<=(dx-1)*dx)				dx--;		}		TFT_PutPixel(Handle, x + r, y);		TFT_PutPixel(Handle, x - r, y);		TFT_PutPixel(Handle, x, y + r);		TFT_PutPixel(Handle, x, y - r);	}	}//=============================================================//语法格式:	void TFT_Rectangle(STR_WINDOW *Window, unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned Mode);//实现功能:	在工作区中矩形//参数:		Window - 工作窗口指针//				x1 - 矩形的左上角x坐标(相对于工作区)//				y1 - 矩形的左上角y坐标(相对于工作区)//				x2 - 矩形的右下角x坐标(相对于工作区)//				y2 - 矩形的右下角y坐标(相对于工作区)//				Mode -	0(PAINT_HOLLOW)	空心矩形//						1(PAINT_SOLID)	实心矩形//返回值:		无//=============================================================void TFT_Rectangle(WIN_HANDLE Handle, unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned Mode){	STR_WINDOW *Window = g_WinList + Handle;	int i;	short W, H;	if((Handle < 0) || (Handle >= MAX_WINDOW) || (Window->Flag == 0))		return;	TFT_GetWorkBufSize(&W, &H);	if(x1>x2)	{		i = x1;		x1 = x2;		x2 = i;	}	if(x2 > Window->BRx)		x2 = Window->BRx;	if(y1>y2)	{		i = y1;		y1 = y2;		y2 = i;	}	if(y2 > Window->BRy)		y2 = Window->BRy;	if(Mode == PAINT_SOLID)									// 实心矩形	{		for(i=y1; i<=y2; i++)		{			TFT_Line(Handle, x1, i, x2, i);		}	}	else													// 空心矩形	{		for(i = 0; i < Mode; i++)		{			TFT_Line(Handle, x1 + i, y1 + i, x2 - i, y1 - i);			TFT_Line(Handle, x1 + i, y2 + i, x2 - i, y2 - i);			TFT_Line(Handle, x1 + i, y1 + i+1, x1 - i, y2 - i-1);			TFT_Line(Handle, x2 + i, y1 + i+1, x2 - i, y2 - i-1);		}	}}//=============================================================//语法格式:	void TFT_SetTextPos(STR_WINDOW *Window, short x, short y);//实现功能:	设置工作区中的文本显示位置//参数:		Window - 工作窗口指针//				x - 文本的左上角x坐标(相对于工作区)//				y - 文本的左上角y坐标(相对于工作区)//返回值:		无//=============================================================void TFT_SetTextPos(WIN_HANDLE Handle, short x, short y){	STR_WINDOW *Window = g_WinList + Handle;	if((Handle < 0) || (Handle >= MAX_WINDOW) || (Window->Flag == 0))		return;	Window->CurTextX = x;	Window->CurTextY = y;}//=============================================================//语法格式:	void TFT_GetTextPos(STR_WINDOW *Window, short *x, short *y);//实现功能:	获取工作区中即将显示的文本位置//参数:		Window - 工作窗口指针//				x - 文本的左上角x坐标(相对于工作区)//				y - 文本的左上角y坐标(相对于工作区)//返回值:		无//=============================================================void TFT_GetTextPos(WIN_HANDLE Handle, short *x, short *y){	STR_WINDOW *Window = g_WinList + Handle;	if((Handle < 0) || (Handle >= MAX_WINDOW) || (Window->Flag == 0))		return;	*x = Window->CurTextX;	*y = Window->CurTextY;}//=============================================================//语法格式:	void TFT_SetChineseFont(STR_WINDOW *Window, short FontType);//实现功能:	设置当前使用的中文字库//参数:		Window - 工作窗口指针//				FontType - 字库序号(0~n)//返回值:		无//=============================================================void TFT_SetChineseFont(WIN_HANDLE Handle, FONT FontID){	STR_WINDOW *Window = g_WinList + Handle;	if((Handle < 0) || (Handle >= MAX_WINDOW) || (Window->Flag == 0))		return;	Window->ChineseFont = FontID;}

⌨️ 快捷键说明

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