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

📄 k90ti_lcd.c

📁 本代码包为本人的一篇文章<一个占用内存极少的菜单系统的实现>在在PC上的测试移植代码。 ------------------------------ Menu_Src目录为Menu的源
💻 C
📖 第 1 页 / 共 3 页
字号:
    INT16U Disp_y = Y;
    if(GUIEnFont == En_5x8){
        for(i = 0; i < 7; i++){
            ImgData = chardot_5x8[i+(AscciiChar-0x20)*8];
            Display_Locate(ImgData, X, Disp_y);
            Disp_y++;
        }
        ImgData = 0xFF;//下划线
        Display_Locate(ImgData, X, Disp_y);
    } else {
        for(i = 0; i < 15; i++){
            ImgData = chardot_8x16[i+(AscciiChar-0x20)*16];
            Display_Locate(ImgData, X, Disp_y);
            Disp_y++;
        }
        ImgData = 0xFF;//下划线
        Display_Locate(ImgData, X, Disp_y);

   }

}


/*
----------------------------------------------------------------------------------------------
//移动当前Y坐标
----------------------------------------------------------------------------------------------
*/
void GUI_GotoY(INT16U y)
{
    if (y > LCD_YSIZE) {
        PosY = LCD_YSIZE-1;
    } else {
        PosY = y;
    }
}
/*
----------------------------------------------------------------------------------------------
//移动当前Y坐标
----------------------------------------------------------------------------------------------
*/
void GUI_GotoX(INT16U x)
{
    if (x > LCD_X_BYTE_SIZE) {
        PosX = LCD_X_BYTE_SIZE;
    } else {
        PosX = x;
    }
}
/*
*****************************************************************************
* GUI_GotoXY - 系统光标移动到指定位置
* DESCRIPTION: -
*
* @Param y:Y轴坐标
* @Param x:X轴坐标
* @Return :
* ----
*****************************************************************************
*/
void GUI_GotoXY(INT16U x,INT16U y)
{
    GUI_GotoX(x);
    GUI_GotoY(y);
}
//设置背景颜色
void GUI_SetBkColor(GUI_COLOR Color)
{
    BkColor = Color;
}
//设置前景颜色
void GUI_SetColor(GUI_COLOR Color)
{
    FgColor = Color;
}


/*
*****************************************************************************
* GUI_SetTextMode - 设置文字显示模式
* DESCRIPTION: -
*
* @Param TextMode:模式代码
* @Return :模式代码
* ----
*****************************************************************************
*/

INT8U GUI_SetTextMode(INT8U TextMode)
{
    GUITextMode = TextMode;
    return GUITextMode;
}

/*
*****************************************************************************
* GUI_SetEnFont - 设置显示的英文字体
* DESCRIPTION: -
* 目前支持两种字体8x16 5x8
* @Param EnFont:字体代码
* @Return :
* ----
*****************************************************************************
*/
void GUI_SetEnFont(INT8U EnFont)
{
  if (EnFont == En_5x8){
    GUIEnFont = En_5x8;
    Char_XSIZE = En_5x8_XSIZE;
    Char_YSIZE = En_5x8_YSIZE;
  } else {
    GUIEnFont = En_8x16;
    Char_XSIZE = En_8x16_XSIZE;
    Char_YSIZE = En_8x16_YSIZE;
  }
}
void GUI_SetFontZoom(INT8U ZoomMode)
{
    GUIZoomMode = ZoomMode;

    if(GUIZoomMode == GUI_TEXTMODE_ZOOMx1){
        if (GUIEnFont == En_5x8){
            Char_XSIZE = En_5x8_XSIZE;
            Char_YSIZE = En_5x8_YSIZE;
        } else if (GUIEnFont == En_8x16){
            Char_XSIZE = En_8x16_XSIZE;
            Char_YSIZE = En_8x16_YSIZE;
        }
        Chinese_XSIZE = _Chinese_XSIZE_;
        Chinese_YSIZE = _Chinese_YSIZE_;
    }else{
        if (GUIEnFont == En_5x8){
            Char_XSIZE = 2*En_5x8_XSIZE;
            Char_YSIZE = 2*En_5x8_YSIZE;
        } else if (GUIEnFont == En_8x16){
            Char_XSIZE = 2*En_8x16_XSIZE;
            Char_YSIZE = 2*En_8x16_YSIZE;
        }
        Chinese_XSIZE = 2*_Chinese_XSIZE_;
        Chinese_YSIZE = 2*_Chinese_YSIZE_;

    }
}
/*
*****************************************************************************
* GUI_DispCharAt - 指定位置显示一个ASCII码
* DESCRIPTION: - 字体使用是系统设定的字体
*
* @Param x:X轴坐标
* @Param y:Y轴坐标
* @Param c:ASCII码
* @Return :
* ----
*****************************************************************************
*/
void GUI_DispCharAt(INT8U AscciiChar, INT16U x, INT16U y)
{
    switch (GUITextMode) {
        case GUI_TEXTMODE_NORMAL :
             Display_ASCII(AscciiChar, x, y);
             break;
        case GUI_TEXTMODE_REVERSE :
             Display_InvASCII(AscciiChar, x, y);
             break;
        case GUI_TEXTMODE_UNDERLINE :
             Display_ASCII_UnderLine(AscciiChar, x, y);
             break;
        default :
             break;
    }
}
/*
----------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------
*/
#if 1
void GUI_DispChar(INT16U AscciiChar)
{
    GUI_DispCharAt(AscciiChar, PosX, PosY);
    PosX += 1;
}
#endif

