📄 glib.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"
#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 + -