0% encontró este documento útil (0 votos)
44 vistas29 páginas

Display

El documento es un código en C que define funciones y macros para controlar un display, incluyendo la configuración de pines y la representación de caracteres. Se especifican diferentes configuraciones para el tamaño del display y se incluye un conjunto de datos para la representación de caracteres. Además, se utilizan directivas de preprocesador para ajustar el comportamiento del código según las necesidades del hardware.

Cargado por

technosanky
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
44 vistas29 páginas

Display

El documento es un código en C que define funciones y macros para controlar un display, incluyendo la configuración de pines y la representación de caracteres. Se especifican diferentes configuraciones para el tamaño del display y se incluye un conjunto de datos para la representación de caracteres. Además, se utilizan directivas de preprocesador para ajustar el comportamiento del código según las necesidades del hardware.

Cargado por

technosanky
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

/*

* File: display.c
* Author: Sanket
*/

#include "display.h"
#include "timer.h"

//#define DISP_USE_MONOSPACE_FONT

#define DISP_DATA_DIR (TRISBbits.TRISB0)


#define DISP_DATA_PIN (PORTBbits.RB0)
#define DISP_DATA_ON() ((DISP_DATA_PIN) = (BIT_SET))
#define DISP_DATA_OFF() ((DISP_DATA_PIN) = (BIT_CLR))
#define DISP_DATA_TOG() ((DISP_DATA_PIN) = !
(DISP_DATA_PIN))
#define DISP_DATA_CHK() (PORTBbits.RB0)

#define DISP_CLOCK_DIR (TRISCbits.TRISC5)


#define DISP_CLOCK_PIN (PORTCbits.RC5)
#define DISP_CLOCK_ON() ((DISP_CLOCK_PIN) = (BIT_SET))
#define DISP_CLOCK_OFF() ((DISP_CLOCK_PIN) = (BIT_CLR))
#define DISP_CLOCK_TOG() ((DISP_CLOCK_PIN) = !
(DISP_CLOCK_PIN))
#define DISP_CLOCK_CHK() (PORTCbits.RC5)

#define DISP_LATCH_DIR (TRISCbits.TRISC0)


#define DISP_LATCH_PIN (PORTCbits.RC0)
#define DISP_LATCH_ON() ((DISP_LATCH_PIN) = (BIT_SET))
#define DISP_LATCH_OFF() ((DISP_LATCH_PIN) = (BIT_CLR))
#define DISP_LATCH_TOG() ((DISP_LATCH_PIN) = !
(DISP_LATCH_PIN))
#define DISP_LATCH_CHK() (PORTCbits.RC0)

#define DISP_A_DIR (TRISCbits.TRISC3)


#define DISP_A_PIN (PORTCbits.RC3)
#define DISP_A_ON() ((DISP_A_PIN) =
(BIT_SET))
#define DISP_A_OFF() ((DISP_A_PIN) = (BIT_CLR))
#define DISP_A_TOG() ((DISP_A_PIN) = !
(DISP_A_PIN))
#define DISP_A_CHK() (PORTCbits.RC3)

#define DISP_B_DIR (TRISCbits.TRISC4)


#define DISP_B_PIN (PORTCbits.RC4)
#define DISP_B_ON() ((DISP_B_PIN) =
(BIT_SET))
#define DISP_B_OFF() ((DISP_B_PIN) = (BIT_CLR))
#define DISP_B_TOG() ((DISP_B_PIN) = !
(DISP_B_PIN))
#define DISP_B_CHK() (PORTCbits.RC4)

#define DISP_OE_DIR (TRISCbits.TRISC1)


#define DISP_OE_PIN (PORTCbits.RC1)
#define DISP_OE_ON() ((DISP_OE_PIN) = (BIT_SET))
#define DISP_OE_OFF() ((DISP_OE_PIN) = (BIT_CLR))
#define DISP_OE_TOG() ((DISP_OE_PIN) = !
(DISP_OE_PIN))
#define DISP_OE_CHK() (PORTCbits.RC1)
#define DISP_MAX_CHARS (96)
#ifdef DISP_USE_MONOSPACE_FONT
#define DISP_CHAR_WIDTH (17)
#else
#define DISP_CHAR_WIDTH (33)
#endif
#define DISP_MAX_MSG_SIZE (96)

#if DISP_PANELS == 1U
#define DISP_ROW_SIZE (2)
#define DISP_COL_SIZE (32)
#elif DISP_PANELS == 2U
#define DISP_ROW_SIZE (2)
#define DISP_COL_SIZE (64)
#elif DISP_PANELS == 3U
#define DISP_ROW_SIZE (2)
#define DISP_COL_SIZE (96)
#elif DISP_PANELS == 4U
#define DISP_ROW_SIZE (2)
#define DISP_COL_SIZE (128)
#endif

