📄 gui.c
字号:
XLen = ENCount*6 + CNCount*12;
if (XLen >=LCD_XSIZE)
{//我们只能显示一行
XLen =LCD_XSIZE-1;
}
//识别对其方式属性
switch (Mode)//Mode&0x30
{//只有这两个Bit是这个属性
case GUI_TA_LEFT: //左对齐
XLen = 0;
break;
case GUI_TA_HCENTER: //居中
XLen = ((x1-x0)-XLen)/2;
break;
case GUI_TA_RIGHT: //右对齐
XLen = (x1-x0)-XLen;
break;
default:
break;
}
//--------------------------------------
//得到喀什显示的起点坐标
X = x0+XLen;
Y = y0;
//---------------------
{
x0 = X;
if (GUITextMode == GUI_TEXTMODE_REVERSE)
{
for(i = 0; i <x0; i++)
{
LCD_Display_Locate(0xFF, i,y0);
LCD_Display_Locate(0xFF, i,y0+6);
}
}
else
{
for(i = 0; i <x0; i++)
{
LCD_Display_Locate(0x00, i,y0);
LCD_Display_Locate(0x00, i,y0+6);
}
}
}
//-----------------------
i = 0;
while(s[i]!='\0')
{
if (s[i] < 0x80)
{//是ASCII
switch (GUITextMode)
{
case GUI_TEXTMODE_NORMAL :
GUI_Display_ASCII(s[i], X, Y);
break;
case GUI_TEXTMODE_REVERSE :
GUI_Display_InvASCII(s[i], X, Y);
break;
case GUI_TEXTMODE_UNDERLINE :
GUI_Display_ASCII_UnderLine(s[i], X, Y);
break;
default :
break;
}
X +=En_6x12_XSIZE;
}
else
{//是中文
GUI_Display_Chinese((INT16U)(s[i])*256+s[i+1],X,Y);//中文
i++;
X +=Chinese_XSIZE;
}
i++;
}
{
x0 = X;
if (GUITextMode == GUI_TEXTMODE_REVERSE)
{
for(i = 0; i <x1-x0; i++)
{
LCD_Display_Locate(0xFF, x0+i,y0);
LCD_Display_Locate(0xFF, x0+i,y0+6);
}
}
else
{
for(i = 0; i <x1-x0; i++)
{
LCD_Display_Locate(0x00, x0+i,y0);
LCD_Display_Locate(0x00, x0+i,y0+6);
}
}
//GUI_SetEnFont(En_6x12);
return;
}
}
#endif
//-------------显示普通图片
//------(图像 长度 起始位置)
void GUI_Display_Image(INT8U _CONST_ *IMG)
{
INT8U XAddr;
INT8U YAddr;
INT16U Count;
Count = 0;
for(YAddr=0;YAddr<LCD_YSIZE;YAddr+=8)
{
for(XAddr=0;XAddr<LCD_XSIZE;XAddr++)
{
LCD_Display_Locate(IMG[Count++],XAddr,YAddr);
}
}
}
/*
*****************************************************************************
* GUI_DrawIcon - 制定位置显示一个32x32的图标
* DESCRIPTION: -
*
* @Param x0:X轴坐标
* @Param y0:Y轴坐标 注意边界!
* @Param Ico:图标数据
* @Return :
* ----
*****************************************************************************
*/
void GUI_DrawIcon(INT8U const *Ico,INT8U x0,INT8U y0)
{
INT8U i;
INT16U Count;
Count = 0;
if( y0 > (LCD_YSIZE-32) )
{//边界保护
y0 = LCD_YSIZE-32;
}
if( x0 > (LCD_XSIZE-32) )
{
x0 = LCD_XSIZE-32;
}
for(i=0;i<32;i++)
{//第一行
LCD_Display_Locate(Ico[Count++],x0+i,y0);
}
for(i=0;i<32;i++)
{//第二行
LCD_Display_Locate(Ico[Count++],x0+i,y0+8);
}
for(i=0;i<32;i++)
{//第三行
LCD_Display_Locate(Ico[Count++],x0+i,y0+16);
}
for(i=0;i<32;i++)
{//第四行
LCD_Display_Locate(Ico[Count++],x0+i,y0+24);
}
}
/*
*****************************************************************************
* HBar - 显示一个水平的进度条
* DESCRIPTION: -
* 附加有百分比显示
* @Param x0:进度条起点X轴坐标 0-->127
* @Param x1:进度条结束点X坐标 0-->127 必须大于x0 百分比显示于该坐标之后
* @Param y:进度条Y轴坐标 0--7
* @Param percent:当前百分值 0-->100
* @Return :
*
*****************************************************************************
*/
void HBar(INT8U y, INT8U x0, INT8U x1, INT8U percent)
{
INT8U U8Temp;
INT8U i;
INT16U Center;
Center = (x1-x0);
Center *= percent;
Center /= 100;
U8Temp = (INT8U)Center;
LCD_Display_Locate(0xFF, x0, y);
LCD_Display_Locate(0xFF, x1, y);
for(i = 1; i < U8Temp; i++)
{
LCD_Display_Locate(0xBD, x0+i, y);
}
for(i = x0+U8Temp+1; i < x1; i++)
{
LCD_Display_Locate(0x81, i, y);
}
}
/* x1 +3
|-------------------|
| ||
| |||
| ||||
| ||||
--------------------
-------------------
------------------
x0--->x1+3
y0--->y1
*/
#if TipDisp_EN
void TipDisp( INT8U x0, INT8U y0, INT8U x1, INT8U y1)
{
INT8U i;
for(i = 0; i < x1-x0+4; i++)
{
LCD_Display_Locate(0x01, x0+i, y0);
LCD_Display_Locate(0x0F, x0+i, y1);
}
LCD_Display_Locate(0x01, x0+0, y1);
LCD_Display_Locate(0x01, x0+1, y1);
LCD_Display_Locate(0x03, x0+2, y1);
LCD_Display_Locate(0x03, x0+3, y1);
LCD_Display_Locate(0x07, x0+4, y1);
LCD_Display_Locate(0x07, x0+5, y1);
for(i = 0; i < y1-y0; i++)
{
LCD_Display_Locate(0xFF, x0, y0+i);
LCD_Display_Locate(0xFF, x1, y0+i);
LCD_Display_Locate(0xFF, x1+1, y0+i);
LCD_Display_Locate(0xFF, x1+2, y0+i);
LCD_Display_Locate(0xFF, x1+3, y0+i);
}
LCD_Display_Locate(0xFC, x1+1, y0);
LCD_Display_Locate(0xF0, x1+2, y0);
LCD_Display_Locate(0xC0, x1+3, y0);
}
#endif
#if TipClr_EN
/*清空Tip坐标应该跟TipDisp一样*/
void TipClr( INT8U x0, INT8U y0, INT8U x1, INT8U y1)
{
INT8U i;
INT8U j;
for(i=0; i<=x1+3-x0; i++)
{
for(j=0; j<=y1-y0; j++)
{
LCD_Display_Locate(0x00, x0+i, y0+j);
}
}
}
#endif
#if GUI_CircleX_EN==1
/****************************************************************************
* 名 称:GUI_Circle()
* 功 能:指定圆心位置及半径,画圆。
* 入口参数:x0 圆心的x坐标值
* y0 圆心的y坐标值
* r 圆的半径
* color 显示颜色
* 出口参数:无
* 说 明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
void GUI_Circle(INT32U x0,INT32U y0,INT32U r,INT8U color)
{
// 刽图点坐标变量
INT32S draw_x0,draw_y0 ;
INT32S draw_x1,draw_y1 ;
INT32S draw_x2,draw_y2 ;
INT32S draw_x3,draw_y3 ;
INT32S draw_x4,draw_y4 ;
INT32S draw_x5,draw_y5 ;
INT32S draw_x6,draw_y6 ;
INT32S draw_x7,draw_y7 ;
INT32S xx,yy ;// 画圆控制变量
INT32S di ;// 决策变量
/* 参数过滤 */
if(r==0)
return ;
/* 计算出8个特殊点(0、45、90、135、180、225、270度),进行显示 */
draw_x0=draw_x1=x0 ;
draw_y0=draw_y1=y0+r ;
if(draw_y0<LCD_YSIZE)// 90度
LCD_DrawPoint(draw_x0,draw_y0,color);
draw_x2=draw_x3=x0 ;
draw_y2=draw_y3=y0-r ;
if(draw_y2>=0)// 270度
LCD_DrawPoint(draw_x2,draw_y2,color);
draw_x4=draw_x6=x0+r ;
draw_y4=draw_y6=y0 ;
if(draw_x4<LCD_XSIZE)// 0度
LCD_DrawPoint(draw_x4,draw_y4,color);
draw_x5=draw_x7=x0-r ;
draw_y5=draw_y7=y0 ;
if(draw_x5>=0)// 180度
LCD_DrawPoint(draw_x5,draw_y5,color);
if(r==1)
return ;// 若半径为1,则已圆画完
/* 使用Bresenham法进行画圆 */
di=3-2*r ;
// 初始化决策变量
xx=0 ;
yy=r ;
while(xx<yy)
{
if(di<0)
{
di+=4*xx+6 ;
}
else
{
di+=4*(xx-yy)+10 ;
yy--;
draw_y0--;
draw_y1--;
draw_y2++;
draw_y3++;
draw_x4--;
draw_x5++;
draw_x6--;
draw_x7++;
}
xx++;
draw_x0++;
draw_x1--;
draw_x2++;
draw_x3--;
draw_y4++;
draw_y5++;
draw_y6--;
draw_y7--;
/* 要判断当前点是否在有效范围内 */
if((draw_x0<=LCD_XSIZE)&&(draw_y0>=0))
{
LCD_DrawPoint(draw_x0,draw_y0,color);
}
if((draw_x1>=0)&&(draw_y1>=0))
{
LCD_DrawPoint(draw_x1,draw_y1,color);
}
if((draw_x2<=LCD_XSIZE)&&(draw_y2<=LCD_YSIZE))
{
LCD_DrawPoint(draw_x2,draw_y2,color);
}
if((draw_x3>=0)&&(draw_y3<=LCD_YSIZE))
{
LCD_DrawPoint(draw_x3,draw_y3,color);
}
if((draw_x4<=LCD_XSIZE)&&(draw_y4>=0))
{
LCD_DrawPoint(draw_x4,draw_y4,color);
}
if((draw_x5>=0)&&(draw_y5>=0))
{
LCD_DrawPoint(draw_x5,draw_y5,color);
}
if((draw_x6<=LCD_XSIZE)&&(draw_y6<=LCD_YSIZE))
{
LCD_DrawPoint(draw_x6,draw_y6,color);
}
if((draw_x7>=0)&&(draw_y7<=LCD_YSIZE))
{
LCD_DrawPoint(draw_x7,draw_y7,color);
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -