parent
7af5f0e35e
commit
dbd2d6a7ea
@ -0,0 +1,108 @@ |
|||||||
|
#ifndef FONT_H |
||||||
|
#define FONT_H |
||||||
|
|
||||||
|
#define FONT_MIN ' ' |
||||||
|
#define FONT_MAX '~' |
||||||
|
|
||||||
|
#define FONT_WIDTH 6 |
||||||
|
|
||||||
|
const unsigned char font[96][6] = { |
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x00}, //
|
||||||
|
{0x5c,0x00,0x00,0x00,0x00,0x00}, // !
|
||||||
|
{0x06,0x00,0x06,0x00,0x00,0x00}, // "
|
||||||
|
{0x28,0x7c,0x28,0x7c,0x28,0x00}, // #
|
||||||
|
{0x5c,0x54,0xfe,0x54,0x74,0x00}, // $
|
||||||
|
{0x44,0x20,0x10,0x08,0x44,0x00}, // %
|
||||||
|
{0x28,0x54,0x54,0x20,0x50,0x00}, // &
|
||||||
|
{0x06,0x00,0x00,0x00,0x00,0x00}, // '
|
||||||
|
{0x38,0x44,0x00,0x00,0x00,0x00}, // (
|
||||||
|
{0x44,0x38,0x00,0x00,0x00,0x00}, // )
|
||||||
|
{0x02,0x07,0x02,0x00,0x00,0x00}, // *
|
||||||
|
{0x10,0x10,0x7c,0x10,0x10,0x00}, // +
|
||||||
|
{0xc0,0x00,0x00,0x00,0x00,0x00}, // ,
|
||||||
|
{0x10,0x10,0x10,0x10,0x10,0x00}, // -
|
||||||
|
{0x40,0x00,0x00,0x00,0x00,0x00}, // .
|
||||||
|
{0x60,0x10,0x0c,0x00,0x00,0x00}, // /
|
||||||
|
{0x7c,0x64,0x54,0x4c,0x7c,0x00}, // 0
|
||||||
|
{0x48,0x7c,0x40,0x00,0x00,0x00}, // 1
|
||||||
|
{0x64,0x54,0x54,0x54,0x48,0x00}, // 2
|
||||||
|
{0x44,0x54,0x54,0x54,0x6c,0x00}, // 3
|
||||||
|
{0x3c,0x20,0x70,0x20,0x20,0x00}, // 4
|
||||||
|
{0x5c,0x54,0x54,0x54,0x24,0x00}, // 5
|
||||||
|
{0x7c,0x54,0x54,0x54,0x74,0x00}, // 6
|
||||||
|
{0x04,0x04,0x64,0x14,0x0c,0x00}, // 7
|
||||||
|
{0x7c,0x54,0x54,0x54,0x7c,0x00}, // 8
|
||||||
|
{0x5c,0x54,0x54,0x54,0x7c,0x00}, // 9
|
||||||
|
{0x44,0x00,0x00,0x00,0x00,0x00}, // :
|
||||||
|
{0xc4,0x00,0x00,0x00,0x00,0x00}, // ;
|
||||||
|
{0x10,0x28,0x44,0x00,0x00,0x00}, // <
|
||||||
|
{0x28,0x28,0x28,0x28,0x28,0x00}, // =
|
||||||
|
{0x44,0x28,0x10,0x00,0x00,0x00}, // >
|
||||||
|
{0x08,0x04,0x54,0x08,0x00,0x00}, // ?
|
||||||
|
{0x7c,0x44,0x54,0x54,0x5c,0x00}, // @
|
||||||
|
{0x7c,0x24,0x24,0x24,0x7c,0x00}, // A
|
||||||
|
{0x7c,0x54,0x54,0x54,0x6c,0x00}, // B
|
||||||
|
{0x7c,0x44,0x44,0x44,0x44,0x00}, // C
|
||||||
|
{0x7c,0x44,0x44,0x44,0x38,0x00}, // D
|
||||||
|
{0x7c,0x54,0x54,0x54,0x44,0x00}, // E
|
||||||
|
{0x7c,0x14,0x14,0x14,0x04,0x00}, // F
|
||||||
|
{0x7c,0x44,0x44,0x54,0x74,0x00}, // G
|
||||||
|
{0x7c,0x10,0x10,0x10,0x7c,0x00}, // H
|
||||||
|
{0x44,0x44,0x7c,0x44,0x44,0x00}, // I
|
||||||
|
{0x60,0x40,0x40,0x44,0x7c,0x00}, // J
|
||||||
|
{0x7c,0x10,0x10,0x28,0x44,0x00}, // K
|
||||||
|
{0x7c,0x40,0x40,0x40,0x40,0x00}, // L
|
||||||
|
{0x7c,0x08,0x10,0x08,0x7c,0x00}, // M
|
||||||
|
{0x7c,0x08,0x10,0x20,0x7c,0x00}, // N
|
||||||
|
{0x38,0x44,0x44,0x44,0x38,0x00}, // O
|
||||||
|
{0x7c,0x14,0x14,0x14,0x08,0x00}, // P
|
||||||
|
{0x3c,0x24,0x64,0x24,0x3c,0x00}, // Q
|
||||||
|
{0x7c,0x14,0x14,0x14,0x68,0x00}, // R
|
||||||
|
{0x5c,0x54,0x54,0x54,0x74,0x00}, // S
|
||||||
|
{0x04,0x04,0x7c,0x04,0x04,0x00}, // T
|
||||||
|
{0x7c,0x40,0x40,0x40,0x7c,0x00}, // U
|
||||||
|
{0x0c,0x30,0x40,0x30,0x0c,0x00}, // V
|
||||||
|
{0x3c,0x40,0x30,0x40,0x3c,0x00}, // W
|
||||||
|
{0x44,0x28,0x10,0x28,0x44,0x00}, // X
|
||||||
|
{0x0c,0x10,0x60,0x10,0x0c,0x00}, // Y
|
||||||
|
{0x44,0x64,0x54,0x4c,0x44,0x00}, // Z
|
||||||
|
{0x7c,0x44,0x00,0x00,0x00,0x00}, // [
|
||||||
|
{0x0c,0x10,0x60,0x00,0x00,0x00}, // "\"
|
||||||
|
{0x44,0x7c,0x00,0x00,0x00,0x00}, // ]
|
||||||
|
{0x00,0x01,0x00,0x01,0x00,0x00}, // ^
|
||||||
|
{0x40,0x40,0x40,0x40,0x40,0x40}, // _
|
||||||
|
{0x00,0x01,0x00,0x00,0x00,0x00}, // `
|
||||||
|
{0x7c,0x24,0x24,0x24,0x7c,0x00}, // a
|
||||||
|
{0x7c,0x54,0x54,0x54,0x6c,0x00}, // b
|
||||||
|
{0x7c,0x44,0x44,0x44,0x44,0x00}, // c
|
||||||
|
{0x7c,0x44,0x44,0x44,0x38,0x00}, // d
|
||||||
|
{0x7c,0x54,0x54,0x54,0x44,0x00}, // e
|
||||||
|
{0x7c,0x14,0x14,0x14,0x04,0x00}, // f
|
||||||
|
{0x7c,0x44,0x44,0x54,0x74,0x00}, // g
|
||||||
|
{0x7c,0x10,0x10,0x10,0x7c,0x00}, // h
|
||||||
|
{0x44,0x44,0x7c,0x44,0x44,0x00}, // i
|
||||||
|
{0x60,0x40,0x40,0x44,0x7c,0x00}, // j
|
||||||
|
{0x7c,0x10,0x10,0x28,0x44,0x00}, // k
|
||||||
|
{0x7c,0x40,0x40,0x40,0x40,0x00}, // l
|
||||||
|
{0x7c,0x08,0x10,0x08,0x7c,0x00}, // m
|
||||||
|
{0x7c,0x08,0x10,0x20,0x7c,0x00}, // n
|
||||||
|
{0x38,0x44,0x44,0x44,0x38,0x00}, // o
|
||||||
|
{0x7c,0x14,0x14,0x14,0x08,0x00}, // p
|
||||||
|
{0x3c,0x24,0x64,0x24,0x3c,0x00}, // q
|
||||||
|
{0x7c,0x14,0x14,0x14,0x68,0x00}, // r
|
||||||
|
{0x5c,0x54,0x54,0x54,0x74,0x00}, // s
|
||||||
|
{0x04,0x04,0x7c,0x04,0x04,0x00}, // t
|
||||||
|
{0x7c,0x40,0x40,0x40,0x7c,0x00}, // u
|
||||||
|
{0x0c,0x30,0x40,0x30,0x0c,0x00}, // v
|
||||||
|
{0x3c,0x40,0x30,0x40,0x3c,0x00}, // w
|
||||||
|
{0x44,0x28,0x10,0x28,0x44,0x00}, // x
|
||||||
|
{0x0c,0x10,0x60,0x10,0x0c,0x00}, // y
|
||||||
|
{0x44,0x64,0x54,0x4c,0x44,0x00}, // z
|
||||||
|
{0x10,0x7c,0x44,0x00,0x00,0x00}, // {
|
||||||
|
{0x6c,0x00,0x00,0x00,0x00,0x00}, // |
|
||||||
|
{0x44,0x7c,0x10,0x00,0x00,0x00}, // }
|
||||||
|
{0x02,0x01,0x02,0x01,0x00,0x00}, // ~
|
||||||
|
{0x00,0x00,0x00,0x00,0x00,0x00} |
||||||
|
}; |
||||||
|
|
||||||
|
#endif // FONT_H
|
@ -0,0 +1,59 @@ |
|||||||
|
#include "scrolltext.h" |
||||||
|
|
||||||
|
#include "font.h" |
||||||
|
#include "com/debug.h" |
||||||
|
|
||||||
|
static void printtext(const char *text, int x, int y) |
||||||
|
{ |
||||||
|
dmtx_clear(dmtx); |
||||||
|
dmtx_show(dmtx); |
||||||
|
|
||||||
|
int totalX = 0; |
||||||
|
|
||||||
|
for (int textX = 0; textX < (int)strlen(text); textX++) { |
||||||
|
uint8_t ch = (uint8_t)text[textX]; |
||||||
|
if (ch < FONT_MIN) ch = '?'; |
||||||
|
if (ch > FONT_MAX) ch = '?'; |
||||||
|
ch -= ' '; // normalize for font table
|
||||||
|
|
||||||
|
if (ch == 0) { // space
|
||||||
|
totalX += 3; |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
// one letter
|
||||||
|
uint8_t blanks = 0; |
||||||
|
|
||||||
|
// skip empty space on right
|
||||||
|
for (int charX = FONT_WIDTH-1; charX >= 0; charX--) { |
||||||
|
uint8_t col = font[ch][charX]; |
||||||
|
if (col == 0x00) { |
||||||
|
blanks++; |
||||||
|
} else { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
for (int charX = 0; charX < FONT_WIDTH - blanks; charX++) { |
||||||
|
uint8_t col = font[ch][charX]; |
||||||
|
for (int charY = 0; charY < 8; charY++) { |
||||||
|
dmtx_set(dmtx, x + totalX, y + 8 - charY, (col >> charY) & 1); |
||||||
|
} |
||||||
|
totalX++; |
||||||
|
} |
||||||
|
|
||||||
|
totalX++; // gap
|
||||||
|
} |
||||||
|
dmtx_show(dmtx); |
||||||
|
} |
||||||
|
|
||||||
|
void scrolltext(const char *text, ms_time_t step) |
||||||
|
{ |
||||||
|
(void)step; |
||||||
|
|
||||||
|
for (int i = 0; i < (int)strlen(text)*FONT_WIDTH + 15; i++) { |
||||||
|
if (i > 0) delay_ms(step); |
||||||
|
|
||||||
|
printtext(text, 15-i, 4); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
#ifndef SCROLLTEXT_H |
||||||
|
#define SCROLLTEXT_H |
||||||
|
|
||||||
|
#include "main.h" |
||||||
|
#include "dotmatrix.h" |
||||||
|
#include "utils/timebase.h" |
||||||
|
|
||||||
|
void scrolltext(const char *text, ms_time_t step); |
||||||
|
|
||||||
|
#endif // SCROLLTEXT_H
|
Loading…
Reference in new issue