/*
* Global variables
*/
#ifdef DISP_USE_MONOSPACE_FONT
static const uint8_t lookup[DISP_MAX_CHARS][DISP_CHAR_WIDTH] = {
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' '
0x02, 0xFF, 0x1B, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char !
0x05, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00,
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char "
0x07, 0xB0, 0x01, 0xB0, 0x19, 0xFC, 0x07, 0xB3, 0x19,
0xFC, 0x07, 0xB3, 0x01, 0xB0, 0x01, 0x00, 0x00, // Code for char #
0x07, 0x3C, 0x06, 0x7E, 0x0C, 0x66, 0x0C, 0xFF, 0x1F,
0x66, 0x0C, 0xE6, 0x0F, 0xCC, 0x07, 0x00, 0x00, // Code for char $
0x07, 0x0C, 0x00, 0x0C, 0x18, 0xC0, 0x1F, 0xFC, 0x07,
0x3F, 0x00, 0x03, 0x06, 0x00, 0x06, 0x00, 0x00, // Code for char %
0x07, 0xBE, 0x0F, 0xFF, 0x1F, 0x63, 0x18, 0xFF, 0x1F,
0xDE, 0x0F, 0x00, 0x07, 0x80, 0x0D, 0x00, 0x00, // Code for char &
0x02, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char '
0x05, 0xE0, 0x00, 0xF8, 0x03, 0x1E, 0x0F, 0x07, 0x1C,
0x03, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char (
0x05, 0x03, 0x18, 0x07, 0x1C, 0x1E, 0x0F, 0xF8, 0x03,
0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char )
0x06, 0xB8, 0x01, 0xB0, 0x00, 0xFC, 0x03, 0xFC, 0x03,
0xB0, 0x00, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char *
0x06, 0x60, 0x00, 0x60, 0x00, 0xFC, 0x03, 0xFC, 0x03,
0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char +
0x02, 0x00, 0x18, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ,
0x06, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00,
0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char -
0x02, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char .
0x05, 0x00, 0x18, 0xC0, 0x1F, 0xFC, 0x07, 0x3F, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char /
0x07, 0xFE, 0x0F, 0xFF, 0x1F, 0x83, 0x19, 0xE3, 0x18,
0x33, 0x18, 0xFF, 0x1F, 0xFE, 0x0F, 0x00, 0x00, // Code for char 0
0x07, 0x00, 0x18, 0x06, 0x18, 0x06, 0x18, 0xFF, 0x1F,
0xFF, 0x1F, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, // Code for char 1
0x07, 0x06, 0x1E, 0x07, 0x1F, 0x83, 0x19, 0xC3, 0x18,
0x63, 0x18, 0x3F, 0x18, 0x1E, 0x18, 0x00, 0x00, // Code for char 2
0x07, 0x06, 0x0C, 0x07, 0x1C, 0x63, 0x18, 0x63, 0x18,
0x63, 0x18, 0xFF, 0x1F, 0xBE, 0x0F, 0x00, 0x00, // Code for char 3
0x07, 0x00, 0x07, 0xC0, 0x07, 0xF0, 0x06, 0x3C, 0x06,
0x0F, 0x06, 0x83, 0x1F, 0x80, 0x1F, 0x00, 0x00, // Code for char 4
0x07, 0x7F, 0x0C, 0x7F, 0x1C, 0x63, 0x18, 0x63, 0x18,
0x63, 0x18, 0xE3, 0x1F, 0xC3, 0x0F, 0x00, 0x00, // Code for char 5
0x07, 0xE0, 0x0F, 0xF8, 0x1F, 0x7E, 0x18, 0x66, 0x18,
0x63, 0x18, 0xE3, 0x1F, 0xC0, 0x0F, 0x00, 0x00, // Code for char 6
0x07, 0x07, 0x00, 0x07, 0x18, 0x03, 0x1E, 0x83, 0x07,
0xE3, 0x01, 0x7F, 0x00, 0x1F, 0x00, 0x00, 0x00, // Code for char 7
0x07, 0xBE, 0x0F, 0xFF, 0x1F, 0x63, 0x18, 0x63, 0x18,
0x63, 0x18, 0xFF, 0x1F, 0xBE, 0x0F, 0x00, 0x00, // Code for char 8
0x07, 0x7E, 0x00, 0xFF, 0x18, 0xC3, 0x18, 0xC3, 0x0C,
0xC3, 0x0F, 0xFF, 0x03, 0xFE, 0x00, 0x00, 0x00, // Code for char 9
0x02, 0x60, 0x18, 0x60, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char :
0x02, 0x60, 0x18, 0x60, 0x78, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ;
0x06, 0x40, 0x00, 0xE0, 0x00, 0xF0, 0x01, 0xB8, 0x03,
0x1C, 0x07, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, // Code for char <
0x07, 0x98, 0x01, 0x98, 0x01, 0x98, 0x01, 0x98, 0x01,
0x98, 0x01, 0x98, 0x01, 0x98, 0x01, 0x00, 0x00, // Code for char =
0x06, 0x0C, 0x06, 0x1C, 0x07, 0xB8, 0x03, 0xF0, 0x01,
0xE0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char >
0x07, 0x06, 0x00, 0x07, 0x1B, 0x83, 0x1B, 0xC3, 0x00,
0x63, 0x00, 0x3F, 0x00, 0x1E, 0x00, 0x00, 0x00, // Code for char ?
0x07, 0xFE, 0x0F, 0x07, 0x18, 0xF3, 0x13, 0xFB, 0x17,
0x0B, 0x16, 0xFF, 0x07, 0xFE, 0x07, 0x00, 0x00, // Code for char @
0x07, 0xFE, 0x1F, 0xFF, 0x1F, 0x63, 0x00, 0x63, 0x00,
0x63, 0x00, 0xFF, 0x1F, 0xFE, 0x1F, 0x00, 0x00, // Code for char A
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x18, 0x63, 0x18,
0x63, 0x18, 0xFF, 0x1F, 0xBE, 0x0F, 0x00, 0x00, // Code for char B
0x07, 0xFE, 0x0F, 0xFF, 0x1F, 0x03, 0x18, 0x03, 0x18,
0x03, 0x18, 0x07, 0x1C, 0x06, 0x0C, 0x00, 0x00, // Code for char C
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x03, 0x18, 0x03, 0x18,
0x03, 0x18, 0xFF, 0x1F, 0xFE, 0x0F, 0x00, 0x00, // Code for char D
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x18, 0x63, 0x18,
0x63, 0x18, 0x63, 0x18, 0x03, 0x18, 0x00, 0x00, // Code for char E
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x00, 0x63, 0x00,
0x63, 0x00, 0x63, 0x00, 0x03, 0x00, 0x00, 0x00, // Code for char F
0x07, 0xFE, 0x0F, 0xFF, 0x1F, 0x03, 0x18, 0x03, 0x18,
0x63, 0x18, 0xE7, 0x1F, 0xE6, 0x1F, 0x00, 0x00, // Code for char G
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x60, 0x00, 0x60, 0x00,
0x60, 0x00, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x00, // Code for char H
0x06, 0x03, 0x18, 0x03, 0x18, 0xFF, 0x1F, 0xFF, 0x1F,
0x03, 0x18, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00, // Code for char I
0x07, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x18, 0x03, 0x18,
0xFF, 0x1F, 0xFF, 0x0F, 0x03, 0x00, 0x00, 0x00, // Code for char J
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x60, 0x00, 0xF8, 0x01,
0x9E, 0x07, 0x07, 0x1E, 0x01, 0x18, 0x00, 0x00, // Code for char K
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x18, 0x00, 0x18,
0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, // Code for char L
0x07, 0xFF, 0x1F, 0xFE, 0x1F, 0x18, 0x00, 0x70, 0x00,
0x18, 0x00, 0xFE, 0x1F, 0xFF, 0x1F, 0x00, 0x00, // Code for char M
0x07, 0xFF, 0x1F, 0xFE, 0x1F, 0x38, 0x00, 0xE0, 0x00,
0x80, 0x03, 0xFF, 0x0F, 0xFF, 0x1F, 0x00, 0x00, // Code for char N
0x07, 0xFE, 0x0F, 0xFF, 0x1F, 0x03, 0x18, 0x03, 0x18,
0x03, 0x18, 0xFF, 0x1F, 0xFE, 0x0F, 0x00, 0x00, // Code for char O
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x00, 0x63, 0x00,
0x63, 0x00, 0x7F, 0x00, 0x3E, 0x00, 0x00, 0x00, // Code for char P
0x07, 0xFE, 0x03, 0xFF, 0x07, 0x03, 0x06, 0x83, 0x0F,
0x03, 0x1E, 0xFF, 0x17, 0xFE, 0x13, 0x00, 0x00, // Code for char Q
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x00, 0xE3, 0x00,
0xE3, 0x03, 0x7F, 0x1F, 0x3E, 0x1C, 0x00, 0x00, // Code for char R
0x07, 0x3E, 0x0C, 0x7F, 0x1C, 0x63, 0x18, 0x63, 0x18,
0x63, 0x18, 0xE7, 0x1F, 0xC6, 0x0F, 0x00, 0x00, // Code for char S
0x06, 0x03, 0x00, 0x03, 0x00, 0xFF, 0x1F, 0xFF, 0x1F,
0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T
0x07, 0xFF, 0x0F, 0xFF, 0x1F, 0x00, 0x18, 0x00, 0x18,
0x00, 0x18, 0xFF, 0x1F, 0xFF, 0x0F, 0x00, 0x00, // Code for char U
0x07, 0xFF, 0x03, 0xFF, 0x07, 0x00, 0x0E, 0x00, 0x1C,
0x00, 0x0E, 0xFF, 0x07, 0xFF, 0x03, 0x00, 0x00, // Code for char V
0x07, 0xFF, 0x1F, 0xFF, 0x0F, 0x00, 0x03, 0xC0, 0x01,
0x00, 0x03, 0xFF, 0x0F, 0xFF, 0x1F, 0x00, 0x00, // Code for char W
0x07, 0x07, 0x1C, 0x1F, 0x1F, 0xB8, 0x03, 0xE0, 0x00,
0xB8, 0x03, 0x1F, 0x1F, 0x07, 0x1C, 0x00, 0x00, // Code for char X
0x07, 0x07, 0x00, 0x1F, 0x00, 0x38, 0x00, 0xE0, 0x1F,
0xF8, 0x1F, 0x1F, 0x00, 0x07, 0x00, 0x00, 0x00, // Code for char Y
0x07, 0x03, 0x1C, 0x03, 0x1F, 0x83, 0x1B, 0xE3, 0x18,
0x3B, 0x18, 0x1F, 0x18, 0x07, 0x18, 0x00, 0x00, // Code for char Z
0x04, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [
0x05, 0x03, 0x00, 0x3F, 0x00, 0xFC, 0x07, 0xC0, 0x1F,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash
0x04, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ]
0x07, 0x60, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00,
0x38, 0x00, 0x70, 0x00, 0x60, 0x00, 0x00, 0x00, // Code for char ^
0x07, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18,
0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, // Code for char _
0x04, 0x03, 0x00, 0x03, 0x00, 0x06, 0x00, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char `
0x07, 0x00, 0x0E, 0x40, 0x1F, 0x60, 0x19, 0x60, 0x19,
0x60, 0x19, 0xE0, 0x1F, 0xE0, 0x1F, 0x00, 0x00, // Code for char a
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x60, 0x18, 0x60, 0x18,
0x60, 0x18, 0xE0, 0x1F, 0xC0, 0x0F, 0x00, 0x00, // Code for char b
0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0x60, 0x18, 0x60, 0x18,
0x60, 0x18, 0xE0, 0x1C, 0xC0, 0x0C, 0x00, 0x00, // Code for char c
0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0x60, 0x18, 0x60, 0x18,
0x60, 0x18, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x00, // Code for char d
0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0x60, 0x1A, 0x60, 0x1A,
0x60, 0x1A, 0xE0, 0x1B, 0xC0, 0x09, 0x00, 0x00, // Code for char e
0x07, 0x60, 0x00, 0xFE, 0x1F, 0xFF, 0x1F, 0x63, 0x00,
0x63, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char f
0x07, 0xC0, 0x4F, 0xE0, 0xDF, 0x60, 0xD8, 0x60, 0xD8,
0x60, 0xD8, 0xE0, 0xFF, 0xC0, 0x7F, 0x00, 0x00, // Code for char g
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x60, 0x00, 0x60, 0x00,
0x60, 0x00, 0xE0, 0x1F, 0xC0, 0x1F, 0x00, 0x00, // Code for char h
0x06, 0x00, 0x18, 0x60, 0x18, 0xEC, 0x1F, 0xEC, 0x1F,
0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, // Code for char i
0x06, 0x00, 0x60, 0x00, 0xE0, 0x60, 0xC0, 0x60, 0xC0,
0xEC, 0xFF, 0xEC, 0x7F, 0x00, 0x00, 0x00, 0x00, // Code for char j
0x07, 0xFF, 0x1F, 0xFF, 0x1F, 0x80, 0x01, 0xE0, 0x03,
0x70, 0x06, 0x10, 0x0C, 0x00, 0x18, 0x00, 0x00, // Code for char k
0x05, 0x03, 0x00, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x18,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l
0x07, 0xE0, 0x1F, 0xE0, 0x1F, 0x60, 0x00, 0xC0, 0x1F,
0x60, 0x00, 0xE0, 0x1F, 0xC0, 0x1F, 0x00, 0x00, // Code for char m
0x07, 0xE0, 0x1F, 0xE0, 0x1F, 0x60, 0x00, 0x60, 0x00,
0x60, 0x00, 0xE0, 0x1F, 0xC0, 0x1F, 0x00, 0x00, // Code for char n
0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0x60, 0x18, 0x60, 0x18,
0x60, 0x18, 0xE0, 0x1F, 0xC0, 0x0F, 0x00, 0x00, // Code for char o
0x07, 0xE0, 0xFF, 0xE0, 0xFF, 0x60, 0x18, 0x60, 0x18,
0x60, 0x18, 0xE0, 0x1F, 0xC0, 0x0F, 0x00, 0x00, // Code for char p
0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0x60, 0x18, 0x60, 0x18,
0x60, 0x18, 0xE0, 0xFF, 0xE0, 0xFF, 0x00, 0x00, // Code for char q
0x07, 0xE0, 0x1F, 0xE0, 0x1F, 0xC0, 0x00, 0x60, 0x00,
0x60, 0x00, 0x60, 0x00, 0x40, 0x00, 0x00, 0x00, // Code for char r
0x07, 0xC0, 0x09, 0xE0, 0x1B, 0x60, 0x1B, 0x60, 0x1B,
0x60, 0x1B, 0x60, 0x1F, 0x40, 0x0E, 0x00, 0x00, // Code for char s
0x07, 0x60, 0x00, 0xFF, 0x0F, 0xFF, 0x1F, 0x60, 0x18,
0x60, 0x18, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x00, // Code for char t
0x07, 0xE0, 0x0F, 0xE0, 0x1F, 0x00, 0x18, 0x00, 0x18,
0x00, 0x18, 0xE0, 0x1F, 0xE0, 0x0F, 0x00, 0x00, // Code for char u
0x07, 0xE0, 0x03, 0xE0, 0x07, 0x00, 0x0C, 0x00, 0x18,
0x00, 0x0C, 0xE0, 0x07, 0xE0, 0x03, 0x00, 0x00, // Code for char v
0x07, 0xE0, 0x0F, 0xE0, 0x1F, 0x00, 0x18, 0xE0, 0x0F,
0x00, 0x18, 0xE0, 0x1F, 0xE0, 0x0F, 0x00, 0x00, // Code for char w
0x07, 0x60, 0x18, 0xE0, 0x1C, 0x80, 0x06, 0x00, 0x03,
0x80, 0x06, 0xE0, 0x1C, 0x60, 0x18, 0x00, 0x00, // Code for char x
0x07, 0xE0, 0x47, 0xE0, 0xCF, 0x00, 0xCC, 0x00, 0xCC,
0x00, 0xCC, 0xE0, 0xFF, 0xE0, 0x7F, 0x00, 0x00, // Code for char y
0x07, 0x60, 0x18, 0x60, 0x1C, 0x60, 0x1E, 0x60, 0x1B,
0xE0, 0x19, 0xE0, 0x18, 0x60, 0x18, 0x00, 0x00, // Code for char z
0x06, 0x80, 0x01, 0x8E, 0x71, 0xFF, 0xFF, 0x73, 0xCE,
0x03, 0xC0, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, // Code for char {
0x02, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char |
0x06, 0x03, 0xC0, 0x03, 0xC0, 0x73, 0xCE, 0xFF, 0xFF,
0x8E, 0x71, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char }
0x07, 0x06, 0x00, 0x07, 0x00, 0x03, 0x00, 0x07, 0x00,
0x0E, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x00, 0x00, // Code for char ~
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // // Code for char 128
};
#else
static const uint8_t lookup[DISP_MAX_CHARS][DISP_CHAR_WIDTH] = {
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ' '
0x03, 0xFE, 0x0D, 0xFE, 0x0D, 0xFE, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char !
0x05, 0x3E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x1E, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char "
0x0A, 0x00, 0x03, 0x18, 0x0F, 0xF8, 0x0F, 0xFE, 0x03, 0x1E, 0x03, 0x18,
0x0F, 0xF8, 0x0F, 0xFE, 0x03, 0x1E, 0x03, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char #
0x08, 0x38, 0x06, 0x7C, 0x06, 0x6C, 0x06, 0xFE, 0x0F, 0xFE, 0x0F, 0x6C,
0x06, 0xEC, 0x07, 0xCC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char $
0x0C, 0x3C, 0x00, 0x7E, 0x00, 0x42, 0x08, 0x7E, 0x0E, 0xBC, 0x0F, 0xE0,
0x03, 0xF8, 0x00, 0xBE, 0x07, 0xCE, 0x0F, 0x42, 0x08, 0xC0, 0x0F, 0x80,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char %
0x0B, 0x80, 0x07, 0xDC, 0x0F, 0xFE, 0x0F, 0x7E, 0x0C, 0x66, 0x0C, 0xFE,
0x0C, 0xFE, 0x0F, 0x9C, 0x07, 0xC0, 0x07, 0xC0, 0x0E, 0x40, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char &
0x02, 0x3E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char '
0x07, 0xC0, 0x03, 0xF0, 0x0F, 0xF8, 0x1F, 0x3C, 0x3C, 0x0E, 0x70, 0x06,
0x60, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char (
0x07, 0x02, 0x40, 0x06, 0x60, 0x0E, 0x70, 0x3C, 0x3C, 0xF8, 0x1F, 0xF0,
0x0F, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char )
0x07, 0x10, 0x00, 0x54, 0x00, 0x38, 0x00, 0xFE, 0x00, 0x38, 0x00, 0x54,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char *
0x09, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xF8, 0x07, 0xF8, 0x07, 0xF8,
0x07, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char +
0x03, 0x00, 0x4C, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ,
0x09, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0,
0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char -
0x03, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char .
0x09, 0x00, 0x20, 0x00, 0x38, 0x00, 0x3E, 0x80, 0x0F, 0xE0, 0x03, 0xF8,
0x00, 0x3E, 0x00, 0x0E, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char /
0x08, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0xC6, 0x0C, 0x66, 0x0C, 0xFE,
0x0F, 0xFE, 0x0F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 0
0x07, 0x0C, 0x0C, 0x0C, 0x0C, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00,
0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1
0x08, 0x04, 0x0F, 0x86, 0x0F, 0xC6, 0x0F, 0xC6, 0x0D, 0xE6, 0x0C, 0xFE,
0x0C, 0x7E, 0x0C, 0x3C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 2
0x08, 0x04, 0x06, 0x66, 0x0E, 0x66, 0x0E, 0x66, 0x0C, 0x66, 0x0C, 0xFE,
0x0F, 0xFE, 0x0F, 0xDC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 3
0x0A, 0xE0, 0x01, 0xF0, 0x01, 0xF8, 0x01, 0x9C, 0x01, 0x8E, 0x01, 0xFE,
0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 4
0x08, 0x7E, 0x06, 0x7E, 0x0E, 0x7E, 0x0E, 0x66, 0x0C, 0x66, 0x0C, 0xE6,
0x0F, 0xE6, 0x0F, 0xC6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 5
0x08, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x66, 0x0C, 0x66, 0x0C, 0xE6,
0x0F, 0xE6, 0x0F, 0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 6
0x08, 0x06, 0x00, 0x06, 0x00, 0x86, 0x0F, 0xC6, 0x0F, 0xE6, 0x0F, 0x7E,
0x00, 0x3E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 7
0x08, 0xDC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x66, 0x0C, 0x66, 0x0C, 0xFE,
0x0F, 0xFE, 0x0F, 0xDC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 8
0x08, 0x7C, 0x00, 0xFE, 0x0C, 0xFE, 0x0C, 0xC6, 0x0C, 0xC6, 0x0C, 0xFE,
0x0F, 0xFE, 0x0F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 9
0x03, 0x1C, 0x07, 0x1C, 0x07, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char :
0x03, 0x1C, 0x13, 0x1C, 0x1F, 0x1C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ;
0x06, 0x80, 0x00, 0xC0, 0x01, 0xE0, 0x03, 0x70, 0x07, 0x30, 0x06, 0x10,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char <
0x08, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0xB0,
0x01, 0xB0, 0x01, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char =
0x06, 0x10, 0x04, 0x30, 0x06, 0x70, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char >
0x08, 0x0C, 0x00, 0x0E, 0x00, 0x86, 0x0D, 0xC6, 0x0D, 0xE6, 0x0D, 0x7E,
0x00, 0x3E, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ?
0x0D, 0xE0, 0x01, 0xF8, 0x07, 0x1C, 0x06, 0xE4, 0x0D, 0xF6, 0x0B, 0x1A,
0x0A, 0x0A, 0x0B, 0x8A, 0x09, 0xFA, 0x0B, 0x3E, 0x02, 0x0C, 0x03, 0xFC,
0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char @
0x09, 0xFC, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xC6, 0x00, 0xC6, 0x00, 0xC6,
0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char A
0x09, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x66, 0x0C, 0x66, 0x0C, 0x7E,
0x0C, 0xFE, 0x0F, 0xDC, 0x0F, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char B
0x09, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x06, 0x0C, 0x06, 0x0C, 0x06,
0x0C, 0x0E, 0x0E, 0x0E, 0x0E, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char C
0x09, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x06, 0x0C, 0x06, 0x0C, 0x06,
0x0C, 0xFE, 0x0F, 0xFE, 0x0F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char D
0x09, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x66, 0x0C, 0x66, 0x0C, 0x66,
0x0C, 0x66, 0x0C, 0x66, 0x0C, 0x06, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char E
0x09, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x66, 0x00, 0x66, 0x00, 0x66,
0x00, 0x66, 0x00, 0x66, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char F
0x09, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x06, 0x0C, 0xC6, 0x0C, 0xC6,
0x0C, 0xCE, 0x0F, 0xCE, 0x0F, 0xCC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char G
0x09, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x60, 0x00, 0x60, 0x00, 0x60,
0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char H
0x05, 0x06, 0x0C, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x06, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I
0x07, 0x00, 0x06, 0x00, 0x0E, 0x06, 0x0C, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE,
0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char J
0x09, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xF0, 0x00, 0xF8, 0x01, 0x9C,
0x03, 0x0E, 0x07, 0x06, 0x0E, 0x02, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char K
0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x0C, 0x00, 0x0C, 0x00,
0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char L
0x0B, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x1C, 0x00, 0x38, 0x00, 0x70,
0x00, 0x38, 0x00, 0x1C, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char M
0x0A, 0xFE, 0x0F, 0xFE, 0x0F, 0xFC, 0x0F, 0x78, 0x00, 0xF0, 0x00, 0xE0,
0x01, 0xC0, 0x03, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char N
0x09, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x06, 0x0C, 0x06, 0x0C, 0x06,
0x0C, 0xFE, 0x0F, 0xFE, 0x0F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char O
0x09, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xC6, 0x00, 0xC6, 0x00, 0xC6,
0x00, 0xFE, 0x00, 0xFE, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char P
0x0A, 0xFC, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x06, 0x0C, 0x06, 0x0C, 0x06,
0x0C, 0xFE, 0x1F, 0xFE, 0x3F, 0xFC, 0x37, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Q
0x09, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xC6, 0x00, 0xC6, 0x00, 0xC6,
0x01, 0xFE, 0x0F, 0xFE, 0x0F, 0x7C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char R
0x08, 0x3C, 0x0C, 0x7E, 0x0C, 0x7E, 0x0C, 0x66, 0x0C, 0x66, 0x0C, 0xE6,
0x0F, 0xE6, 0x0F, 0xC6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char S
0x09, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE,
0x0F, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T
0x09, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x0C, 0x00, 0x0C, 0x00,
0x0C, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char U
0x09, 0xFE, 0x00, 0xFE, 0x03, 0xFE, 0x07, 0x00, 0x0F, 0x00, 0x0C, 0x00,
0x0F, 0xFE, 0x07, 0xFE, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char V
0x0B, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xC0,
0x01, 0x80, 0x03, 0x00, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char W
0x09, 0x0E, 0x0E, 0x1E, 0x0F, 0xBE, 0x0F, 0xF0, 0x01, 0xE0, 0x00, 0xF0,
0x01, 0xBE, 0x0F, 0x1E, 0x0F, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char X
0x09, 0x1E, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0xF0, 0x0F, 0xE0, 0x0F, 0xF0,
0x0F, 0x7E, 0x00, 0x3E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Y
0x09, 0x06, 0x0E, 0x06, 0x0F, 0x86, 0x0F, 0xC6, 0x0D, 0xE6, 0x0C, 0x76,
0x0C, 0x3E, 0x0C, 0x1E, 0x0C, 0x0E, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Z
0x05, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x06, 0x60, 0x06, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [
0x09, 0x02, 0x00, 0x0E, 0x00, 0x3E, 0x00, 0xF8, 0x00, 0xE0, 0x03, 0x80,
0x0F, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char
// BackSlash
0x05, 0x06, 0x60, 0x06, 0x60, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ]
0x08, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x1C,
0x00, 0x38, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ^
0x09, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00,
0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char _
0x05, 0x02, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char `
0x08, 0x00, 0x07, 0xA0, 0x0F, 0xB0, 0x0F, 0xB0, 0x0D, 0xB0, 0x0D, 0xF0,
0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char a
0x08, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x30, 0x0C, 0x30, 0x0C, 0xF0,
0x0F, 0xF0, 0x0F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char b
0x08, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0x30, 0x0C, 0x30, 0x0C, 0x70,
0x0E, 0x70, 0x0E, 0x60, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char c
0x08, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0x30, 0x0C, 0x30, 0x0C, 0xFE,
0x0F, 0xFE, 0x0F, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char d
0x08, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0xB0, 0x0D, 0xB0, 0x0D, 0xF0,
0x0D, 0xF0, 0x0D, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char e
0x07, 0x30, 0x00, 0x30, 0x00, 0xFC, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x36,
0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f
0x08, 0xE0, 0x27, 0xF0, 0x6F, 0xF0, 0x6F, 0x30, 0x6C, 0x30, 0x6C, 0xF0,
0x7F, 0xF0, 0x7F, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char g
0x08, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x30, 0x00, 0x30, 0x00, 0xF0,
0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char h
0x05, 0x30, 0x0C, 0xF6, 0x0F, 0xF6, 0x0F, 0xF6, 0x0F, 0x00, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i
0x06, 0x00, 0x20, 0x00, 0x60, 0x30, 0x60, 0xF6, 0x7F, 0xF6, 0x7F, 0xF6,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j
0x08, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0xC0, 0x01, 0xE0, 0x03, 0x70,
0x07, 0x30, 0x0E, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k
0x05, 0x06, 0x0C, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l
0x0D, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x30, 0x00, 0x30, 0x00, 0xF0,
0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x30, 0x00, 0x30, 0x00, 0xF0, 0x0F, 0xF0,
0x0F, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char m
0x08, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x30, 0x00, 0x30, 0x00, 0xF0,
0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char n
0x08, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0x30, 0x0C, 0x30, 0x0C, 0xF0,
0x0F, 0xF0, 0x0F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char o
0x08, 0xF0, 0x7F, 0xF0, 0x7F, 0xF0, 0x7F, 0x30, 0x0C, 0x30, 0x0C, 0xF0,
0x0F, 0xF0, 0x0F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char p
0x08, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0x30, 0x0C, 0x30, 0x0C, 0xF0,
0x7F, 0xF0, 0x7F, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char q
0x08, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x30, 0x00, 0x30, 0x00, 0x70,
0x00, 0x70, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char r
0x08, 0xE0, 0x0C, 0xF0, 0x0D, 0xF0, 0x0D, 0xB0, 0x0D, 0xB0, 0x0D, 0xB0,
0x0F, 0xB0, 0x0F, 0x30, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s
0x08, 0x30, 0x00, 0x30, 0x00, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x0F, 0x30,
0x0C, 0x30, 0x0C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t
0x08, 0xF0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x0C, 0x00, 0x0C, 0xF0,
0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char u
0x09, 0x30, 0x00, 0xF0, 0x01, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x0E, 0xC0,
0x0F, 0xF0, 0x03, 0xF0, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char v
0x0B, 0xF0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x07, 0x80, 0x03, 0xC0,
0x01, 0x80, 0x03, 0x00, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char w
0x09, 0x10, 0x0C, 0x30, 0x0E, 0x70, 0x0F, 0xE0, 0x03, 0xC0, 0x01, 0xE0,
0x03, 0x70, 0x0F, 0x30, 0x0E, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char x
0x08, 0xF0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x4E, 0x00, 0x67, 0xF0,
0x7F, 0xF0, 0x3F, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char y
0x07, 0x30, 0x0E, 0x30, 0x0F, 0xB0, 0x0F, 0xF0, 0x0D, 0xF0, 0x0C, 0x70,
0x0C, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char z
0x06, 0x80, 0x01, 0xF8, 0x1F, 0xFC, 0x3F, 0x7E, 0x7E, 0x06, 0x60, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char {
0x03, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char |
0x06, 0x02, 0x40, 0x06, 0x60, 0x7E, 0x7E, 0xFC, 0x3F, 0xF8, 0x1F, 0x80,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char }
0x09, 0xE0, 0x00, 0x70, 0x00, 0x30, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xC0,
0x01, 0x80, 0x01, 0xC0, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ~
0x08, 0xFE, 0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x06, 0x0C, 0x06, 0x0C, 0xFE,
0x0F, 0xFE, 0x0F, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char 128
};
#endif

