Tengo una placa con una pantalla de 7 segmentos controlada por un AVR. Necesito rotar los caracteres de la pantalla en el firmware, para que la pantalla se lea correctamente cuando se gira físicamente 180 grados.
Actualmente, la pantalla tiene una salida definida por:
#define SEVEN_SEGMENT_PATTERN_0 0x7B
#define SEVEN_SEGMENT_PATTERN_1 0x09
#define SEVEN_SEGMENT_PATTERN_2 0xB3
#define SEVEN_SEGMENT_PATTERN_3 0x9B
#define SEVEN_SEGMENT_PATTERN_4 0xC9
#define SEVEN_SEGMENT_PATTERN_5 0xDA
#define SEVEN_SEGMENT_PATTERN_6 0xFa
#define SEVEN_SEGMENT_PATTERN_7 0x0B
#define SEVEN_SEGMENT_PATTERN_8 0xFB
#define SEVEN_SEGMENT_PATTERN_9 0xDB
#define SEVEN_SEGMENT_PATTERN_A 0xEB
#define SEVEN_SEGMENT_PATTERN_B 0xF8
#define SEVEN_SEGMENT_PATTERN_C 0x72
#define SEVEN_SEGMENT_PATTERN_D 0xB9
#define SEVEN_SEGMENT_PATTERN_E 0xF2
#define SEVEN_SEGMENT_PATTERN_F 0xE2
#define SEVEN_SEGMENT_PATTERN_G 0xdb
#define SEVEN_SEGMENT_PATTERN_H 0xE9
#define SEVEN_SEGMENT_PATTERN_I 0x09
#define SEVEN_SEGMENT_PATTERN_J 0x19
#define SEVEN_SEGMENT_PATTERN_L 0x70
#define SEVEN_SEGMENT_PATTERN_O 0x7b
#define SEVEN_SEGMENT_PATTERN_P 0xe3
#define SEVEN_SEGMENT_PATTERN_R 0xa0
#define SEVEN_SEGMENT_PATTERN_S 0xda
#define SEVEN_SEGMENT_PATTERN_U 0x79
#define SEVEN_SEGMENT_PATTERN_DOT 0x04
Por supuesto, podría usar esto para extraer el pinout de la pantalla y descubrir manualmente las nuevas definiciones para los caracteres volteados. Sin embargo, esto llevaría mucho tiempo y creo que debe haber una manera más inteligente.
Algunos permanecerían igual cuando se volteaban, como SEVEN_SEGMENT_PATTERN_0
. Algunos serán fáciles de voltear si supiera el pinout, como SEVEN_SEGMENT_PATTERN_1
.
¿Hay algún algoritmo inteligente o algo que pueda ayudarme a calcular los valores invertidos?