diff --git a/main.c b/main.c index 92e451f..4b3e788 100644 --- a/main.c +++ b/main.c @@ -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; }