#include"gui.h"
#include"charcode.h"
//---如果要显示图片就添加这个头文件---//
#ifdef PICTURE_SHOW
#include"picture.h"
#endif
/****************************************************************************
*函数名:uint RGB
*输 入:R,G,B
*输 出:16位2进制颜色码
*功 能:转换为16位颜色码
****************************************************************************/
uint RGB(uchar R,uchar G,uchar B)
{
uint a=0;
R>>=3;
G>>=2;
B>>=3;
a=a|(R<<11)|(G<<5)|B;
return a;
}
/****************************************************************************
*函数名:GUI_Dot
*输 入:x,y, color
*输 出:
*功 能:给单个像素涂上颜色。
****************************************************************************/
void GUI_Dot(uchar x, uint y, uint color)
{
TFT_SetWindow(x, y, x, y); //单个像素
TFT_WriteData(color);
}
/****************************************************************************
*函数名: GUI_Rline
*输入: x,y,length,color
*输出: 无
*功能: 画一条横直线
****************************************************************************/
void GUI_Rline(uchar x,uint y,uchar length,uint color)
{
uchar i;
for(i=0;i<length;i++)
{
GUI_Dot(x,y,color);
x++;
}
}
/****************************************************************************
*函数名: GUI_Hline
*输入: x,y,high,color
*输出: 无
*功能: 画一条竖直线
****************************************************************************/
void GUI_Hline(uchar x,uint y,uint high,uint color)
{
uint i;
for(i=0;i<high;i++)
{
GUI_Dot(x,y,color);
y++;
}
}
/****************************************************************************
//*函数名:GUI_Box
//*输 入: sx, sy, ex, ey, color
//*输 出:
//*功 能:给一个区域涂上颜色。
//****************************************************************************/
void GUI_Box(uchar sx, uint sy, uchar ex, uint ey, uint color)
{
uint temp;
TFT_SetWindow(sx, sy, ex, ey);
sx = ex - sx + 1;
sy = ey - sy + 1;
while (sx--)
{
temp = sy;
while (temp--)
{
TFT_WriteData(color);
}
}
}
/****************************************************************************
*函数名:GUI_Line
*输 入:xStart,yStart,xEnd,yEnd,color
*输 出:
*功 能:画一条直线
****************************************************************************/
void GUI_Line(uchar xStart, uint yStart, uchar xEnd, uint yEnd, uint color)
{
uint t;
int xerr = 0, yerr = 0, delta_x, delta_y, distance;
int incx, incy;
uint row, col;
delta_x = xEnd - xStart;//计算坐标增量
delta_y = yEnd - yStart;
col = xStart;
row = yStart;
if (delta_x > 0)
{
incx=1;//设置单步方向
}
else
{
if (delta_x == 0)
{
incx = 0;//垂直线
}
else
{
incx = -1;
delta_x = -delta_x;
}
}
if (delta_y > 0)
{
incy = 1;
}
else
{
if (delta_y == 0)
{
incy = 0;//水平线
}
else
{
incy = -1;
delta_y = -delta_y;
}
}
if (delta_x > delta_y)
{
distance = delta_x;//选取基本增量坐标轴
}
else
{
distance = delta_y;
}
for (t=0; t<=distance+1; t++)
{ //画线输出
GUI_Dot(col, row, color);
xerr += delta_x;
yerr += delta_y;
if(xerr > distance)
{
xerr -= distance;
col += incx;
}
if(yerr > distance)
{
yerr -= distance;
row += incy;
}
}
}
/****************************************************************************
*函数名:GUI_LineGUI_Sprint_charS(uchar x,uchar y,uint dat,uint wordColor,uint backColor);
*输 入:x,y,dat,wordColor,backColor
*输 出:
*功 能:显示0~255的数字,uchar x设置显示的X坐标,uchar y设置显示Y坐标,
uint dat是显示的数字,uint wordColor字体的颜色,uint backColor背景颜色
****************************************************************************/
void GUI_Sprint_charS(uchar x,uchar y,uint dat,uint wordColor,uint backColor)
{
uchar i[3],j,n,wordNum,wordByte;
uint color;
i[0]=dat/100;
i[1]=dat%100/10;
i[2]=dat%100%10;
for(j=0;j<3;j++)
{
wordNum =i[j]+16;
TFT_SetWindow(x,y,x+7, y+12);
for (wordByte=0; wordByte<13; wordByte++)
{
color = ASCII16x24[wordNum][wordByte];
for (n=0; n<8; n++)
{
if ((color&0x80) == 0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color <<= 1;
}
}
x +=8;
}
}
/****************************************************************************
*函数名:GUI_WriteCnChar
*输 入:x,y,cn,wordColor,backColor
*输 出:
*功 能:写二号楷体汉字
****************************************************************************/
#ifdef CHAR32_SHOW
void GUI_Write32CnChar(uint x, uint y, uchar *cn, uint wordColor, uint backColor)
{
uchar i, j, wordNum;
uint color;
while (*cn != '\0')
{
TFT_SetWindow(x, y, x+31, y+28);
for (wordNum=0; wordNum<20; wordNum++)
{ //wordNum扫描字库的字数
if ((CnChar32x29[wordNum].Index[0]==*cn)
&&(CnChar32x29[wordNum].Index[1]==*(cn+1)))
{
for(i=0; i<116; i++)
{ //MSK的位数
color=CnChar32x29[wordNum].Msk[i];
for(j=0;j<8;j++)
{
if((color&0x80)==0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color<<=1;
}//for(j=0;j<8;j++)结束
}
}
} //for (wordNum=0; wordNum<20; wordNum++)结束
cn += 2;
x += 32;
}
}
#endif
/****************************************************************************
*函数名:GUI_WriteEnChar
*输 入:x,y,en,wordColor,backColor
*输 出:
*功 能:写四号字字母
****************************************************************************/
#ifdef CHAR14_SHOW
void GUI_Write14CnChar(uint x,uint y,uchar *cn,uint wordColor,uint backColor)
{
uchar i, j, wordNum;
uint color;
while (*cn != '\0')
{
TFT_SetWindow(x, y, x+23, y+18);
for (wordNum=0; wordNum<20; wordNum++)
{ //wordNum扫描字库的字数
if ((CnChar19x24[wordNum].Index[0]==*cn)
&&(CnChar19x24[wordNum].Index[1]==*(cn+1)))
{
for(i=0; i<57; i++)
{ //MSK的位数
color=CnChar19x24[wordNum].Msk[i];
for(j=0;j<8;j++)
{
if((color&0x80)==0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color<<=1;
}//for(j=0;j<8;j++)结束
}
}
} //for (wordNum=0; wordNum<20; wordNum++)结束
cn += 2;
x += 24;
}
}
#endif
#ifdef CHAR24_SHOW
void GUI_Write24CnChar(uint x,uint y,uchar *cn,uint wordColor,uint backColor)
{
uchar i, j, wordNum;
uint color;
while (*cn != '\0')
{
TFT_SetWindow(x, y, x+23, y+20);
for (wordNum=0; wordNum<20; wordNum++)
{ //wordNum扫描字库的字数
if ((CnChar21x24[wordNum].Index[0]==*cn)
&&(CnChar21x24[wordNum].Index[1]==*(cn+1)))
{
for(i=0; i<63; i++)
{ //MSK的位数
color=CnChar21x24[wordNum].Msk[i];
for(j=0;j<8;j++)
{
if((color&0x80)==0x80)
{
TFT_WriteData(wordColor);
}
else
{
TFT_WriteData(backColor);
}
color<<=1;
}//for(j=0;j<8;j++)结束
}
}
} //for (wordNum=0; wordNum<20; wordNum++)结束
cn += 2;
x += 24;
}
}
#endif
/****************************************************************************
*函数名:GUI_WriteASCII
*输 入:x,y,en,wordColor,backColor, *p
*输 出:
*功 能:写16X24的ASCII字符
****************************************************************************/
#ifdef USE_ASCII
void GUI_WriteASCII(uchar x, uchar y, uchar *p, uint wordColor, uint backColor)
{
uchar j, wordByte,wordNum;
uint color;
while(*p != '\0