// Font retreival function - ugly, but needed. unsigned char getFontLine(unsigned char data, int line_num) { const uint8_t index = (data-32); unsigned char pixel = 0; if (pgm_read_byte(&font4x6[index][1]) & 1 == 1) line_num -= 1; if (line_num == 0) { pixel = (pgm_read_byte(&font4x6[index][0])) >> 4; } else if (line_num == 1) { pixel = (pgm_read_byte(&font4x6[index][0])) >> 1; } else if (line_num == 2) { // Split over 2 bytes return (((pgm_read_byte(&font4x6[index][0])) & 0x03) << 2) | (((pgm_read_byte(&font4x6[index][1])) & 0x02)); } else if (line_num == 3) { pixel = (pgm_read_byte(&font4x6[index][1])) >> 4; } else if (line_num == 4) { pixel = (pgm_read_byte(&font4x6[index][1])) >> 1; } return pixel & 0xE; } // Font Definition const uint8_t font4x6 [96][2] PROGMEM = { { 0x00 , 0x00 }, /*SPACE*/ { 0x49 , 0x08 }, /*'!'*/ { 0xb4 , 0x00 }, /*'"'*/ { 0xbe , 0xf6 }, /*'#'*/ { 0x7b , 0x7a }, /*'$'*/ { 0xa5 , 0x94 }, /*'%'*/ { 0x55 , 0xb8 }, /*'&'*/ { 0x48 , 0x00 }, /*'''*/ { 0x29 , 0x44 }, /*'('*/ { 0x44 , 0x2a }, /*')'*/ { 0x15 , 0xa0 }, /*'*'*/ { 0x0b , 0x42 }, /*'+'*/ { 0x00 , 0x50 }, /*','*/ { 0x03 , 0x02 }, /*'-'*/ { 0x00 , 0x08 }, /*'.'*/ { 0x25 , 0x90 }, /*'/'*/ { 0x76 , 0xba }, /*'0'*/ { 0x59 , 0x5c }, /*'1'*/ { 0xc5 , 0x9e }, /*'2'*/ { 0xc5 , 0x38 }, /*'3'*/ { 0x92 , 0xe6 }, /*'4'*/ { 0xf3 , 0x3a }, /*'5'*/ { 0x73 , 0xba }, /*'6'*/ { 0xe5 , 0x90 }, /*'7'*/ { 0x77 , 0xba }, /*'8'*/ { 0x77 , 0x3a }, /*'9'*/ { 0x08 , 0x40 }, /*':'*/ { 0x08 , 0x50 }, /*';'*/ { 0x2a , 0x44 }, /*'<'*/ { 0x1c , 0xe0 }, /*'='*/ { 0x88 , 0x52 }, /*'>'*/ { 0xe5 , 0x08 }, /*'?'*/ { 0x56 , 0x8e }, /*'@'*/ { 0x77 , 0xb6 }, /*'A'*/ { 0x77 , 0xb8 }, /*'B'*/ { 0x72 , 0x8c }, /*'C'*/ { 0xd6 , 0xba }, /*'D'*/ { 0x73 , 0x9e }, /*'E'*/ { 0x73 , 0x92 }, /*'F'*/ { 0x72 , 0xae }, /*'G'*/ { 0xb7 , 0xb6 }, /*'H'*/ { 0xe9 , 0x5c }, /*'I'*/ { 0x64 , 0xaa }, /*'J'*/ { 0xb7 , 0xb4 }, /*'K'*/ { 0x92 , 0x9c }, /*'L'*/ { 0xbe , 0xb6 }, /*'M'*/ { 0xd6 , 0xb6 }, /*'N'*/ { 0x56 , 0xaa }, /*'O'*/ { 0xd7 , 0x92 }, /*'P'*/ { 0x76 , 0xee }, /*'Q'*/ { 0x77 , 0xb4 }, /*'R'*/ { 0x71 , 0x38 }, /*'S'*/ { 0xe9 , 0x48 }, /*'T'*/ { 0xb6 , 0xae }, /*'U'*/ { 0xb6 , 0xaa }, /*'V'*/ { 0xb6 , 0xf6 }, /*'W'*/ { 0xb5 , 0xb4 }, /*'X'*/ { 0xb5 , 0x48 }, /*'Y'*/ { 0xe5 , 0x9c }, /*'Z'*/ { 0x69 , 0x4c }, /*'['*/ { 0x91 , 0x24 }, /*'\'*/ { 0x64 , 0x2e }, /*']'*/ { 0x54 , 0x00 }, /*'^'*/ { 0x00 , 0x1c }, /*'_'*/ { 0x44 , 0x00 }, /*'`'*/ { 0x0e , 0xae }, /*'a'*/ { 0x9a , 0xba }, /*'b'*/ { 0x0e , 0x8c }, /*'c'*/ { 0x2e , 0xae }, /*'d'*/ { 0x0e , 0xce }, /*'e'*/ { 0x56 , 0xd0 }, /*'f'*/ { 0x55 , 0x3B }, /*'g'*/ { 0x93 , 0xb4 }, /*'h'*/ { 0x41 , 0x44 }, /*'i'*/ { 0x41 , 0x51 }, /*'j'*/ { 0x97 , 0xb4 }, /*'k'*/ { 0x49 , 0x44 }, /*'l'*/ { 0x17 , 0xb6 }, /*'m'*/ { 0x1a , 0xb6 }, /*'n'*/ { 0x0a , 0xaa }, /*'o'*/ { 0xd6 , 0xd3 }, /*'p'*/ { 0x76 , 0x67 }, /*'q'*/ { 0x17 , 0x90 }, /*'r'*/ { 0x0f , 0x38 }, /*'s'*/ { 0x9a , 0x8c }, /*'t'*/ { 0x16 , 0xae }, /*'u'*/ { 0x16 , 0xba }, /*'v'*/ { 0x16 , 0xf6 }, /*'w'*/ { 0x15 , 0xb4 }, /*'x'*/ { 0xb5 , 0x2b }, /*'y'*/ { 0x1c , 0x5e }, /*'z'*/ { 0x6b , 0x4c }, /*'{'*/ { 0x49 , 0x48 }, /*'|'*/ { 0xc9 , 0x5a }, /*'}'*/ { 0x54 , 0x00 }, /*'~'*/ { 0x56 , 0xe2 } /*' '*/ };
See also: