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

📄 lcd_dis.c

📁 44b0+s6b0724包括系统初始化
💻 C
📖 第 1 页 / 共 2 页
字号:
       PutPixel(x+a,y+b);
       PutPixel(x-a,y+b);
       PutPixel(x+a,y-b);
       PutPixel(x-a,y-b);
    }
}
//========================================================================
// 函数: void W_Red_Err(int *a,int *b,int *r)
// 描述: 画圆误差计算
// 参数: 
// 返回: 无
// 备注: 该函数对用户不可见
// 版本:
//      2006/10/16      First version
//========================================================================
void W_Red_Err(int *a,int *b,int *r)
{
	int R_Error;
	unsigned int uiTemp;
	R_Error = (*a+1)*(*a+1);
	uiTemp = (*b)*(*b);
	R_Error += uiTemp;
	uiTemp = (*r)*(*r);
	R_Error -= uiTemp;
	if(R_Error>=0)
	{
		R_Error = R_Error-*b;
		if(R_Error>=0) *b = *b-1;
	}
	*a = *a+1;
}
//========================================================================
// 函数: void Circle(int x,int y,int r,int mode)
// 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
// 参数: 
// 返回: 无
// 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
// 版本:
//      2006/10/16      First version
//========================================================================
void Circle(int x,int y,int r,int mode)
{
	int arx1=0,ary1,arx2,ary2=0;
//	Pos_Switch(&x,&y);						//坐标变换
//	x += 4;
	ary1=r;
	arx2=r;
	while(1)
	{
        W_Red_Dot(x,y,arx1,ary1,mode);
        W_Red_Err(&arx1,&ary1,&r);
		if(arx1 == arx2)
		{
			W_Red_Dot(x,y,arx1,ary1,mode);
			break; 
		}
		W_Red_Dot(x,y,arx2,ary2,mode);
		W_Red_Err(&ary2,&arx2,&r);
		if(arx1 == arx2) 
		{
			W_Red_Dot(x,y,arx2,ary2,mode);
			break;
		}
	}
}
//========================================================================
// 函数: void Rectangle(unsigned left, unsigned top, unsigned right, 
//		 			 unsigned bottom, unsigned Mode)
// 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
// 参数: left - 矩形的左上角横坐标,范围0到118
//		 top - 矩形的左上角纵坐标,范围0到50
//		 right - 矩形的右下角横坐标,范围1到119
//		 bottom - 矩形的右下角纵坐标,范围1到51
//		 Mode - 绘制模式,可以是下列数值之一:
//				0:	矩形框(空心矩形)
//				1:	矩形面(实心矩形)
// 返回: 无
// 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
// 版本:
//      2005/05/21      First version
//========================================================================
void Rectangle(unsigned left, unsigned top, unsigned right, unsigned bottom, unsigned Mode)
{
	unsigned uiTemp;
	
	if(Mode==0)
	{
		Line(left,top,left,bottom);
		Line(left,top,right,top);
		Line(right,bottom,left+1,bottom);
		Line(right,bottom,right,top+1);
	}
	else
	{
//		Pos_Switch(&left,&top);						// 坐标变换
//		Pos_Switch(&right,&bottom);					//坐标变换
		if(left>right)
		{
			uiTemp = left;
			left = right;
			right = uiTemp;
		}
		if(top>bottom)
		{
			uiTemp = top;
			top = bottom;
			bottom = uiTemp;
		}
		for(uiTemp=top;uiTemp<=bottom;uiTemp++)
		{
			Line(left,uiTemp,right,uiTemp);
		}
	}
}
//========================================================================
// 函数: void ClrScreen(unsigned int Mode)
// 描述: 清屏函数,执行全屏幕清除或填充前景色
// 参数: Mode   0:全屏除屏
//				1:全屏填充前景色
// 返回: 无
// 备注: 
// 版本:
//      2007/01/11      First version
//========================================================================
void ClrScreen(unsigned int Mode)
{
	if(Mode==0)
		LCD_Fill(LCD_INITIAL_COLOR);
	else
		LCD_Fill(BMP_Color);
}
/*
//========================================================================
// 函数: void Writ_Dot(int x,int y,unsigned int Color)
// 描述: 填充以x,y为坐标的象素
// 参数: x  X轴坐标     y  Y轴坐标      Color  像素颜色 
// 返回: 无
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
void Writ_Dot(int x,int y,unsigned int Color)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Write_Dot_LCD(x,y,Color);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Write_Dot_LCD(LCD_X_MAX - x,y,Color);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Write_Dot_LCD(x,LCD_Y_MAX - y,Color);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Write_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y,Color);
	#endif
#endif
#if	LCD_XY_Switch == 1
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Write_Dot_LCD(y,x,Color);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Write_Dot_LCD(y,LCD_Y_MAX - x,Color);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Write_Dot_LCD(LCD_X_MAX - y,x,Color);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Write_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x,Color);
	#endif
#endif	
}*/
/*
//========================================================================
// 函数: unsigned int Get_Dot(int x,int y)
// 描述: 获取x,y为坐标的象素
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: Color  像素颜色 
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
unsigned int Get_Dot(int x,int y)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		return Get_Dot_LCD(x,y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		return Get_Dot_LCD(LCD_X_MAX - x,y);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		return Get_Dot_LCD(x,LCD_Y_MAX - y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		return Get_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
	#endif
#endif
#if	LCD_XY_Switch == 1
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		return Get_Dot_LCD(y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		return Get_Dot_LCD(y,LCD_Y_MAX - x);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		return Get_Dot_LCD(LCD_X_MAX - y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		return Get_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
	#endif
#endif	
}

//========================================================================
// 函数: void Clear_Dot(int x,int y)
// 描述: 清除以x,y为坐标的象素
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: 无 
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
void Clear_Dot(int x,int y)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Clear_Dot_LCD(x,y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Clear_Dot_LCD(LCD_X_MAX - x,y);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Clear_Dot_LCD(x,LCD_Y_MAX - y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Clear_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
	#endif
#endif
#if	LCD_XY_Switch == 1
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Clear_Dot_LCD(y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Clear_Dot_LCD(y,LCD_Y_MAX - x);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Clear_Dot_LCD(LCD_X_MAX - y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Clear_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
	#endif
#endif	
}
//========================================================================
// 函数: void Set_Dot_Addr(int x,int y)
// 描述: 设置当前需要操作的象素地址
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: 无 
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
void Set_Dot_Addr(int x,int y)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Set_Dot_Addr_LCD(x,y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Set_Dot_Addr_LCD(LCD_X_MAX - x,y);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Set_Dot_Addr_LCD(x,LCD_Y_MAX - y);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Set_Dot_Addr_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
	#endif
#endif
#if	LCD_XY_Switch == 1
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		Set_Dot_Addr_LCD(y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		Set_Dot_Addr_LCD(y,LCD_Y_MAX - x);
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		Set_Dot_Addr_LCD(LCD_X_MAX - y,x);
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		Set_Dot_Addr_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
	#endif
#endif		
}*/
/*
//========================================================================
// 函数: void Pos_Switch(unsigned int * x,unsigned int * y)
// 描述: 将画面的坐标变换为实际LCD的坐标体系,以便于快速画圆形以及矩形
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: 无 
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
//		 本函数提供可进行坐标变换的接口
// 版本:
//      2006/10/15      First version
//========================================================================
void Pos_Switch(unsigned int * x,unsigned int * y)
{
#if	LCD_XY_Switch == 0
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		*x = LCD_X_MAX-*x;
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		*y = LCD_Y_MAX-*y;
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		*x = LCD_X_MAX-*x;
		*y = LCD_Y_MAX-*y;
	#endif
#endif
#if	LCD_XY_Switch == 1
	unsigned int uiTemp;
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
		uiTemp = *x;
		*x = y;
		*y = uiTemp;
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
		uiTemp = LCD_Y_MAX-*x;
		*x = *y;
		*y = uiTemp;
	#endif
	#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
		uiTemp = *x;
		*x = LCD_X_MAX-*y;
		*y = uiTemp;
	#endif
	#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
		uiTemp = LCD_Y_MAX - *x;
		*x = LCD_X_MAX-*y;
		*y = uiTemp;
	#endif
#endif
}
*/

⌨️ 快捷键说明

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