Display: add font 8x4 ASCII.
This commit is contained in:
parent
a97ec8a376
commit
cb696701f8
|
|
@ -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 */
|
||||
};
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
|
||||
#ifndef _FONT_8x4_H
|
||||
#define _FONT_8x4_H
|
||||
|
||||
#include <stdint.h>
|
||||
#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 */
|
||||
114
i2c_test.c
114
i2c_test.c
|
|
@ -16,6 +16,7 @@
|
|||
#include <string.h>
|
||||
#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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue