unsigned char contrasena[4] = {1,2,3,4}; //Contraseña inicia con los valores 1234Ya que tomar el valor y actuar usualmente es repetitivo, observaras para tu caso que para a,b,c y d haces exactamente lo mismo.. Entonces podriamos poner un for y compactar eso.reint0:Intenta evitar hacer saltos con un goto, C provee las herramientas suficientes como para hacerlo sin esto.. Muy pocos casos vi donde se ha usado. Y hablando de codigos muchos mas complejos
#include <16f877a.h>
#fuses XT,NOWDT
#use delay (clock = 4M)
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
#include <kbd1.c>
void main(void)
{
kbd_init();
unsigned char contrasena_detectada[4] = {0,0,0,0}; // Donde va a ir la contraseña ingresada
const char contrasena[4] = {1,2,3,4}; // Contraseña guardada y a comparar
char letra = 0; // Variable donde voy a almacenar lo leido del teclado
char letra_anterior = 0; // Variable que mantiene el valor de la ultima tecla presionada, asi no cuenta 2 veces lo mismo
int1 contra_correcta = false; // Variable para saber si luego de la comparacion fue correcto o no lo ingresado
unsigned char indice = 0;
setup()
while(1)
{
// Tomamos los valores!
while(1)
{
//Guardamos el valor en unavariable
letra = kbd_getc();
// Revisamos que hay algo presionado, y que sea distinto a lo detectado anteriormente
if( letra != 0 && letra != letra_anterior)
{
// Guardo contraseña
contrasena_detectada[indice];
// Aumento el indice
indice++;
// Entraron todos los valores?
if(indice >= sizeof(contrasena));
{
//Salgo del while
break;
}
}
// Guardo el ultimo valor ingresado asi si alguien mantiene presionado el boton no cuenta 2 veces
letra_anterior = letra;
}
// Ya tengo guardado las cosas, ahora a comparar
contra_correcta = true;
for(indice = 0; indice < sizeof(contrasena); indice++)
{
if(contrasena[indice] != contrasena_detectada[indice])
{
contra_correcta = false;
break;
}
}
// Actuo ahora que se el resultado
if(contra_correcta == true)
{
}
}
}