#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
// Tabla de caracteres personalizada (P, A, O, L, espacio, A, N, D, R, E)
const uint8_t nombre[] PROGMEM = {
0x73, // P
0x77, // A
0x3F, // O
0x38, // L
0x77, // A
0x00, // Espacio
0x77, // A
0x54, // N
0x5E, // D
0x50, // R
0x79, // E
0x77, // A
0x00 // Espacio (final)
};
#define TOTAL_CARACTERES 12 // Longitud del nombre + espacios
int main() {
uint8_t posicion = 0;
DDRB = 0x00; // PORTB como entrada (botón en PB0)
PORTB = 0xFF; // Habilitar pull-ups
DDRD = 0xFF; // PORTD como salida (display)
PORTD = pgm_read_byte(&nombre[0]); // Mostrar primera letra
while(1) {
if (!(PINB & (1 << PB0))) { // Si se presiona el botón
_delay_ms(50); // Anti-rebote
if (!(PINB & (1 << PB0))) { // Verificar nuevamente
posicion++; // Avanzar a la siguiente posición
if (posicion >= TOTAL_CARACTERES) { // Si llega al final
PORTD = 0x00; // Apagar display
_delay_ms(1000); // Esperar 1 segundo
posicion = 0; // Reiniciar
}
PORTD = pgm_read_byte(&nombre[posicion]); // Mostrar carácter
_delay_ms(250); // Retardo entre pulsaciones
}
}
}
}