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

📄 smi_lcd.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrText            |
+--------------------------------------------------------------------+

  PURPOSE : draw text

*/

void scrText (int x, int y, char *txt)
{
    int i, j;

    if (x < 0 || y < 0 || y + 8 > scrY)
        return;

    while (*txt && x + 6 <= scrX)
    {
        for (j = 0; j < 8; j++)
            for (i = 0; i < 6; i++)
                scrPoint(x+i,y+j,char_font[*txt][i]&(1<<j));
        x += 6;
        txt++;
    }
                                        /* LCD_WriteString(y,x,txt);*/
    scrLCDUpdate();                     /* update LCD               */
    scrMobUpdate();                     /* update mobile simulation */
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrLine            |
+--------------------------------------------------------------------+

  PURPOSE : draw line

*/

void scrLine (int x1, int y1, int x2, int y2)
{
    int x, y, dx, dy, c1, c2, err, swap = 0;

    if (x1 < 0 || x1 >= scrX || x2 < 0 || x2 >= scrX ||
        y1 < 0 || y1 >= scrY || y2 < 0 || y2 >= scrY)
        return;

    dx = x2 - x1; dy = y2 - y1;
    if (((dx < 0) ? -dx : dx) < ((dy < 0) ? -dy : dy))
    {
        swap = 1;                       /* take the long way        */
        x = x1; x1 = y1; y1 = x;
        x = x2; x2 = y2; y2 = x;
    }
    if (x1 > x2)
    {
        x = x1; x1 = x2; x2 = x;        /* always move to the right */
        y = y1; y1 = y2; y2 = y;
    }

    dx = x2 - x1; dy = y2 - y1;
    c1 = dy * 2; dy = 1;
    if (c1 < 0)
    {
        c1 = -c1;
        dy = -1;
    }
    err = c1 - dx; c2 = err - dx;
    x = x1; y = y1;
    while (x <= x2)
    {
        scrPoint(swap?y:x,swap?x:y,1);
        x++;
        if (err < 0)
            err += c1;
        else
        {
            y += dy;
            err += c2;
        }
    }

    if (internal)
        return;

    scrLCDUpdate();                     /* update LCD               */
    scrMobUpdate();                     /* update mobile simulation */
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrRect            |
+--------------------------------------------------------------------+

  PURPOSE : draw rectangle

*/

void scrRect (int px, int py, int sx, int sy)
{
    internal = 1;
    scrLine(px,py,px+sx,py);
    scrLine(px,py+sy,px+sx,py+sy);
    scrLine(px,py,px,py+sy);
    internal = 0;
    scrLine(px+sx,py,px+sx,py+sy);
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrFntSelect       |
+--------------------------------------------------------------------+

  PURPOSE : select the current font

*/

int scrFntSelect (int font)
{
    return 1;                           /* always OK                */
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrFntHeight       |
+--------------------------------------------------------------------+

  PURPOSE : get height of current font

*/

int scrFntHeight (void)
{
    return 8;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrFntGetFit       |
+--------------------------------------------------------------------+

  PURPOSE : number of string chars that fit into the line

*/

int scrFntGetFit (char *tp, int lineWidth)
{
    return (lineWidth / 6);
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrFntGetLen       |
+--------------------------------------------------------------------+

  PURPOSE : number of pixel used by first n string chars

*/

int scrFntGetLen(char *tp, int nChars)
{
    return (nChars * 6);
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrBmpDraw         |
+--------------------------------------------------------------------+

  PURPOSE : draw bitmap

*/

int scrBmpDraw (int px, int py, int sx, int sy,
                    int ix, char *bm, int mode)
{
    int i, j;
    unsigned char m;

    if (px < 0 || px >= scrX || py < 0 || py >= scrY
                                       || sx < 0 || sy < 0)
        return 0;
    if (px + sx > scrX)
        sx = scrX - px;
    if (py + sy > scrY)
        sy = scrY - py;

    m = 0x80;
    for (j = 0; j < sy; j++)
    {
        for (i = 0; i < sx; i++)
        {
            scrPoint(px+i,py+j,*bm & m);
            m >>= 1;
            if (!m)
            {
                m = 0x80;
                bm++;
            }
        }
        if (m != 0x80)
        {
            m = 0x80;
            bm++;
        }
    }

    scrLCDUpdate();                     /* update LCD               */
    scrMobUpdate();                     /* update mobile simulation */

    return 0;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrCurType         |
+--------------------------------------------------------------------+

  PURPOSE : set cursor type (0 = no cursor)

*/

void scrCurType (int type)
{
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrCursor          |
+--------------------------------------------------------------------+

  PURPOSE : set cursor at specified position

*/

void scrCursor (int x, int y)
{
    scrLine(x,y+7,x+5,y+7);
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : ti1_scr            |
| STATE   : code                        ROUTINE : scrPoint           |
+--------------------------------------------------------------------+

  PURPOSE : draw point

*/

static void scrPoint (int px, int py, int col)
{
    unsigned char m = 0x80;

    if (px < 0 || py < 0 || px >= scrX || py >= scrY)
        return;

    m >>= px & 7;                       /* mask                     */
    px >>= 3;                           /* x offset                 */
    if (col)
        display[py][px] |= m;
    else
        display[py][px] &= (U8) ~m;
}

⌨️ 快捷键说明

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