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

📄 glib.c

📁 ARM7(s3c44b0)开发平台LCD驱动程序
💻 C
字号:

/*
;************************************************************************************************************
;*				    				     北京达盛科技有限公司
;*                                     	    研    发    部
;*
;*                                 	    http://www.techsine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------                                      
;*
;* 文件名称 : Glib.c	
;* 文件功能 : 该文件为GUI的图形显示程序API。
;* 补充说明 : 
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM开发小组
;* 修改日期 : 2004/00/00
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : ARM开发小组
;* 创建日期 : 2004/07/07
;* 版本声明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
*************************************************************************************************************
*/

#include <stddef.h>
#include "Glib.h"

U16 LCD_COLOR;
U16 LCD_BKCOLOR;

/*
*************************************************************************************************************
- 函数名称 : void Draw_Point(U16 x, U16 y)
- 函数说明 : 画点函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/        

void Draw_Point(U16 x, U16 y) 
{

    LCD_DrawPixel(x,y);

}

/*
*************************************************************************************************************
- 函数名称 : U32 Get_Point(U16 x, U16 y) 
- 函数说明 : 得到点的颜色函数
- 输入参数 : x,y
- 输出参数 : color
*************************************************************************************************************
*/        

U32 Get_Point(U16 x, U16 y) 
{
	U32 color;
	color = LCD_GetPixel(x,y);
	return color;

}
/*
*************************************************************************************************************
- 函数名称 : void Draw_HLine(U16 y0, U16 x0, U16 x1) 
- 函数说明 : 画水平线函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/ 

void Draw_HLine(U16 y0, U16 x0, U16 x1) 
{
  
  	LCD_DrawHLine(x0, y0, x1);
  
}
/*
*************************************************************************************************************
- 函数名称 : void Draw_VLine(U16 x0, U16 y0, U16 y1)
- 函数说明 : 画竖直线函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/ 

void Draw_VLine(U16 x0, U16 y0, U16 y1) 
{
  
  	LCD_DrawVLine(y0, x0, y1);
  
}

/*
*************************************************************************************************************
- 函数名称 : void Draw_Line (U16 x1,U16 y1,U16 x2,U16 y2)
- 函数说明 : 画线函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/

void Draw_Line (I32 x1,I32 y1,I32 x2,I32 y2)
{
	I32 dx,dy,e;
    dx = x2-x1; 
	dy = y2-y1;
    
	if(dx>=0)  // dx>0
	{
		if(dy >= 0) 			// dy>=0
		{
			if(dx>=dy) 									// 1/8 octant
			{
				e=dy-dx/2;
				while(x1<=x2)
				{
					LCD_DrawPixel(x1,y1);
					if(e>0){y1+=1;e-=dx;}	
					x1+=1;
					e+=dy;
				}
			}
			else										// 2/8 octant
			{
				e=dx-dy/2;
				while(y1<=y2)
				{
					LCD_DrawPixel(x1,y1);
					if(e>0){x1+=1;e-=dy;}	
					y1+=1;
					e+=dx;
				}
			}
		}
		else		   			// dy<0
		{
			dy=-dy;   						// dy=abs(dy)

			if(dx>=dy) 									// 8/8 octant
			{
				e=dy-dx/2;
				while(x1<=x2)
				{
					LCD_DrawPixel(x1,y1);
					if(e>0){y1-=1;e-=dx;}	
					x1+=1;
					e+=dy;
				}
			}
			else										// 7/8 octant
			{
				e=dx-dy/2;
				while(y1>=y2)
				{
					LCD_DrawPixel(x1,y1);
					if(e>0){x1+=1;e-=dy;}	
					y1-=1;
					e+=dx;
				}
			}
		}	
	}
	else 			//dx<0
	{
		dx=-dx;					//dx=abs(dx)
		if(dy >= 0) 			// dy>=0
		{
			if(dx>=dy)							 	// 4/8 octant
			{
				e=dy-dx/2;
				while(x1>=x2)
				{
					LCD_DrawPixel(x1,y1);
					if(e>0){y1+=1;e-=dx;}	
					x1-=1;
					e+=dy;
				}
			}
			else									// 3/8 octant
			{
				e=dx-dy/2;
				while(y1<=y2)
				{
					LCD_DrawPixel(x1,y1);
					if(e>0){x1-=1;e-=dy;}	
					y1+=1;
					e+=dx;
				}
			}
		}
		else		   			// dy<0
		{
			dy=-dy;   								// dy=abs(dy)

			if(dx>=dy) 								// 5/8 octant
			{
				e=dy-dx/2;
				while(x1>=x2)
				{
					LCD_DrawPixel(x1,y1);
					if(e>0){y1-=1;e-=dx;}	
					x1-=1;
					e+=dy;
				}
			}
			else									// 6/8 octant
			{
				e=dx-dy/2;
				while(y1>=y2)
				{
					LCD_DrawPixel(x1,y1);
					if(e>0){x1-=1;e-=dy;}	
					y1-=1;
					e+=dx;
				}
			}
		}	
	}
}
/*
*************************************************************************************************************
- 函数名称 : static  void DrawPoint(U16 x0,U16 y0, U16 xoff, U16 yoff)
- 函数说明 : 画辅助点函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/

static  void _DrawPoint(U32 x0,U32 y0, U32 xoff, U32 yoff) 
{
  	LCD_DrawPixel(x0+xoff,y0+yoff);
  	LCD_DrawPixel(x0-xoff,y0+yoff);
  	LCD_DrawPixel(x0+yoff,y0+xoff);
  	LCD_DrawPixel(x0+yoff,y0-xoff);
  	
  	if (yoff) 
  	{
    	LCD_DrawPixel(x0+xoff,y0-yoff);
    	LCD_DrawPixel(x0-xoff,y0-yoff);
    	LCD_DrawPixel(x0-yoff,y0+xoff);
    	LCD_DrawPixel(x0-yoff,y0-xoff);
  	}
}

/*
*************************************************************************************************************
- 函数名称 : void Draw_Circle(U16 x0, U16 y0, U16 r)
- 函数说明 : 画圆函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/
void Draw_Circle(U32 x0, U32 y0, U32 r) 
{
  	U32 i;
  	U32 imax = ((int)((int)r*707))/1000 + 1;
  	U32 sqmax = (int)r*(int)r + (int)r/2;
  	U16 y = r;
  	
  	_DrawPoint(x0,y0,r,0);
  	
  	for (i=1; i<= imax; i++) 
  	{
    	if ((i*i+y*y) > sqmax) 
    	{
      		_DrawPoint(x0,y0,i,y);
      		y--;
    	}
    	_DrawPoint(x0,y0,i,y);
  	}
}

/*
*************************************************************************************************************
- 函数名称 : void Fill_Circle(U16 x0, U16 y0, U16 r)
- 函数说明 : 填充圆函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/
void Fill_Circle       (U16 x0, U16 y0, U16 r) 
{
  	U32 i;
  	U32 imax = ((int)((int)r*707))/1000+1;
  	U32 sqmax = (int)r*(int)r+(int)r/2;
  	U16 x = r;
  
  	LCD_DrawHLine(x0-r,y0,x0+r);
  
  	for (i=1; i<= imax; i++) 
  	{
    	if ((i*i+x*x) >sqmax) 
    	{
      		if (x>imax) 
      		{
        		LCD_DrawHLine (x0-i+1,y0+x, x0+i-1);
        		LCD_DrawHLine (x0-i+1,y0-x, x0+i-1);
      		}
      		x--;
    	}
       	LCD_DrawHLine(x0-x,y0+i, x0+x);
    	LCD_DrawHLine(x0-x,y0-i, x0+x);
  	}
}

/*
*************************************************************************************************************
- 函数名称 : void Fill_Rect (int x0, int y0, U16 x1, U16 y1)
- 函数说明 : 填充矩形函数
- 输入参数 : x,y
- 输出参数 : 无
*************************************************************************************************************
*/

void Fill_Rect(U16 x0, U16 y0, U16 x1, U16 y1) 
{
  	LCD_FillRect(x0,y0,x1,y1);
}

/*
*************************************************************************************************************
- 函数名称 : Log2Phy(int Color)
- 函数说明 : 逻辑颜色转实际颜色函数
- 输入参数 : color
- 输出参数 : 无
*************************************************************************************************************
*/

U16 Log2Phy(U32 Color) 
{
  	U32 r,g,b;
  	b = Color & 255;
  	g = (Color >> 8 ) & 255;
  	r = Color >> 16;
  	b = (b + 42) / 85;
  	g = (g * 7 + 127) / 255;
  	r = (r * 7 + 127) / 255;
  	return b + (g << 2) + (r << 5);
}
/*
*************************************************************************************************************
- 函数名称 : LCD_Log2Phy(int Color)
- 函数说明 : 逻辑颜色转实际颜色上层函数
- 输入参数 : color
- 输出参数 : 无
*************************************************************************************************************
*/

U16 LCD_Log2Phy(U32 Color) 
{
    U16 PhyColor;
  
  	PhyColor = Log2Phy(Color);
  
  	return PhyColor;
}

/*
*************************************************************************************************************
- 函数名称 : void Set_Color(int color)
- 函数说明 : 设定颜色的上层函数
- 输入参数 : color
- 输出参数 : 无
*************************************************************************************************************
*/

void Set_Color(U32 color) 
{

    LCD_SetColor(LCD_Log2Phy(color));

}

/*
*************************************************************************************************************
- 函数名称 : void Set_Color(int color)
- 函数说明 : 设定颜色函数
- 输入参数 : color
- 输出参数 : 无
*************************************************************************************************************
*/
void LCD_SetColor(U16 PhyColor)   
{ 
	LCD_COLOR = PhyColor; 
}

/*
*************************************************************************************************************
- 函数名称 : void Set_Color(int color)
- 函数说明 : 设定颜色的上层函数
- 输入参数 : color
- 输出参数 : 无
*************************************************************************************************************
*/

void Set_BkColor(U32 color) 
{

    LCD_SetBkColor(LCD_Log2Phy(color));

}

/*
*************************************************************************************************************
- 函数名称 : void Set_Color(int color)
- 函数说明 : 设定颜色函数
- 输入参数 : color
- 输出参数 : 无
*************************************************************************************************************
*/
void LCD_SetBkColor(U16 PhyColor)   
{ 
	LCD_BKCOLOR = PhyColor; 
}
/*
*****************************************************************************************************************
**                                                  结束文件                                                   **
*****************************************************************************************************************
*/
 

⌨️ 快捷键说明

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