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

📄 glib.c

📁 ARM机的TFT液晶显示例子程序
💻 C
📖 第 1 页 / 共 2 页
字号:

/*
;************************************************************************************************************
;*				    				     北京达盛科技有限公司
;*                                     	    研    发    部
;*
;*                                 	    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"
#include "..\..\lcddrv\inc\lcdlib.h "
//#define     READ_MEM(Off, Data)    Data = LCD_READ_MEM(Off)
//#define     WRITE_MEM(Off, Data)   LCD_WRITE_MEM(Off, Data)
 
#define  SETPIXEL(x, y, c)  SetPixel(x, y, c)
#define  GETPIXEL(x, y)     GetPixelIndex(x, y)
#define 	XY2OFF(x,y) 	(tOff)((tOff)y*(tOff)640 + (x))
//#define 	XY2OFF(x,y) 	(U16)((U16)y*(U16)640*2 + (x))

//#define LCDFRAMEBUFFER1 0x33800000
#define     READ_MEM(Off, Data)    Data = LCD_READ_MEM(Off)
#define     WRITE_MEM(Off, Data)   LCD_WRITE_MEM(Off, Data)
U16 LCD_COLOR;
U16 LCD_BKCOLOR;
//extern  LCDFRAMEBUFFER;
typedef unsigned long 	tOff;

U16 LCD_READ_MEM(U32 off)
{
	return (*((U16*)LCDFRAMEBUFFER + (off)));
}

/*
*************************************************************************************************************
- 函数名称 : void LCD_WRITE_MEM( U32 off,U8 Data)
- 函数说明 : 针对硬件的画点函数
- 输入参数 : x,y,c
- 输出参数 : 无
*************************************************************************************************************
*/	
void LCD_WRITE_MEM( U32 off,U16 Data)
{
	(* ((U16*)LCDFRAMEBUFFER + (off)) ) = Data;
}

/*
*************************************************************************************************************
- 函数名称 : static void SetPixel(U16 x,U16 y,int c)
- 函数说明 : 针对硬件的画点函数
- 输入参数 : x,y,c
- 输出参数 : 无
*************************************************************************************************************
*/
static void SetPixel(U16 x, U16 y, U16 c) 
{tOff Off = XY2OFF(x,y);
    WRITE_MEM(Off, c);
}

/*
*************************************************************************************************************
- 函数名称 : U32 GetPixelIndex(U16 x, U16 y)
- 函数说明 : 针对硬件的得到点的颜色的函数
- 输入参数 : x,y
- 输出参数 : color
*************************************************************************************************************
*/
U32 GetPixelIndex(U16 x, U16 y) 
{
  	U32 col;
  	U16 Data;
  	U16 Off = XY2OFF(x,y);
  	READ_MEM(Off,Data);
    col = Data;
  	return col;
}


/*
*************************************************************************************************************
- 函数名称 : 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);
  	}
}


⌨️ 快捷键说明

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