Hay algunas cosas que se podrian hacer de otra forma...
1- Tener un array "abecedario", se podria quitar directamente...
Las letras minúsculas en su codificación ASCII son todos números que comienza en el 97 (0x61) y va hasta el 122 (0x7A), entonces en ves de hacer:
if(!input(pin_a0)) // Aumenta Letra
{
letra++;
if(letra > 25) letra=0;
lcd_gotoxy
(1,2); printf(lcd_putc
,"Letra: %c",abecedario
[letra
]); delay_ms(400);
}
Podemos hacer:
if(!input(pin_a0)) // Aumenta Letra
{
letra++;
if(letra > 122) letra=97;
lcd_gotoxy
(1,2); printf(lcd_putc
,"Letra: %c",letra
); delay_ms(400);
}
Y eliminamos una variable....
2- Una cosa que leo es sobre estar pensando en el caracter nulo de "abecedario"... ¿Para que?
Lo que debería estar corroborando es el carácter nulo de otro array que sea "temporal"
La idea es que vaya llenando este array temporal..
Este array serviría para mostrarlo, algo mucho mas rápido que hacerlo tomando todos los datos de la eeprom.
En caso de grabarlo, solo se grabaría una sola vez todo junto y no carácter por carácter. Previo al grabado se pone un carácter nulo al final y llama a la función.
En la lectura, simplemente se lee hasta el carácter nulo en la EEPROM. Y la función de lectura debería poner el carácter nulo como seguridad.
Crear un par de funciones para esto (sin punteros, y considerando globales las variables para que sea mas sencillo para el usuario):
char temp_pass[11]; // Supongo que son 10 caracteres máximo
void escribirPass(cantidad){
int8 contador = 0;
while(temp_pass[contador])
write_eeprom(contador++, temp_pass[contador]);
write_eeprom(contador, '\0');
}
void leerPass(){
int8 contador = 0;
do{
temp_pass[contador] = read_eeprom(contador);
if(contador >= sizeof temp_pass) contador++; break;
while(temp_pass[++contador]);
temp_pass[contador] = '\0';
}