/*
*****************************************************************************
* Display_Chinese - 指定位置显示一个16x16的汉字
* DESCRIPTION: -
*
* @Param x0:X轴坐标0--(192-16)
* @Param y0:Y轴坐标0--(8-2)
* @Param UniCode:汉字内码
* @Return :
* ----
*****************************************************************************
*/
void Display_Chinese(INT16U UniCode, INT16U x0, INT16U y0)
{
  INT16U CodeID;
  INT8U i, ImgData;
  INT16U Disp_y = y0;
  // 在字库里搜索汉字
    for(CodeID=0; CodeID < hzNum; CodeID++){
        // 找到 指定汉字的 Index 后, 跳出循环
        if ( (hzIndex[2*CodeID] == UniCode/256) && (hzIndex[2*CodeID+1] == UniCode%256) ){
            break;
        }else if(CodeID == (hzNum-1)){//未检索到的汉字,显示个"##"提示吧
            GUI_DispCharAt('#',x0,y0);
            GUI_DispCharAt('#',x0+Char_XSIZE,y0);
            return;
        }
    }
//----------------------------------
    switch (GUITextMode) {
        case GUI_TEXTMODE_NORMAL :
//-------------------------------------------------------------------------
            for(i = 0; i < 16; i++){
                ImgData = hzdot[i*2+CodeID*32];
                Display_Locate(ImgData, x0, Disp_y);//左边
                ImgData = hzdot[i*2+1+CodeID*32];
                Display_Locate(ImgData, x0+Chinese_XSIZE/2, Disp_y);//右边
                if(GUIZoomMode == GUI_TEXTMODE_ZOOMx1){
                        Disp_y ++;
                }else{
                        Disp_y += 2;
                }
            }
//-------------------------------------------------------------------------
             break;
        case GUI_TEXTMODE_REVERSE :
//-------------------------------------------------------------------------
            for(i = 0; i < 16; i++){
                ImgData = hzdot[i*2+CodeID*32] ^0xFF;
                Display_Locate(ImgData, x0, Disp_y);//左边
                ImgData = hzdot[i*2+1+CodeID*32] ^ 0xFF;
                Display_Locate(ImgData, x0+1, Disp_y);//右边
                Disp_y++;
            }
//-------------------------------------------------------------------------
             break;
        case GUI_TEXTMODE_UNDERLINE :
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
            for(i = 0; i < 15; i++){
                ImgData = hzdot[i*2+CodeID*32];
                Display_Locate(ImgData, x0, Disp_y);//左边
                ImgData = hzdot[i*2+1+CodeID*32];
                Display_Locate(ImgData, x0+1, Disp_y);//右边
                Disp_y++;
            }
//-------------------------------------------------------------------------
            ImgData = 0xFF;
            Display_Locate(ImgData, x0, Disp_y);
            ImgData = 0xFF;
            Display_Locate(ImgData, x0+1, Disp_y);

//-------------------------------------------------------------------------
             break;
        default :
             break;
    }
}
#if 1
void GUI_DispCEOL(void)
{
    INT16U i;
    for(i = PosX; i <= LCD_X_BYTE_SIZE-1; i += 1) {
        GUI_DispCharAt(' ', i, PosY);
    }
}
#endif
/*
*****************************************************************************
* GUI_DispStringAt - 指定位置显示一个字符串
* DESCRIPTION: -
* 支持中英混合 当中英混合时英文字体强制为8x16 如果单单英文 按照设定字体
* @Param x0:X轴坐标
* @Param y0:Y轴坐标
* @Param s:字符串
* @Return :
* ----
*****************************************************************************
*/
//void GUI_DispStringAt(U8 _CONST_ *s,U8 x0,U8 y0)
void GUI_DispStringAt(INT8U _CONST_ *Str,INT16U x0,INT16U y0)
{
    INT8U i;
    if (NoXY == FALSE){//没有提供坐标,则使用系统坐标
        x0 = PosX;
        y0 = PosY;
    }
    i = 0;
//    if(GUI_TEXTMODE_ZOOMx2 ==GUIZoomMode){
//        x0 = x0/2;
//        y0 = y0/2;
//    }
    while(Str[i]!='\0'){
        if (Str[i] < 0x80) {//是ASCII
             if(Str[i] == '\n'){
                    x0 = 0;
                    y0 += Char_YSIZE;
             } else {
                if (x0 > (LCD_X_BYTE_SIZE-1)) {//换行
                    x0 = 0;
                    y0 += Char_YSIZE;
                }
                switch (GUITextMode) {
                    case GUI_TEXTMODE_NORMAL :
                         Display_ASCII(Str[i], x0, y0);
                         break;
                    case GUI_TEXTMODE_REVERSE :
                         Display_InvASCII(Str[i], x0, y0);
                         break;
                    case GUI_TEXTMODE_UNDERLINE :
                         Display_ASCII_UnderLine(Str[i], x0, y0);
                         break;
                    default :
                         break;
                }
                x0 += Char_XSIZE;
             }
        } else {//是中文
            if (x0 > LCD_X_BYTE_SIZE-1){
                x0 = 0;
                y0 += Chinese_YSIZE;
            }
            Display_Chinese(Str[i]*256+Str[i+1],x0,y0);//中文
            i++;
            x0 += Chinese_XSIZE;
       }
       Str++;
    }
    if (NoXY == FALSE){
        PosX = x0;
        PosY = y0;
    }

}
#if 0
/*
*****************************************************************************
* GUI_DispString - 在当前系统坐标下显示字符串
* DESCRIPTION: -
* 除了坐标不能指定外 功能跟GUI_DispStringAt一致
* @Param s:字符串
* @Return :
* ----
*****************************************************************************
*/
void GUI_DispString(INT8U _CONST_ *Str)
{
    NoXY = FALSE;
    GUI_DispStringAt(Str,PosX,PosY);
    NoXY = TRUE;
}