static const uint8_t *p_string;

static uint8_t disp_busy;


static uint8_t should_scroll;
static uint8_t disp_reload;
static uint8_t init_pos, init_col;

static uint8_t buffer[DISP_ROW_SIZE][DISP_COL_SIZE];

/*
* Private function prototypes
*/

/*
* Function definitions
*/
static void display_update(void) {
static uint8_t i, x_pos, w, blanks, disp_index, char_width;

if (disp_busy) {
return;
}

if (should_scroll) {
if (timer_0_timeout) {
return;
}

timer_0_timeout = DISP_SCROLL_SPEED << 3;


}

if (disp_reload) {
disp_reload = BIT_CLR;
init_col = 0;

i = 0;
w = 0;
blanks = DISP_COL_SIZE;

if (should_scroll) {
x_pos = 0;
}
else {
x_pos = init_pos;
}
}

if (!should_scroll) {
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
return;
}
}

if (!w) {
if (*(p_string + i)) {
disp_index = *(p_string + i++);
disp_index -= 32;

char_width = lookup[disp_index][0] + 1;
char_width <<= 1; // Multiply by 2.
}
else if (should_scroll) {
buffer[0][x_pos] = 0;
buffer[1][x_pos] = 0;

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

init_col++;
#if DISP_PANELS == 3U
if (init_col & 32 && init_col & 64) {
#else
if (init_col & DISP_COL_SIZE) {
#endif
init_col = 0;
}

blanks--;
if (!blanks) {
disp_reload = BIT_SET;
}

return;
}
}

buffer[1][x_pos] = lookup[disp_index][++w];
buffer[0][x_pos] = lookup[disp_index][++w];

if (w >= char_width) {
w = 0;
}

x_pos++;
if (should_scroll) {
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

init_col++;
#if DISP_PANELS == 3U
if (init_col & 32 && init_col & 64) {
#else
if (init_col & DISP_COL_SIZE) {
#endif
init_col = 0;
}
}
}

void init_display(void) {
// Initialize display pins.
DISP_DATA_DIR = DIR_OP;
DISP_CLOCK_DIR = DIR_OP;
DISP_LATCH_DIR = DIR_OP;
DISP_A_DIR = DIR_OP;
DISP_B_DIR = DIR_OP;
DISP_OE_DIR = DIR_OP;

// Initialize initial states of output pins.


DISP_DATA_OFF();
DISP_CLOCK_OFF();
DISP_LATCH_OFF();
DISP_A_OFF();
DISP_B_OFF();
DISP_OE_OFF();

// Turn off display.

// Initialize global variables in this file.


p_string = (void *)0;

disp_busy = BIT_SET;
should_scroll = BIT_CLR;
disp_reload = BIT_SET;
init_pos = 0;
init_col = 0;

// Initialize outside variables.


timer_0_timeout = DISP_SCROLL_SPEED << 3;
}

void display_string(uint8_t col, const uint8_t *p_msg) {


if (!col) {
return;
}

disp_busy = BIT_SET;
col--;

init_pos = 0;
while (init_pos < col) {
buffer[0][init_pos] = 0;
buffer[1][init_pos++] = 0;
}

p_string = p_msg;
should_scroll = BIT_CLR;
disp_reload = BIT_SET;

disp_busy = BIT_CLR;
}

void display_scroll(const uint8_t *p_msg) {


disp_busy = BIT_SET;
p_string = p_msg;

should_scroll = BIT_SET;
disp_reload = BIT_SET;

disp_busy = BIT_CLR;
}

void display_isr(void) {
static uint8_t mux_ch = 0;
uint8_t col, x_pos, mask, bit_mask;

display_update();
// Disable MUX. Hence no output.
DISP_OE_OFF();

// Pick MUX channel.


if (mux_ch == 0) {
DISP_A_OFF();
DISP_B_OFF();

mask = 0x10;
}
else if (mux_ch == 1) {
DISP_A_ON();
DISP_B_OFF();

mask = 0x20;
}
else if (mux_ch == 2) {
DISP_A_OFF();
DISP_B_ON();

mask = 0x40;
}
else if (mux_ch == 3) {
DISP_A_ON();
DISP_B_ON();

mask = 0x80;
}

// Select next MUX channel.


mux_ch = (mux_ch + 1) & 0x03;

// Send data to 74HC575.


if (should_scroll) {
col = init_col;

do {
x_pos = col;
bit_mask = mask;

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}
if (buffer[0][x_pos] & bit_mask) {
DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos = col;
bit_mask >>= 4;

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();
x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[0][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos = col;
bit_mask = mask;

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos = col;
bit_mask >>= 4;

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}
if (buffer[1][x_pos] & bit_mask) {
DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

x_pos++;
#if DISP_PANELS == 3U
if (x_pos & 32 && x_pos & 64) {
#else
if (x_pos & DISP_COL_SIZE) {
#endif
x_pos = 0;
}

if (buffer[1][x_pos] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();
col += 8;
if (col >= DISP_COL_SIZE) {
col -= DISP_COL_SIZE;
}
} while (col != init_col);
}
else {
for (col = 0; col < DISP_COL_SIZE; col += 8) {
bit_mask = mask;

if (buffer[0][col + 0] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 1] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 2] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 3] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 4] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 5] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 6] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 7] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

bit_mask >>= 4;

if (buffer[0][col + 0] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 1] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 2] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 3] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 4] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 5] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 6] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[0][col + 7] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

bit_mask = mask;

if (buffer[1][col + 0] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 1] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 2] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 3] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 4] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 5] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 6] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 7] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

bit_mask >>= 4;

if (buffer[1][col + 0] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 1] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 2] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 3] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 4] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 5] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();

if (buffer[1][col + 6] & bit_mask) {


DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();
if (buffer[1][col + 7] & bit_mask) {
DISP_DATA_OFF();
}
else {
DISP_DATA_ON();
}
DISP_CLOCK_ON();
DISP_CLOCK_OFF();
}
}

// Commit data to 74HC595.


DISP_LATCH_ON();
DISP_LATCH_OFF();

// Enable MUX.
DISP_OE_ON();
}

También podría gustarte