void lcd_PutFuel ( int8_t val, /* Fuel level (-1:plugged, 0:empty cell, ..., 5:full cell) */ uint8_t chr /* User character to use */ ) { static const uint8_t plg[8] = {10,10,31,31,14,4,7,0}; uint8_t gfx[8], d, *p; int8_t i; if (val >= 0) { /* Cell (0..5) */ p = &gfx[8]; *(--p) = 0; *(--p) = 0x1F; for (i = 1; i <= 5; i++) { d = 0x1F; if (val < i) d = (i == 5) ? 0x1B : 0x11; *(--p) = d; } *(--p) = 0x0E; } else { /* Plug (-1) */ p = (uint8_t*)plg; } lcd_SetCG(chr, 1, p); lcd_Putc(chr); }
void lcd_Print_P(PGM_P str) { uint16_t i = 0; size_t stringlength; stringlength = strlen_P(str); while(i < stringlength) lcd_Putc ( pgm_read_byte(&str[i++]) ); }
void lcd_Print( uint8_t * str) { int16_t i = 0; size_t stringlength; stringlength = strlen((char *)str); while(i < stringlength) lcd_Putc ( str[i++] ); }
void lcd_Print_P(PGM_P str) { uint16_t i = 0; size_t stringlength; if( strlen_P(str) < portLCD_BUFFER ) stringlength = strlen_P(str); else stringlength = portLCD_BUFFER-1; while(i < stringlength) lcd_Putc ( pgm_read_byte(&str[i++]) ); }
void lcd_Print( uint8_t * str) { int16_t i = 0; size_t stringlength; if( strlen((char *)str) < portLCD_BUFFER ) stringlength = strlen((char *)str); else stringlength = portLCD_BUFFER-1; while(i < stringlength) lcd_Putc ( str[i++] ); }
void lcd_PutBar ( uint16_t val, /* Bar length (0 to _MAX_BAR represents bar length from left end) */ uint8_t width, /* Display area (number of chars from cursor position) */ uint8_t chr /* User character code (2 chars used from this) */ ) { static const uint8_t ptn[] = { 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0x80, 0, 0xF0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0, 0xF0, 0xF0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0 }; const uint8_t *pp; uint16_t n, m, s, gi; uint8_t gfx[16]; for (n = 0; n < 16; n++) /* Register common pattern (space/fill) */ gfx[n] = n < 7 ? 0 : 0xFF; lcd_SetCG(_BASE_GRAPH, 2, gfx); /* Draw edge pattern into gfx[] */ val = (uint32_t)val * (width * 18) / (_MAX_BAR + 1); pp = &ptn[(val % 3) * 8]; /* Get edge pattern */ s = val / 3 % 6; /* Bit shift */ for (n = 0; n < 7; n++) { /* Draw edge pattern into the pattern buffer */ m = (*pp++ | 0xFF00) >> s; gfx[n] = m; gfx[n + 8] = m >> 6; } /* Put graphic pattern into the LCD module */ gi = val / 18; /* Indicator start position */ for (n = 1; n <= width; n++) { /* Draw each location in the bargraph */ if (n == gi) { /* When edge pattern is exist at the location */ m = chr + 1; /* A edge pattern */ } else { if (n == gi + 1) { lcd_SetCG(chr, 2, gfx); /* Register edge pattern */ m = chr; } else { m = (n >= gi) ? _BASE_GRAPH : _BASE_GRAPH + 1; /* A space or fill */ } } lcd_Putc(m); /* Put the character into the LCD */ } }
void lcd_PutPoint ( uint16_t val, /* Dot position (0 to _MAX_POINT represents left end to write end) */ uint8_t width, /* Display area (number of chars from cursor position) */ uint8_t chr /* User character code (2 chars used from this) */ ) { static const uint8_t ptn[] = { 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x18, 0, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0x18, 0, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x0C, 0x18, 0 }; const uint8_t *pp; uint16_t n, m, s, gi; uint8_t gfx[16]; for (n = 0; n < 16; n++) /* Register common pattern (space) */ gfx[n] = n < 7 ? 0 : 0xFF; lcd_SetCG(_BASE_GRAPH, 1, gfx); /* Draw edge pattern into gfx[] */ val = (uint32_t)val * (width * 18 - 12) / (_MAX_BAR + 1); pp = &ptn[(val % 3) * 8]; /* Get edge pattern */ s = val / 3 % 6; /* Bit shift */ for (n = 0; n < 7; n++) { /* Draw edge pattern into the pattern buffer */ m = *pp++; m <<= 6; m >>= s; gfx[n] = m; gfx[n + 8] = m >> 6; } lcd_SetCG(chr, 2, gfx); /* Register dot pattern */ /* Put graphic pattern into the LCD module */ gi = val / 18; /* Indicator start position */ for (n = 0; n < width; n++) { /* Draw each location in the bargraph */ if (n == gi) { /* When edge pattern is exist at the location */ m = chr + 1; /* A edge pattern */ } else { if (n == gi + 1) m = chr; else m = _BASE_GRAPH; /* A space */ } lcd_Putc(m); /* Put the character into the LCD */ } }