?? glib.c
字號:
/*
;************************************************************************************************************
;* 北京達盛科技有限公司
;* 研 發(fā) 部
;*
;* http://www.techsine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------
;*
;* 文件名稱 : Glib.c
;* 文件功能 : 該文件為GUI的圖形顯示程序API。
;* 補充說明 :
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM開發(fā)小組
;* 修改日期 : 2004/00/00
;* 版本聲明 : V1.0.1
;*-------------------------------------------- 歷史版本信息 -------------------------------------------------
;* 文件作者 : ARM開發(fā)小組
;* 創(chuàng)建日期 : 2004/07/07
;* 版本聲明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
*************************************************************************************************************
*/
#include <stddef.h>
#include "Glib.h"
U16 LCD_COLOR;
U16 LCD_BKCOLOR;
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Draw_Point(U16 x, U16 y)
- 函數(shù)說明 : 畫點函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Draw_Point(U16 x, U16 y)
{
LCD_DrawPixel(x,y);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : U32 Get_Point(U16 x, U16 y)
- 函數(shù)說明 : 得到點的顏色函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : color
*************************************************************************************************************
*/
U32 Get_Point(U16 x, U16 y)
{
U32 color;
color = LCD_GetPixel(x,y);
return color;
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Draw_HLine(U16 y0, U16 x0, U16 x1)
- 函數(shù)說明 : 畫水平線函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Draw_HLine(U16 y0, U16 x0, U16 x1)
{
LCD_DrawHLine(x0, y0, x1);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Draw_VLine(U16 x0, U16 y0, U16 y1)
- 函數(shù)說明 : 畫豎直線函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Draw_VLine(U16 x0, U16 y0, U16 y1)
{
LCD_DrawVLine(y0, x0, y1);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Draw_Line (U16 x1,U16 y1,U16 x2,U16 y2)
- 函數(shù)說明 : 畫線函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
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;
}
}
}
}
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : static void DrawPoint(U16 x0,U16 y0, U16 xoff, U16 yoff)
- 函數(shù)說明 : 畫輔助點函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
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);
}
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Draw_Circle(U16 x0, U16 y0, U16 r)
- 函數(shù)說明 : 畫圓函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
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);
}
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Fill_Circle(U16 x0, U16 y0, U16 r)
- 函數(shù)說明 : 填充圓函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
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);
}
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Fill_Rect (int x0, int y0, U16 x1, U16 y1)
- 函數(shù)說明 : 填充矩形函數(shù)
- 輸入?yún)?shù) : x,y
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Fill_Rect(U16 x0, U16 y0, U16 x1, U16 y1)
{
LCD_FillRect(x0,y0,x1,y1);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : Log2Phy(int Color)
- 函數(shù)說明 : 邏輯顏色轉(zhuǎn)實際顏色函數(shù)
- 輸入?yún)?shù) : color
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
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);
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : LCD_Log2Phy(int Color)
- 函數(shù)說明 : 邏輯顏色轉(zhuǎn)實際顏色上層函數(shù)
- 輸入?yún)?shù) : color
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
U16 LCD_Log2Phy(U32 Color)
{
U16 PhyColor;
PhyColor = Log2Phy(Color);
return PhyColor;
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Set_Color(int color)
- 函數(shù)說明 : 設(shè)定顏色的上層函數(shù)
- 輸入?yún)?shù) : color
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Set_Color(U32 color)
{
LCD_SetColor(LCD_Log2Phy(color));
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Set_Color(int color)
- 函數(shù)說明 : 設(shè)定顏色函數(shù)
- 輸入?yún)?shù) : color
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void LCD_SetColor(U16 PhyColor)
{
LCD_COLOR = PhyColor;
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Set_Color(int color)
- 函數(shù)說明 : 設(shè)定顏色的上層函數(shù)
- 輸入?yún)?shù) : color
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void Set_BkColor(U32 color)
{
LCD_SetBkColor(LCD_Log2Phy(color));
}
/*
*************************************************************************************************************
- 函數(shù)名稱 : void Set_Color(int color)
- 函數(shù)說明 : 設(shè)定顏色函數(shù)
- 輸入?yún)?shù) : color
- 輸出參數(shù) : 無
*************************************************************************************************************
*/
void LCD_SetBkColor(U16 PhyColor)
{
LCD_BKCOLOR = PhyColor;
}
/*
*****************************************************************************************************************
** 結(jié)束文件 **
*****************************************************************************************************************
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -