diff --git a/font_8x4.c b/font_8x4.c new file mode 100644 index 0000000..981efd0 --- /dev/null +++ b/font_8x4.c @@ -0,0 +1,115 @@ + +/** \file + + This is a compact, proportional font provided by Ruslan Popov with his + intital display support code. + + Use offset of 32 for symbols because the first 32 symbols are + removed from font. +*/ + +#include "font_8x4.h" + +const symbol_t PROGMEM font_8x4[] = { + {2, {0x00, 0x00, 0x00, 0x00}}, /* space */ + {3, {0x0C, 0x5E, 0x0C, 0x00}}, /* excl_mark */ + {3, {0x03, 0x00, 0x03, 0x00}}, /* quot_mark */ + {4, {0x74, 0x2E, 0x74, 0x2E}}, /* num_sign */ + {4, {0x24, 0xCA, 0x53, 0x24}}, /* dlr_sign */ + {4, {0x44, 0x30, 0x0C, 0x22}}, /* prc_sign */ + {4, {0x33, 0x4D, 0x22, 0x00}}, /* ampersand */ + {2, {0x02, 0x01, 0x00, 0x00}}, /* apostrophe */ + {2, {0x3E, 0x41, 0x00, 0x00}}, /* lparent */ + {2, {0x41, 0x3E, 0x00, 0x00}}, /* rparent */ + {3, {0x14, 0x3E, 0x14, 0x00}}, /* asterisk */ + {3, {0x08, 0x1C, 0x08, 0x00}}, /* plus_sign */ + {2, {0x40, 0x20, 0x00, 0x00}}, /* comma */ + {3, {0x08, 0x08, 0x08, 0x00}}, /* minus_sign */ + {1, {0x20, 0x00, 0x00, 0x00}}, /* dot */ + {3, {0x30, 0x0C, 0x03, 0x00}}, /* solidus */ + + {4, {0x3E, 0x41, 0x41, 0x3E}}, /* num_0 */ + {3, {0x44, 0x7F, 0x40, 0x00}}, /* num_1 */ + {4, {0x62, 0x51, 0x49, 0x46}}, /* num_2 */ + {4, {0x22, 0x49, 0x49, 0x36}}, /* num_3 */ + {4, {0x0F, 0x08, 0x08, 0x7E}}, /* num_4 */ + {4, {0x27, 0x45, 0x45, 0x39}}, /* num_5 */ + {4, {0x3E, 0x45, 0x45, 0x38}}, /* num_6 */ + {4, {0x01, 0x71, 0x09, 0x07}}, /* num_7 */ + {4, {0x36, 0x49, 0x49, 0x36}}, /* num_8 */ + {4, {0x26, 0x49, 0x49, 0x3E}}, /* num_9 */ + {1, {0x24, 0x00, 0x00, 0x00}}, /* colon */ + {2, {0x40, 0x24, 0x00, 0x00}}, /* semicolon */ + {3, {0x08, 0x14, 0x22, 0x00}}, /* less_sign */ + {3, {0x14, 0x14, 0x14, 0x00}}, /* equal_sign */ + {3, {0x22, 0x14, 0x08, 0x00}}, /* great_sign */ + {3, {0x02, 0x51, 0x0E, 0x00}}, /* ques_mark */ + + {4, {0x7E, 0x99, 0xA5, 0x3E}}, /* at */ + {3, {0x7E, 0x11, 0x7F, 0x00}}, /* a_cap */ + {3, {0x7F, 0x49, 0x36, 0x00}}, /* b_cap */ + {3, {0x3E, 0x41, 0x22, 0x00}}, /* c_cap */ + {3, {0x7F, 0x41, 0x3E, 0x00}}, /* d_cap */ + {3, {0x7F, 0x49, 0x41, 0x00}}, /* e_cap */ + {3, {0x7F, 0x09, 0x01, 0x00}}, /* f_cap */ + {3, {0x3E, 0x41, 0x71, 0x00}}, /* g_cap */ + {3, {0x7F, 0x08, 0x7F, 0x00}}, /* h_cap */ + {3, {0x41, 0x7F, 0x41, 0x00}}, /* i_cap */ + {3, {0x40, 0x41, 0x3F, 0x00}}, /* j_cap */ + {3, {0x7F, 0x0C, 0x73, 0x00}}, /* k_cap */ + {3, {0x7F, 0x40, 0x40, 0x00}}, /* l_cap */ + {3, {0x7F, 0x06, 0x7F, 0x00}}, /* m_cap */ + {3, {0x7F, 0x3C, 0x7F, 0x00}}, /* n_cap */ + {3, {0x3E, 0x41, 0x3E, 0x00}}, /* o_cap */ + + {3, {0x7F, 0x11, 0x0E, 0x00}}, /* p_cap */ + {3, {0x3E, 0x41, 0xBE, 0x00}}, /* q_cap */ + {3, {0x7F, 0x11, 0x6E, 0x00}}, /* r_cap */ + {3, {0x46, 0x49, 0x31, 0x00}}, /* s_cap */ + {3, {0x01, 0x7F, 0x01, 0x00}}, /* t_cap */ + {3, {0x3F, 0x40, 0x7F, 0x00}}, /* u_cap */ + {3, {0x3F, 0x40, 0x3F, 0x00}}, /* v_cap */ + {3, {0x7F, 0x30, 0x7F, 0x00}}, /* w_cap */ + {3, {0x73, 0x0C, 0x73, 0x00}}, /* x_cap */ + {3, {0x0F, 0x70, 0x0F, 0x00}}, /* y_cap */ + {3, {0x61, 0x5D, 0x47, 0x00}}, /* z_cap */ + {2, {0x7F, 0x41, 0x00, 0x00}}, /* lq_bracket */ + {3, {0x06, 0x18, 0x60, 0x00}}, /* rev_solidus */ + {2, {0x41, 0x7F, 0x00, 0x00}}, /* rq_bracket */ + {3, {0x02, 0x01, 0x02, 0x00}}, /* circumflex_accent */ + {3, {0x40, 0x40, 0x40, 0x00}}, /* low_line */ + + {2, {0x01, 0x02, 0x00, 0x00}}, /* grave_accent */ + {3, {0x30, 0x48, 0x78, 0x00}}, /* a_sml */ + {3, {0x7E, 0x48, 0x30, 0x00}}, /* b_sml */ + {3, {0x30, 0x48, 0x48, 0x00}}, /* c_sml */ + {3, {0x30, 0x48, 0x7E, 0x00}}, /* d_sml */ + {3, {0x30, 0x58, 0x58, 0x00}}, /* e_sml */ + {2, {0x7C, 0x12, 0x00, 0x00}}, /* f_sml */ + {3, {0x10, 0xA8, 0x70, 0x00}}, /* g_sml */ + {3, {0x7E, 0x08, 0x70, 0x00}}, /* h_sml */ + {1, {0x74, 0x00, 0x00, 0x00}}, /* i_sml */ + {2, {0x80, 0x7A, 0x00, 0x00}}, /* j_sml */ + {3, {0x7E, 0x10, 0x68, 0x00}}, /* k_sml */ + {2, {0x3E, 0x40, 0x00, 0x00}}, /* l_sml */ + {3, {0x78, 0x38, 0x70, 0x00}}, /* m_sml */ + {3, {0x78, 0x08, 0x70, 0x00}}, /* n_sml */ + {3, {0x30, 0x48, 0x30, 0x00}}, /* o_sml */ + + {3, {0xF8, 0x48, 0x30, 0x00}}, /* p_sml */ + {3, {0x30, 0x48, 0xF8, 0x00}}, /* q_sml */ + {2, {0x70, 0x08, 0x00, 0x00}}, /* r_sml */ + {3, {0x50, 0x58, 0x28, 0x00}}, /* s_sml */ + {2, {0x3E, 0x44, 0x00, 0x00}}, /* t_sml */ + {3, {0x38, 0x40, 0x78, 0x00}}, /* u_sml */ + {3, {0x38, 0x40, 0x38, 0x00}}, /* v_sml */ + {3, {0x78, 0x60, 0x78, 0x00}}, /* w_sml */ + {3, {0x68, 0x10, 0x68, 0x00}}, /* x_sml */ + {3, {0x18, 0xA0, 0x78, 0x00}}, /* y_sml */ + {3, {0x68, 0x68, 0x58, 0x00}}, /* z_sml */ + {3, {0x08, 0x36, 0x41, 0x00}}, /* left_curly_bracket */ + {1, {0x7F, 0x00, 0x00, 0x00}}, /* vertical_line */ + {3, {0x41, 0x36, 0x08, 0x00}}, /* rigth_curly_bracket */ + {4, {0x02, 0x01, 0x02, 0x01}}, /* tilde */ + {4, {0x00, 0x00, 0x00, 0x00}} /* del */ +}; diff --git a/font_8x4.h b/font_8x4.h new file mode 100644 index 0000000..a70cc2e --- /dev/null +++ b/font_8x4.h @@ -0,0 +1,19 @@ + +#ifndef _FONT_8x4_H +#define _FONT_8x4_H + +#include +#include "arduino.h" // For PROGMEM. + +#define FONT_ROWS 8 +#define FONT_COLUMNS 4 +#define FONT_SYMBOL_SPACE 1 + +typedef struct { + uint8_t columns; + uint8_t data[FONT_COLUMNS]; +} symbol_t; + +extern const symbol_t PROGMEM font_8x4[]; + +#endif /* _FONT_8x4_H */ diff --git a/i2c_test.c b/i2c_test.c index 562bc4c..32dd6b2 100644 --- a/i2c_test.c +++ b/i2c_test.c @@ -16,6 +16,7 @@ #include #include "config_wrapper.h" #include "displaybus.h" +#include "font_8x4.h" #define DISPLAY_I2C_ADDRESS (0x3C << 1) @@ -45,117 +46,6 @@ const uint8_t PROGMEM display_init[] = { // (0..3), still addressing logic accepts, but can't deal with the 0..7 // meant for 64 pixel high displays. -typedef struct { - uint8_t columns; - uint8_t data[4]; -} SYMBOL; - -const SYMBOL PROGMEM font_8x4[] = { - {2, {0x00, 0x00, 0x00, 0x00}}, /* space */ - {3, {0x0C, 0x5E, 0x0C, 0x00}}, /* excl_mark */ - {3, {0x03, 0x00, 0x03, 0x00}}, /* quot_mark */ - {4, {0x74, 0x2E, 0x74, 0x2E}}, /* num_sign */ - {4, {0x24, 0xCA, 0x53, 0x24}}, /* dlr_sign */ - {4, {0x44, 0x30, 0x0C, 0x22}}, /* prc_sign */ - {4, {0x33, 0x4D, 0x22, 0x00}}, /* ampersand */ - {2, {0x02, 0x01, 0x00, 0x00}}, /* apostrophe */ - {2, {0x3E, 0x41, 0x00, 0x00}}, /* lparent */ - {2, {0x41, 0x3E, 0x00, 0x00}}, /* rparent */ - {3, {0x14, 0x3E, 0x14, 0x00}}, /* asterisk */ - {3, {0x08, 0x1C, 0x08, 0x00}}, /* plus_sign */ - {2, {0x40, 0x20, 0x00, 0x00}}, /* comma */ - {3, {0x08, 0x08, 0x08, 0x00}}, /* minus_sign */ - {1, {0x20, 0x00, 0x00, 0x00}}, /* dot */ - {3, {0x30, 0x0C, 0x03, 0x00}}, /* solidus */ - - {4, {0x3E, 0x41, 0x41, 0x3E}}, /* num_0 */ - {3, {0x44, 0x7F, 0x40, 0x00}}, /* num_1 */ - {4, {0x62, 0x51, 0x49, 0x46}}, /* num_2 */ - {4, {0x22, 0x49, 0x49, 0x36}}, /* num_3 */ - {4, {0x0F, 0x08, 0x08, 0x7E}}, /* num_4 */ - {4, {0x27, 0x45, 0x45, 0x39}}, /* num_5 */ - {4, {0x3E, 0x45, 0x45, 0x38}}, /* num_6 */ - {4, {0x01, 0x71, 0x09, 0x07}}, /* num_7 */ - {4, {0x36, 0x49, 0x49, 0x36}}, /* num_8 */ - {4, {0x26, 0x49, 0x49, 0x3E}}, /* num_9 */ - {1, {0x24, 0x00, 0x00, 0x00}}, /* colon */ - {2, {0x40, 0x24, 0x00, 0x00}}, /* semicolon */ - {3, {0x08, 0x14, 0x22, 0x00}}, /* less_sign */ - {3, {0x14, 0x14, 0x14, 0x00}}, /* equal_sign */ - {3, {0x22, 0x14, 0x08, 0x00}}, /* great_sign */ - {3, {0x02, 0x51, 0x0E, 0x00}}, /* ques_mark */ - - {4, {0x7E, 0x99, 0xA5, 0x3E}}, /* at */ - {3, {0x7E, 0x11, 0x7F, 0x00}}, /* a_cap */ - {3, {0x7F, 0x49, 0x36, 0x00}}, /* b_cap */ - {3, {0x3E, 0x41, 0x22, 0x00}}, /* c_cap */ - {3, {0x7F, 0x41, 0x3E, 0x00}}, /* d_cap */ - {3, {0x7F, 0x49, 0x41, 0x00}}, /* e_cap */ - {3, {0x7F, 0x09, 0x01, 0x00}}, /* f_cap */ - {3, {0x3E, 0x41, 0x71, 0x00}}, /* g_cap */ - {3, {0x7F, 0x08, 0x7F, 0x00}}, /* h_cap */ - {3, {0x41, 0x7F, 0x41, 0x00}}, /* i_cap */ - {3, {0x40, 0x41, 0x3F, 0x00}}, /* j_cap */ - {3, {0x7F, 0x0C, 0x73, 0x00}}, /* k_cap */ - {3, {0x7F, 0x40, 0x40, 0x00}}, /* l_cap */ - {3, {0x7F, 0x06, 0x7F, 0x00}}, /* m_cap */ - {3, {0x7F, 0x3C, 0x7F, 0x00}}, /* n_cap */ - {3, {0x3E, 0x41, 0x3E, 0x00}}, /* o_cap */ - - {3, {0x7F, 0x11, 0x0E, 0x00}}, /* p_cap */ - {3, {0x3E, 0x41, 0xBE, 0x00}}, /* q_cap */ - {3, {0x7F, 0x11, 0x6E, 0x00}}, /* r_cap */ - {3, {0x46, 0x49, 0x31, 0x00}}, /* s_cap */ - {3, {0x01, 0x7F, 0x01, 0x00}}, /* t_cap */ - {3, {0x3F, 0x40, 0x7F, 0x00}}, /* u_cap */ - {3, {0x3F, 0x40, 0x3F, 0x00}}, /* v_cap */ - {3, {0x7F, 0x30, 0x7F, 0x00}}, /* w_cap */ - {3, {0x73, 0x0C, 0x73, 0x00}}, /* x_cap */ - {3, {0x0F, 0x70, 0x0F, 0x00}}, /* y_cap */ - {3, {0x61, 0x5D, 0x47, 0x00}}, /* z_cap */ - {2, {0x7F, 0x41, 0x00, 0x00}}, /* lq_bracket */ - {3, {0x06, 0x18, 0x60, 0x00}}, /* rev_solidus */ - {2, {0x41, 0x7F, 0x00, 0x00}}, /* rq_bracket */ - {3, {0x02, 0x01, 0x02, 0x00}}, /* circumflex_accent */ - {3, {0x40, 0x40, 0x40, 0x00}}, /* low_line */ - - {2, {0x01, 0x02, 0x00, 0x00}}, /* grave_accent */ - {3, {0x30, 0x48, 0x78, 0x00}}, /* a_sml */ - {3, {0x7E, 0x48, 0x30, 0x00}}, /* b_sml */ - {3, {0x30, 0x48, 0x48, 0x00}}, /* c_sml */ - {3, {0x30, 0x48, 0x7E, 0x00}}, /* d_sml */ - {3, {0x30, 0x58, 0x58, 0x00}}, /* e_sml */ - {2, {0x7C, 0x12, 0x00, 0x00}}, /* f_sml */ - {3, {0x10, 0xA8, 0x70, 0x00}}, /* g_sml */ - {3, {0x7E, 0x08, 0x70, 0x00}}, /* h_sml */ - {1, {0x74, 0x00, 0x00, 0x00}}, /* i_sml */ - {2, {0x80, 0x7A, 0x00, 0x00}}, /* j_sml */ - {3, {0x7E, 0x10, 0x68, 0x00}}, /* k_sml */ - {2, {0x3E, 0x40, 0x00, 0x00}}, /* l_sml */ - {3, {0x78, 0x38, 0x70, 0x00}}, /* m_sml */ - {3, {0x78, 0x08, 0x70, 0x00}}, /* n_sml */ - {3, {0x30, 0x48, 0x30, 0x00}}, /* o_sml */ - - {3, {0xF8, 0x48, 0x30, 0x00}}, /* p_sml */ - {3, {0x30, 0x48, 0xF8, 0x00}}, /* q_sml */ - {2, {0x70, 0x08, 0x00, 0x00}}, /* r_sml */ - {3, {0x50, 0x58, 0x28, 0x00}}, /* s_sml */ - {2, {0x3E, 0x44, 0x00, 0x00}}, /* t_sml */ - {3, {0x38, 0x40, 0x78, 0x00}}, /* u_sml */ - {3, {0x38, 0x40, 0x38, 0x00}}, /* v_sml */ - {3, {0x78, 0x60, 0x78, 0x00}}, /* w_sml */ - {3, {0x68, 0x10, 0x68, 0x00}}, /* x_sml */ - {3, {0x18, 0xA0, 0x78, 0x00}}, /* y_sml */ - {3, {0x68, 0x68, 0x58, 0x00}}, /* z_sml */ - {3, {0x08, 0x36, 0x41, 0x00}}, /* left_curly_bracket */ - {1, {0x7F, 0x00, 0x00, 0x00}}, /* vertical_line */ - {3, {0x41, 0x36, 0x08, 0x00}}, /* rigth_curly_bracket */ - {4, {0x02, 0x01, 0x02, 0x01}}, /* tilde */ - {4, {0x00, 0x00, 0x00, 0x00}} /* del */ -}; - -#define FONT_SYMBOLS_SPACE 1 - static void i2c_test(void) { uint16_t i; const char* message = "Welcome to Teacup"; @@ -210,7 +100,7 @@ static void i2c_test(void) { displaybus_write(pgm_read_byte(&font_8x4[index].data[i]), 0); } // Send space between characters. - for (i = 0; i < FONT_SYMBOLS_SPACE; i++) { + for (i = 0; i < FONT_SYMBOL_SPACE; i++) { displaybus_write(0x00, 0); }