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

📄 lcd_dis.c

📁 MzT24_Driver_C8051彩屏液晶驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
//      2006/10/16      First version
//========================================================================
void Circle(unsigned int x,unsigned 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;
	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;
	}
	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
	{
		for(uiTemp=top;uiTemp<=bottom;uiTemp++)
		{
			Line_f(left,uiTemp,right);//,uiTemp);
		}
	}
}
//========================================================================
// 函数: 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)
{
	*x = *x;
	*y = *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
}
//========================================================================
// 函数: void W_Line_f(int s_x,int s_y,int e_x,int e_y,int Mode)
// 描述: 以s_x,s_y为起点,e_x,e_y为终点连续填充一条直线上的点.用于画矩形、圆
// 参数: x  X轴坐标     y  Y轴坐标      
// 返回: 无 
// 备注: 以实际的LCD坐标体系为准
// 版本:
//      2006/10/16      First version
//========================================================================
void Line_f(int s_x,int s_y,int e_x)//,int e_y)
{  
	unsigned int uiTemp;
	if(s_x>e_x) 
	{
		uiTemp = s_x;
		s_x = e_x;
		e_x = uiTemp;
	}
	Write_Dot_LCD(s_x++,s_y,BMP_Color);
	for(;s_x<=e_x;s_x++)
		Fill_Dot_LCD(BMP_Color);
}
//========================================================================
// 函数: void ClrScreen(void)
// 描述: 全屏以初始化屏幕色的颜色进行清屏
// 参数: 无      
// 返回: 无 
// 备注: 无
// 版本:
//      2007/01/16      First version
//========================================================================
void ClrScreen(void)
{  
	Set_Dot_Addr_LCD(0,0);
	LCD_Fill(LCD_INITIAL_COLOR);
}

⌨️ 快捷键说明

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