📄 lcddrive.c
字号:
** color 表示显示字符的颜色
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void GUI_Disp_Ascii(uint16 x0, uint16 y0, uint8 buffer[], TCOLOR color)
{
int i;
uint32 c,temp_c;
int p = 0;
while(1)
{
c = buffer[p] ;
for(i=0;i<16;i++)
{
temp_c = c >> i;
if(temp_c & 0x01)
{
GUI_Point(x0+7-i, y0+p, color);
}
}
if(p >= 15)break;
p = p + 1;
}
}
/********************************************************************************************************
** Function name: GUI_Disp_Char
** Descriptions: 显示给定的ascii字符
**
** Input: x0,y0 字符显示的起始点(左上角)
* a 希望显示的字符
* color 希望字符显示成什么颜色
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void GUI_Disp_Char(uint16 x0, uint16 y0, char a, TCOLOR color)
{
uint8 i;
uint8 c = a - 32;
for(i = 0; i < 16; i++)
{
temp[i] = ascii_table_8X16[c*16+i];
}
GUI_Disp_Ascii(x0, y0, temp, color);
}
/********************************************************************************************************
** Function name: GUI_DispAscii_string
** Descriptions: 显示给定的ascii字符串
**
** Input: x0,y0 字符显示的起始点(左上角)
* a 希望显示的字符串的首地址
* color 希望字符串显示成什么颜色
** Output: 无
--------------------------------------------------------------------------------------------------------
**注意:本程序不会实现自动换行功能,所以需自行控制显示范围
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispAscii_string(uint16 x0, uint16 y0, char * buf, TCOLOR color)
{
char ex;
ex = *buf;
while(ex != 0)
{
GUI_Disp_Char(x0,y0,ex,color);
x0 += 8;//字体宽度为8个像素
buf++;
ex = *buf;
}
}
/********************************************************************************************************
** Function name: GUI_DispCircle
** Descriptions: 在指定位置显示一个指定大小的园
**
** Input: x,y 圆心的位置
* r 圆的半径大小
* color 希望把圆显示成什么颜色
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispCircle(uint16 x, uint16 y, uint16 r, TCOLOR color)
{
int x0,y0,di,e;
x0 = 0;
y0 = r;
di = 2*(1-r);
while(y0 >= 0)
{
GUI_Point(x+x0,y+y0,color);//1/4象限
GUI_Point(x-x0,y+y0,color);//2/4
GUI_Point(x-x0,y-y0,color);//3/4
GUI_Point(x+x0,y-y0,color);//4/4
if(di<0)
{
e = 2*(di+y0)-1;
if(e<=0)
{
x0++;
di += 2*x0+1;
}
else
{
x0++;
y0--;
di += 2*(x0-y0+1);
}
}
else if(di > 0)
{
e =2*(di-x0)-1;
if(e <= 0)
{
x0++;
y0--;
di += 2*(x0-y0+1);
}
else
{
y0--;
di += (-2*y0+1);
}
}
else
{
x0++;
y0--;
di += 2*(x0-y0+1);
}
}
}
/********************************************************************************************************
** Function name: GUI_DispEllipse
** Descriptions: 在指定位置显示一个指定大小的椭圆
**
** Input: x1,x2 椭圆在坐标系上的最左和最右的x坐标
* y1,y2 椭圆在坐标系上的最上和最下的y坐标
* color 希望把圆显示成什么颜色
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispEllipse(int x1, int y1, int x2, int y2, TCOLOR color)
{
int x0 = (x1+x2)/2;//椭圆圆心坐标(x0,y0)
int y0 = (y1+y2)/2;
int a = (x2-x1)/2;//半长轴和半短轴
int b = (y2-y1)/2;
int x = a+1/2; //初始化(x,y坐标变量)
int y = 0;
int taa = a*a; //定义临时变量,用于计算决策
int t2aa = 2*taa;
int t4aa = 2*t2aa;
int tbb = b*b;
int t2bb = 2*tbb;
int t4bb = 2*t2bb;
int t2abb = a*t2bb;
int t2bbx = t2bb*x;
int tx = x;
int di = t2bbx*(x-1)+tbb/2+t2aa*(1-tbb);
while(t2bb*tx > t2aa*y)
{
GUI_Point(x0+x,y0+y,color);
GUI_Point(x0-x,y0+y,color);
GUI_Point(x0-x,y0-y,color);
GUI_Point(x0+x,y0-y,color);
if(di<0)
{
y += 1;
di += t4aa*y+t2aa;
tx = x - 1;
}
else
{
x -= 1;
y += 1;
di = di -t4bb*x + t4aa*y + t2aa;
tx = x;
}
}
di = t2bb*(x*x+1)-t4bb*x+t2aa*(y*y+y-tbb)+taa/2;
while(x>=0)
{
GUI_Point(x0+x,y0+y,color);
GUI_Point(x0-x,y0+y,color);
GUI_Point(x0-x,y0-y,color);
GUI_Point(x0+x,y0-y,color);
if(di < 0)
{
x -= 1;
y += 1;
di = di + t4aa*y-t4bb*x + t2bb;
}
else
{
x -= 1;
di = di -t4bb*x + t2bb;
}
}
}
/********************************************************************************************************
** Function name: GUI_DispButton
** Descriptions: 在指定位置显示一个指定大小的按钮图标,同时可以显示其有没有被按下去
**
** Input: x1,x2 按钮左上角的坐标(x1,y1)
* y1,y2 按钮右下角的坐标(x2,y2)
* color 按钮边框的颜色值
* frameWidth 为了实现按钮被按下去的效果而加上的边框阴影的宽度
* pressed 按钮有没有被按下,为1表示按下,显示按下的效果
* 为0表示没有按下,显示没有按下的效果
** Output: 无
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispButton(uint16 x1, uint16 y1, uint16 x2, uint16 y2, TCOLOR color, uint16 frameWidth, uint8 pressed)
{
uint16 i = 0;
GUI_Rectangle(x1,y1,x2,y2,color);
if(pressed == 0)
{
for(i=0;i<frameWidth-1;i++)
{
GUI_Line(x1+i+1,y1+i+1,x2-i-1,y1+i+1,WHITE);//上
GUI_Line(x1+i+1,y1+i+1,x1+i+1,y2-i-1,WHITE);//左
GUI_Line(x1+i+2,y2-i-1,x2-i-1,y2-i-1,DGRAY);//下
GUI_Line(x2-i-1,y1+i+1,x2-i-1,y2-i-1,DGRAY);//右
}
}
else
{
for(i=0;i<frameWidth-1;i++)
{
GUI_Line(x1+i+1,y1+i+1,x2-i-1,y1+i+1,DGRAY);//上
GUI_Line(x1+i+1,y1+i+1,x1+i+1,y2-i-1,DGRAY);//左
GUI_Line(x1+i+2,y2-i-1,x2-i-1,y2-i-1,WHITE);//下
GUI_Line(x2-i-1,y1+i+1,x2-i-1,y2-i-1,WHITE);//右
}
}
}
/********************************************************************************************************
** Function name: GUI_DispChinese
** Descriptions: 在指定位置显示一个16*16大小的汉字
**
** Input: x0,y0 汉字的左上角的其实位置坐标
* character 保存该汉字点阵数据的数组
* color 按钮边框的颜色值
** Output: 无
-------------------------------------------------------------------------------------------------------
** 注意:需配合字摸软件来使用该函数
**-------------------------------------------------------------------------------------------------------
** Modified by:Bisu[Shield]
** Modified Date: 2008-11-17
**------------------------------------------------------------------------------------------------------
** 说明: 参考<<ARM Linux入门与实践>> 的8.4.2程序编写,程序作者:阿南
********************************************************************************************************/
void GUI_DispChinese(int x0,int y0,unsigned char character[], TCOLOR color)
{
int i;
uint32 c,temp_c;
int p = 0;
while(1)
{
c = character[p+1] | (character[p]<<8) ;
for(i=0;i<16;i++)
{
temp_c = c >> i;
if(temp_c & 0x01)
{
GUI_Point(x0+15-i,y0+p/2,color);
}
}
if(p >= 30)break;
p = p + 2;
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -