📄 smi_lcd.c
字号:
+--------------------------------------------------------------------+
| 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 + -