⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.c

📁 Atmega64单片机程序(完整工程)
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 + -