📄 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"
void Glib_Line(int x1,int y1,int x2,int y2,int color);
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;*/
#if (Color_Bit == 8)
b = b * 4 / 256;
g = g * 8 / 256;
r = r * 8 / 256;
return b + (g << 2) + (r << 5);
#elif (Color_Bit == 12)
b = b / 16;
g = g / 16;
r = r / 16;
return b + (g << 4) + (r << 8);
#endif
}
/*
*************************************************************************************************************
- 函数名称 : 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 + -