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

📄 ui_osd.c

📁 其乐达(Cheertek)LCD驱动芯片(CT675)的C51源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "..\INC\SYS_DECLARE.H"
#include "..\INC\SYS_GLOBAL.H"

#include "..\API\INC\API_IIC.H"
#include "..\API\INC\API_REG.H"
#include "..\API\INC\API_OSD.H"

#include "INC\UI_OSD.H"

/****************************************************************************
 * Function     : UI_OSD_Initial()
 ***************************************************************************/
void UI_OSD_Initial(void)
{
    API_OSD_Initial();
    API_OSD_LoadCLUT(OsdCLUT);
    UI_OSD_LoadFont();

    API_SC_WriteByte(REG_SC_GRAPHIC_STA, 0x27);       // GRAPHIC Font START
    API_SC_WriteByte(REG_SC_GRAPHIC_END, 0x3E);       // GRAPHIC FontEND
    API_SC_WriteByte(REG_SC_CLUT_ALPHA, 0x00);        // OSD CLUT Alphablending

    API_OSD_SetPosition(0x06, 0x00);
    API_OSD_Enable(1);
}

/****************************************************************************
 * Function     : UI_OSD_LoadFont()
 ***************************************************************************/
void UI_OSD_LoadFont(void)
{
    BYTE it;
    WORD wOffset;
    BYTE code *pData = OsdFontData;

    for(it = 0, wOffset = 0; it < 0x3F; it++, wOffset += 24)
        API_OSD_LoadFont(it, (pData + wOffset));
}

/****************************************************************************
 * Function     : UI_OSD_DynamicFontDownload()
 ***************************************************************************/
void UI_OSD_DynamicFontDownload(BYTE bFontIdx, BYTE bRamAddr)
{
    BYTE code *pData = OsdFontData + (WORD)bFontIdx * 24;

    API_OSD_LoadFont(bRamAddr, pData);
}

/****************************************************************************
 * Function     : UI_OSD_SetAreaRowAttr()
 ***************************************************************************/
void UI_OSD_SetAreaRowAttr(BYTE bStart, BYTE bEnd, BYTE bAttrMsb, BYTE bAttrLsb)
{
    BYTE it;

    for(it = bStart; it < bEnd; it++)
        API_OSD_SetRowAttr(it, bAttrMsb, bAttrLsb);
    API_OSD_SetRowAttr(it, bAttrMsb, bAttrLsb + 1);
}

/****************************************************************************
 * Function     : UI_OSD_DrawFrame()
 ***************************************************************************/
void UI_OSD_DrawFrame(BYTE VStart, BYTE VEnd, BYTE HStart, BYTE HEnd)
{
    BYTE ix, iy;

    // draw top side
    API_OSD_SetAddress(VStart, HStart);

    API_OSD_WriteChar(_FRAME_TL, OSD_BLACK);
    for(ix = HStart+1; ix < HEnd; ix++)
        API_OSD_WriteChar(_FRAME_TM, OSD_BLACK);
    API_OSD_WriteChar(_FRAME_TR, OSD_BLACK);

    // draw middle side
    for(iy = (VStart + 1); iy < VEnd; iy++)
    {
        API_OSD_SetAddress(iy, HStart);
        API_OSD_WriteChar(_FRAME_ML, OSD_BLACK);

        API_OSD_SetAddress(iy, HEnd);
        API_OSD_WriteChar(_FRAME_MR, OSD_BLACK);
    }

    // draw bottom side
    API_OSD_SetAddress(VEnd, HStart);

    API_OSD_WriteChar(_FRAME_BL, OSD_BLACK);
    for(ix = HStart+1; ix < HEnd; ix++)
        API_OSD_WriteChar(_FRAME_BM, OSD_BLACK);
    API_OSD_WriteChar(_FRAME_BR, OSD_BLACK);
}

/****************************************************************************
 * Function     : UI_OSD_DrawProgressBar()
 ***************************************************************************/
void UI_OSD_DrawProgressBar(BYTE bRow, BYTE bCol, BYTE bVal, BOOL fActualVal)
{
    BYTE bPercentage = (BYTE)(((WORD)bVal * 100) / 255);
    BYTE bScaled     = (BYTE)(((WORD)bPercentage * 3) / 10);
    BYTE bFull       = bScaled / 3;
    BYTE bRemain     = bScaled % 3;
    BYTE it;

    API_OSD_SetAddress(bRow, bCol);

    for(it = 0; it < bFull; it++)
        API_OSD_WriteChar(_BAR12, OSD_BLUE);

    if(bFull != 10)
    {
        if(bRemain == 0)    API_OSD_WriteChar(_MINUS, OSD_BLUE);
        if(bRemain == 1)    API_OSD_WriteChar(_BAR4, OSD_BLUE);
        if(bRemain == 2)    API_OSD_WriteChar(_BAR8, OSD_BLUE);

        for(it = bFull; it < 9; it++)
            API_OSD_WriteChar(_MINUS, OSD_BLUE);
    }

    API_OSD_WriteChar(__, OSD_BLACK);
    API_OSD_WriteChar(__, OSD_BLACK);

    if(fActualVal)  it = bVal;
    else            it = bPercentage;

    UI_OSD_PrintNumber((WORD)it, 0);
}

/****************************************************************************
 * Function     : UI_OSD_DrawBatteryStatus()
 ***************************************************************************/
void UI_OSD_DrawBatteryStatus(BYTE bRow, BYTE bCol, BYTE bVal, BYTE bColor)
{
    BYTE bPercentage = (((WORD)bVal * 3) / 255);
    BYTE bBatteryL;
    BYTE bBatteryR;

    if(bPercentage == 3)
    {
        bBatteryL = _BATTERY_L2;
        bBatteryR = _BATTERY_R2;
    }
    else if(bPercentage == 2)
    {
        bBatteryL = _BATTERY_L2;
        bBatteryR = _BATTERY_R1;
    }
    else if(bPercentage == 1)
    {
        bBatteryL = _BATTERY_L1;
        bBatteryR = _BATTERY_R0;
    }
    else
    {
        bBatteryL = _BATTERY_L0;
        bBatteryR = _BATTERY_R0;
    }

    UI_OSD_DynamicFontDownload(bBatteryL, _DYNAMIC_DOWNLOAD_1);
    UI_OSD_DynamicFontDownload(bBatteryR, _DYNAMIC_DOWNLOAD_2);

    API_OSD_SetAddress(bRow, bCol);
    API_OSD_WriteChar(_DYNAMIC_DOWNLOAD_1, bColor);
    API_OSD_WriteChar(_DYNAMIC_DOWNLOAD_2, bColor);
}

/****************************************************************************
 * Function     : UI_OSD_PrintNumber()
 ***************************************************************************/
void UI_OSD_PrintNumber(WORD wVal, BOOL fHex)
{
    BYTE bFactor = 10;
    WORD wFactor = 100;
    BYTE code *pNumricFont = DecFont;

    if(fHex)
    {
        bFactor = 16;
        wFactor = 256;
        pNumricFont = HexFont;
    }

    if(wVal >= wFactor)
    {
        API_OSD_WriteChar(pNumricFont[wVal / wFactor], OSD_BLACK);
        wVal %= wFactor;
    }
    else
        API_OSD_WriteChar(__, OSD_BLACK);

    API_OSD_WriteChar(pNumricFont[wVal / bFactor], OSD_BLACK);
    API_OSD_WriteChar(pNumricFont[wVal % bFactor], OSD_BLACK);
}

/****************************************************************************
 * Data Table
 ***************************************************************************/
BYTE code DecFont[] = {_0, _1, _2, _3, _4, _5, _6, _7, _8, _9};
BYTE code HexFont[] = {_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _A, _B, _C, _D, _E, _F};
BYTE code LiteralFont[] = {_A, _B, _C, _D, _E, _F, _G, _H, _I, __, __, _L, _M, _N, _O, _P ,__, _R, _S, _T, _U, _V, _X, _Y, _Z};
BYTE code OsdItemWindow[] = {1, 1, 1, 31};

//--------------------------------------------------------------------------
// Color-Look-Up table definition :
// 1.group index
//    R  G  B  I      index
//   -----------------------------
//    0  0  0  0  --  0, BLACK
//    0  0  0  1  --  1, BLACK
//    0  0  1  0  --  2, BLUE
//    0  0  1  1  --  3, BLUE(I)
//    0  1  0  0  --  4, GREEN
//    0  1  0  1  --  5, GREEN(I)
//    0  1  1  0  --  6, CYAN
//    0  1  1  1  --  7, CYAN(I)
//    1  0  0  0  --  8, RED
//    1  0  0  1  --  9, RED(I)
//    1  0  1  0  --  A, MAGENTA
//    1  0  1  1  --  B, MAGENTA(I)
//    1  1  0  0  --  C, YELLOW
//    1  1  0  1  --  D, YELLOW(I)
//    1  1  1  0  --  E, WHITE
//    1  1  1  1  --  F, WHITE(I)
//   ------------------------------
//   2.group position
//         RRRR,RGGG,GGaB,BBBB		'a' means Alpha-blending
//--------------------------------------------------------------------------
BYTE code OsdCLUT[] =
{
   0x00, 0x00,       // R=00 G=00 B=00
   0xF8, 0x1F,       // R=F8 G=00 B=F8
   0x02, 0x10,       // R=00 G=40 B=80
   0xFF, 0xDF,       // R=F8 G=F8 B=F8
   0xC6, 0x18,       // R=C0 G=C0 B=C0
   0xFF, 0xC0,       // R=F8 G=F8 B=00
   0x00, 0x1F,       // R=00 G=00 B=F8
   0x00, 0x00,       // R=00 G=00 B=00
   0xFF, 0xD9+0x20,  // R=F8 G=F8 B=C8
   0xF8, 0x00,       // R=F8 G=00 B=00
   0x84, 0x10,       // R=80 G=80 B=80
   0x42, 0x08,       // R=40 G=40 B=40
   0xE7, 0x1C,       // R=E0 G=E0 B=E0
   0x07, 0xC0,       // R=00 G=F8 B=00
   0x07, 0xDF+0x20,  // R=00 G=F8 B=F8
   0xFF, 0xD9+0x20,  // R=F8 G=F8 B=C8
};

BYTE code OsdFontData[] =
{  /* 24 Bytes in 1 font */
   // Font 000,0x000
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

⌨️ 快捷键说明

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