use table for 7 segments characters

This commit is contained in:
King Kévin 2016-01-20 10:27:37 +01:00
parent f21120aa0c
commit 7894df3bb3
1 changed files with 107 additions and 251 deletions

358
main.c
View File

@ -110,6 +110,107 @@ static void vfd_transmit(void)
}
*/
/* ASCII characters encoded for 7 segments display
* starts with space, ends with tilde
*/
static const uint8_t ascii_7segments[] = {
0b00000000, // space
0b00110000, // ! (I)
0b00100010, // "
0b01011100, // # (o)
0b01101101, // $ (s)
0b01010010, // % (/)
0b01111101, // & (6)
0b00100000, // '
0b00111001, // ( ([)
0b00001111, // )
0b01110000, // *
0b01000110, // +
0b00010000, // ,
0b01000000, // -
0b00010000, // . (,)
0b01010010, // /
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
0b01001000, // : (=)
0b01001000, // ; (=)
0b01011000, // <
0b01001000, // =
0b01001100, // >
0b01010011, // ?
0b01111011, // @
0b01110111, // A
0b01111111, // B
0b00111001, // C
0b01011110, // D
0b01111001, // E
0b01110001, // F
0b00111101, // G
0b01110110, // H
0b00110000, // I
0b00011110, // J
0b01110110, // K
0b00111000, // L
0b00110111, // M
0b00110111, // N
0b00111111, // O
0b01110011, // P
0b01101011, // Q
0b00110011, // R
0b01101101, // S
0b01111000, // T
0b00111110, // U
0b00111110, // V (U)
0b00111110, // W (U)
0b01110110, // X (H)
0b01101110, // Y
0b01011011, // Z
0b00111001, // [
0b01100100, // '\'
0b00001111, // /
0b00100011, // ^
0b00001000, // _
0b00000010, // `
0b01011111, // a
0b01111100, // b
0b01011000, // c
0b01011110, // d
0b01111011, // e
0b01110001, // f
0b01101111, // g
0b01110100, // h
0b00010000, // i
0b00001100, // j
0b01110110, // k
0b00110000, // l
0b01010100, // m
0b01010100, // n
0b01011100, // o
0b01110011, // p
0b01100111, // q
0b01010000, // r
0b01101101, // s
0b01111000, // t
0b00011100, // u
0b00011100, // v (u)
0b00011100, // w (u)
0b01110110, // x
0b01101110, // y
0b01011011, // z
0b00111001, // { ([)
0b00110000, // |
0b00001111, // } ([)
0b01000000, // ~
};
/* put digit into memory */
static void vfd_digit(uint8_t nb, char c)
{
@ -135,257 +236,12 @@ static void vfd_digit(uint8_t nb, char c)
}
if (false) { // add the comma (not encoded)
vfd_data[1] |= (1<<(16));
}
uint8_t segment = 0;
switch (c&0x7f) {
case '0':
segment = 0b00111111;
break;
case '1':
segment = 0b00000110;
break;
case '2':
segment = 0b01011011;
break;
case '3':
segment = 0b01001111;
break;
case '4':
segment = 0b01100110;
break;
case '5':
segment = 0b01101101;
break;
case '6':
segment = 0b01111101;
break;
case '7':
segment = 0b00000111;
break;
case '8':
segment = 0b01111111;
break;
case '9':
segment = 0b01101111;
break;
case 'a':
segment = 0b01011111;
break;
case 'b':
segment = 0b01111100;
break;
case 'c':
segment = 0b01011000;
break;
case 'd':
segment = 0b01011110;
break;
case 'e':
segment = 0b01111011;
break;
case 'f':
segment = 0b01110001;
break;
case 'g':
segment = 0b01101111;
break;
case 'h':
segment = 0b01110100;
break;
case 'i':
segment = 0b00010000;
break;
case 'j':
segment = 0b00001100;
break;
case 'k':
segment = 0b01110110;
break;
case 'l':
segment = 0b00110000;
break;
case 'm':
segment = 0b01010100;
break;
case 'n':
segment = 0b01010100;
break;
case 'o':
segment = 0b01011100;
break;
case 'p':
segment = 0b01110011;
break;
case 'q':
segment = 0b01100111;
break;
case 'r':
segment = 0b01010000;
break;
case 's':
segment = 0b01101101;
break;
case 't':
segment = 0b01111000;
break;
case 'u':
segment = 0b00011100;
break;
case 'v':
segment = 0b00011100;
break;
case 'w':
segment = 0b00011100;
break;
case 'x':
segment = 0b01110110;
break;
case 'y':
segment = 0b01101110;
break;
case 'z':
segment = 0b01011011;
break;
case 'A':
segment = 0b01110111;
break;
case 'B':
segment = 0b01111111;
break;
case 'C':
segment = 0b00111001;
break;
case 'D':
segment = 0b01011110;
break;
case 'E':
segment = 0b01111001;
break;
case 'F':
segment = 0b01110001;
break;
case 'G':
segment = 0b00111101;
break;
case 'H':
segment = 0b01110110;
break;
case 'I':
segment = 0b00110000;
break;
case 'J':
segment = 0b00011110;
break;
case 'K':
segment = 0b01110110;
break;
case 'L':
segment = 0b00111000;
break;
case 'M':
segment = 0b00110111;
break;
case 'N':
segment = 0b00110111;
break;
case 'O':
segment = 0b00111111;
break;
case 'P':
segment = 0b01110011;
break;
case 'Q':
segment = 0b01101011;
break;
case 'R':
segment = 0b00110011;
break;
case 'S':
segment = 0b01101101;
break;
case 'T':
segment = 0b01111000;
break;
case 'U':
segment = 0b00111110;
break;
case 'V':
segment = 0b00111110;
break;
case 'W':
segment = 0b00111110;
break;
case 'X':
segment = 0b01110110;
break;
case 'Y':
segment = 0b01101110;
break;
case 'Z':
segment = 0b01011011;
break;
case '_':
segment = 0b00001000;
break;
case '-':
segment = 0b01000000;
break;
case ' ':
segment = 0b00000000;
break;
case '\'':
segment = 0b00100000;
break;
case '"':
segment = 0b00100010;
break;
case '/':
segment = 0b01010010;
break;
case '\\':
segment = 0b01100100;
break;
case '=':
segment = 0b01001000;
break;
case ',':
segment = 0b00010000;
break;
case '>':
segment = 0b01001100;
break;
case '<':
segment = 0b01011000;
break;
case '(':
case '[':
case '{':
segment = 0b00111001;
break;
case ')':
case ']':
case '}':
segment = 0b00001111;
break;
case '@':
segment = 0b01111011;
break;
case '^':
segment = 0b00100011;
break;
case '`':
segment = 0b00000010;
break;
case '|':
segment = 0b00110000;
break;
case '~':
segment = 0b01000000;
break;
default:
segment = 0x00;
}
vfd_data[1] |= (segment<<(17)); // add the segment to memory
}
if (((c&0x7f)<' ') || ((c&0x7f)>'~')) { // unknown ASCII character
vfd_data[1] |= (ascii_7segments[' '-' ']<<(17)); // add empty segments to memory
} else {
vfd_data[1] |= (ascii_7segments[c-' ']<<(17)); // add encoded segments to memory
}
vfd_data[2] = 0;
}