void GUI_DispStringLen(INT8U _CONST_ *Str, INT16U Len)
{
    INT8U i;
    i = 0;
    while(Str[i]!='\0'){
        if (i >= Len ){
            return;
        }
        if (Str[i] < 0x80) {//是ASCII
             if(Str[i] == '\n'){
//                    PosX = 0;
//                    PosY += 2;
             } else {
               if (PosX > (LCD_X_BYTE_SIZE-1)) {//换行
                    PosX = 0;
//                    PosY += 2;
                }
                switch (GUITextMode) {
                    case GUI_TEXTMODE_NORMAL :
                         Display_ASCII(Str[i], PosX, PosY);
                         break;
                    case GUI_TEXTMODE_REVERSE :
                         Display_InvASCII(Str[i], PosX, PosY);
                         break;
                    case GUI_TEXTMODE_UNDERLINE :
                         Display_ASCII_UnderLine(Str[i], PosX, PosY);
                         break;
                    default :
                         break;
                }
                PosX += 1;
             }
        } else {//是中文
            if (PosX > LCD_X_BYTE_SIZE-1){
                PosX = 0;
                PosY += Chinese_YSIZE;
            }
            Display_Chinese(Str[i]*256+Str[i+1],PosX,PosY);//中文
            i++;
            PosX += Chinese_XSIZE;
       }
       i++;
    }

}
/*
void GUI_DrawCursor(INT16U x, INT16U y)
{
    if(GUITextMode == GUI_TEXTMODE_NORMAL){
        Display_Locate(0xFF,x,y);
        Display_Locate(0xFF,x,y+1);
    } else if (GUITextMode == GUI_TEXTMODE_REVERSE){
        Display_Locate(0x00,x,y);
        Display_Locate(0x00,x,y+1);
    } else {
        Display_Locate(0xFF,x,y);
        Display_Locate(0xFF,x,y+1);
    }
}

void GUI_CursorOn(U8 x, U8 y)
{
    Display_Locate(0xFF,x,y);
    Display_Locate(0xFF,x,y+1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -