📄 tslcd_elt240320tp_v1_31.c
字号:
TSLCDOutIns(TS_INS_GRAM_ADY);
TSLCDOutDat(sy);//fix from bug of v1_00
y = sy - ey + 1;
#else
TSLCDOutIns(TS_INS_START_ADY);
TSLCDOutDat(sy);
TSLCDOutIns(TS_INS_END_ADY);
TSLCDOutDat(ey);
TSLCDOutIns(TS_INS_GRAM_ADY);
TSLCDOutDat(sy);
y = ey - sy + 1;
#endif
TSLCDOutIns(TS_INS_RW_GRAM);
if (mode == TS_MODE_FULL)
{
for (j=0; j<y; j++)
for (i=0; i<x; i++)
{
TSLCDOutDat(code(pic[k]));
k++;
}
}
else
if (mode == TS_MODE_NORMAL)
{
for (j=0; j<y; j++)
for (i=0; i<x; i++)
{
if (code(pic[k]) == TS_COL_WHITE)
{
color = TSLCDInDat(); // ignore invalid data
color = TSLCDInDat();
TSLCDOutDat(color);
}
else
{
TSLCDOutDat(code(pic[k]));
}
k++;
}
}
}
void TSLCDFillRect(ts_pos_t sx,ts_pos_t ex,ts_pos_t sy,ts_pos_t ey,unsigned short color,ts_mode_t mode) //draw a rectangular
{
unsigned int x,y;
unsigned int i,j;
if (sx < ts_margin_xl)
sx = ts_margin_xl;
if (ex > ts_margin_xr)
ex = ts_margin_xr;
if (sy < ts_margin_yu)
sy = ts_margin_yu;
if (ey > ts_margin_yl)
ey = ts_margin_yl;
TSLCDOutIns(TS_INS_START_ADX);
TSLCDOutDat(sx);
TSLCDOutIns(TS_INS_END_ADX);
TSLCDOutDat(ex);
TSLCDOutIns(TS_INS_GRAM_ADX);
TSLCDOutDat(sx);
x = ex - sx + 1;
#ifndef TS_ORN_PORTRAIT
sy = TS_SIZE_Y - 1 - sy; // mirror start y address
ey = TS_SIZE_Y - 1 - ey; // mirror end y address
TSLCDOutIns(TS_INS_START_ADY);
TSLCDOutDat(ey);
TSLCDOutIns(TS_INS_END_ADY);
TSLCDOutDat(sy);
TSLCDOutIns(TS_INS_GRAM_ADY);
TSLCDOutDat(sy);//fix from bug of v1_00
y = sy - ey + 1;
#else
TSLCDOutIns(TS_INS_START_ADY);
TSLCDOutDat(sy);
TSLCDOutIns(TS_INS_END_ADY);
TSLCDOutDat(ey);
TSLCDOutIns(TS_INS_GRAM_ADY);
TSLCDOutDat(sy);
y = ey - sy + 1;
#endif
TSLCDOutIns(TS_INS_RW_GRAM);
if ((mode == TS_MODE_NORMAL) || (mode == TS_MODE_FULL))
{
for (j=0; j<y; j++)
for (i=0; i<x; i++)
{
TSLCDOutDat(color);
}
}
else
if (mode == TS_MODE_INVERSE)
{
for (j=0; j<y; j++)
for (i=0; i<x; i++)
{
color = TSLCDInDat(); // ignore invalid data
color = TSLCDInDat();
TSLCDOutDat(~color);
}
}
}
void TSLCDFillCirc(ts_pos_t cx,ts_pos_t cy,ts_pos_t rad,unsigned short color, ts_mode_t mode) //draw a circle
{
#ifndef TS_ORN_PORTRAIT
int sy_buf,ey_buf;
#endif
int sx,sy,ex,ey;
int i,j;
unsigned short color_buf;
unsigned short rad2 = rad*rad;
sx = cx - rad;
ex = cx + rad;
sy = cy - rad;
ey = cy + rad;
if (sx < ts_margin_xl)
sx = ts_margin_xl;
if (ex > ts_margin_xr)
ex = ts_margin_xr;
if (sy < ts_margin_yu)
sy = ts_margin_yu;
if (ey > ts_margin_yl)
ey = ts_margin_yl;
TSLCDOutIns(TS_INS_START_ADX);
TSLCDOutDat(sx);
TSLCDOutIns(TS_INS_END_ADX);
TSLCDOutDat(ex);
TSLCDOutIns(TS_INS_GRAM_ADX);
TSLCDOutDat(sx);
// x = ex - sx + 1;
#ifndef TS_ORN_PORTRAIT
sy_buf = TS_SIZE_Y - 1 - sy; // mirror start y address
ey_buf = TS_SIZE_Y - 1 - ey; // mirror end y address
TSLCDOutIns(TS_INS_START_ADY);
TSLCDOutDat(ey_buf);
TSLCDOutIns(TS_INS_END_ADY);
TSLCDOutDat(sy_buf);
TSLCDOutIns(TS_INS_GRAM_ADY);
TSLCDOutDat(sy_buf);//fix from bug of v1_00
// y = sy_buf - ey_buf + 1;
#else
TSLCDOutIns(TS_INS_START_ADY);
TSLCDOutDat(sy);
TSLCDOutIns(TS_INS_END_ADY);
TSLCDOutDat(ey);
TSLCDOutIns(TS_INS_GRAM_ADY);
TSLCDOutDat(sy);
// y = ey - sy + 1;
#endif
TSLCDOutIns(TS_INS_RW_GRAM);
if (mode == TS_MODE_NORMAL)
{
for (j=sy-cy; j<=ey-cy; j++)
for (i=sx-cx; i<=ex-cx; i++)
{
if ((i)*(i) + (j)*(j) < rad2)
{
TSLCDOutDat(color);
}
else
{
color_buf = TSLCDInDat(); // ignore invalid data
color_buf = TSLCDInDat();
TSLCDOutDat(color_buf);
}
}
}
else
if (mode == TS_MODE_INVERSE)
{
for (j=sy-cy; j<=ey-cy; j++)
for (i=sx-cx; i<=ex-cx; i++)
{
if ((i)*(i) + (j)*(j) < rad2)
{
color_buf = TSLCDInDat(); // ignore invalid data
color_buf = TSLCDInDat();
TSLCDOutDat(~color_buf);
}
else
{
color_buf = TSLCDInDat(); // ignore invalid data
color_buf = TSLCDInDat();
TSLCDOutDat(color_buf);
}
}
}
else
if (mode == TS_MODE_FULL)
{
for (j=sy-cy; j<=ey-cy; j++)
for (i=sx-cx; i<=ex-cx; i++)
{
if ((i)*(i) + (j)*(j) < rad2)
{
TSLCDOutDat(color);
}
else
{
TSLCDOutDat(back_color);
}
}
}
}
void TSLCDSetMargins(ts_pos_t xl,ts_pos_t xr,ts_pos_t yu,ts_pos_t yl) //set margins for FillRect,FillCirc
{
ts_margin_xl = xl;
ts_margin_xr = xr;
ts_margin_yu = yu;
ts_margin_yl = yl;
}
void TSLCDSetMarginsDefault(void) //Reset margins to default value
{
ts_margin_xl = 0;
ts_margin_xr = TS_SIZE_X - 1;
ts_margin_yu = 0;
ts_margin_yl = TS_SIZE_Y - 1;
}
void buf_store(unsigned char charactor)
{
unsigned char i,j;
int char_p = charactor*FONT_SIZE;
first_non_zero = FONT_BIT_WIDTH;
last_non_zero = 0;
for (i=0; i<FONT_BIT_WIDTH; i++)
for (j=0; j<FONT_BYTE_HEIGHT; j++)
{
if (font[char_p])
{
last_non_zero = i;
if (first_non_zero == FONT_BIT_WIDTH)
{
if (i)
first_non_zero = i-1;
else
first_non_zero = 0;
}
}
if (bold_on && i)
char_buf[i][j] = font[char_p] | font[char_p-FONT_BYTE_HEIGHT];
else
char_buf[i][j] = font[char_p];
char_p++;
}
if (bold_on)
{
last_non_zero++;
}
if (charactor == ' '-0x20)
{
first_non_zero = 0;
last_non_zero = FONT_BIT_WIDTH/2;
}
}
void buf_clear(void)
{
unsigned char i,j;
for (i=0; i<FONT_BIT_WIDTH+2; i++)
for (j=0; j<FONT_BYTE_HEIGHT; j++)
{
char_buf[i][j] = 0;
}
}
unsigned char buf_read(unsigned char column,unsigned char row)
{
unsigned char read_pixel;
if (vary_width_on)
{
column += first_non_zero;
}
if (row < 8)
{
read_pixel = (char_buf[column][0] >> (7-row)) & 0x01;
}
else
{
row = row - 8;
read_pixel = (char_buf[column][1] >> (7-row)) & 0x01;
}
return (read_pixel);
}
void TSLCDCharDisp(char charactor,ts_pos_t sx,ts_pos_t sy,ts_mode_t mode) //low level function to print a character on LCD
{
unsigned int x,y;
unsigned char i,j;
ts_pos_t ex,ey;
unsigned short c;
buf_store(charactor - 0x20);
if (vary_width_on)
{
ex = sx + (last_non_zero - first_non_zero) + char_gap - 1;
}
else
{
ex = sx + FONT_WIDTH - 1;
}
ey = sy + FONT_HEIGHT - 1;
TSLCDOutIns(TS_INS_START_ADX);
TSLCDOutDat(sx);
TSLCDOutIns(TS_INS_END_ADX);
TSLCDOutDat(ex);
TSLCDOutIns(TS_INS_GRAM_ADX);
TSLCDOutDat(sx);
x = ex - sx + 1;
#ifndef TS_ORN_PORTRAIT
sy = TS_SIZE_Y - 1 - sy; // mirror start y address
ey = TS_SIZE_Y - 1 - ey; // mirror end y address
TSLCDOutIns(TS_INS_START_ADY);
TSLCDOutDat(ey);
TSLCDOutIns(TS_INS_END_ADY);
TSLCDOutDat(sy);
TSLCDOutIns(TS_INS_GRAM_ADY);
TSLCDOutDat(sy);//fix from bug of v1_00
y = sy - ey + 1;
#else
TSLCDOutIns(TS_INS_START_ADY);
TSLCDOutDat(sy);
TSLCDOutIns(TS_INS_END_ADY);
TSLCDOutDat(ey);
TSLCDOutIns(TS_INS_GRAM_ADY);
TSLCDOutDat(sy);
y = ey - sy + 1;
#endif
TSLCDOutIns(TS_INS_RW_GRAM);
if (mode == TS_MODE_NORMAL)
{
for (j=0; j<y; j++)
for (i=0; i<x; i++)
{
if (buf_read(i,j))
{
TSLCDOutDat(font_color);
}
else
{
c = TSLCDInDat(); // ignore invalid data
c = TSLCDInDat();
TSLCDOutDat(c);
}
}
}
else
if (mode == TS_MODE_INVERSE)
{
for (j=0; j<y; j++)
for (i=0; i<x; i++)
{
c = TSLCDInDat(); // ignore invalid data
c = TSLCDInDat();
if (buf_read(i,j))
{
TSLCDOutDat(~c);
}
else
{
TSLCDOutDat(c);
}
}
}
else
if (mode == TS_MODE_FULL)
{
for (j=0; j<y; j++)
for (i=0; i<x; i++)
{
if (buf_read(i,j))
{
TSLCDOutDat(font_color);
}
else
{
TSLCDOutDat(back_color);
}
}
}
}
void TSLCDSetOffset(ts_pos_t x,ts_pos_t y) //set LCD offset for character display
{
offsetx = x;
offsety = y;
}
void TSLCDPrintStr(unsigned char line,unsigned char column,char *str,ts_mode_t mode) //print string on LCD
{
int i = 0;
ts_pos_t posx,posy;
posx = offsetx + column*FONT_WIDTH;
posy = offsety + line*FONT_HEIGHT;
while(str[i])
{
TSLCDCharDisp(str[i],posx,posy,mode);
if (vary_width_on)
posx += last_non_zero-first_non_zero+char_gap;
else
posx += FONT_WIDTH;
// if (bold_on)
// posx++;
i++;
}
}
void TSLCDPrintTxt(unsigned char line,unsigned char column,const char *txt,ts_mode_t mode) //print text from code memory
{
int i = 0;
ts_pos_t posx,posy;
posx = offsetx + column*FONT_WIDTH;
posy = offsety + line*FONT_HEIGHT;
while(code(txt[i]))
{
TSLCDCharDisp(code(txt[i]),posx,posy,mode);
if (vary_width_on)
posx += last_non_zero-first_non_zero+char_gap;
else
posx += FONT_WIDTH;
// if (bold_on)
// posx++;
i++;
}
}
void TSLCDPrintCh(unsigned char line,unsigned char column,char c,ts_mode_t mode) //print a character on LCD
{
ts_pos_t posx,posy;
posx = offsetx + column*FONT_WIDTH;
posy = offsety + line*FONT_HEIGHT;
TSLCDCharDisp(c,posx,posy,mode);
}
unsigned int TSLCDGetCharWidth(char c)
{
unsigned int res;
if (vary_width_on)
{
buf_store(c-0x20);
res = last_non_zero - first_non_zero + char_gap;
return (res);
}
else
return (FONT_BIT_WIDTH);
}
unsigned int TSLCDGetStringWidth(char *str)
{
unsigned int i = 0;
unsigned int res = 0;
while (str[i])
{
res += TSLCDGetCharWidth(str[i]);
i++;
}
return (res);
}
void TSLCDSetBold(unsigned char on)
{
bold_on = on;
}
unsigned char TSLCDGetBold(void)
{
return (bold_on);
}
void TSLCDSetVaryWidth(unsigned char on)
{
vary_width_on = on;
}
unsigned char TSLCDGetVaryWidth(void)
{
return (vary_width_on);
}
void TSLCDCfgFont(const unsigned char *_font, unsigned char width, unsigned char height_div_8, unsigned char gap)
{
font = _font;
FONT_BIT_WIDTH = width;
FONT_BYTE_HEIGHT = height_div_8;
FONT_SIZE = width*height_div_8;
FONT_WIDTH = FONT_BIT_WIDTH;
FONT_HEIGHT = FONT_BYTE_HEIGHT*8;
char_gap = gap;
buf_clear();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -