Teclado hexadecimal y pic 16f877a (requerimiento de clave)

#1
HOLA NECESITO UNA AYUDA CON UN PROGRAMA EN LENGUAJE C-
LO QUE REQUIERE EL PROGRAMA ES EL ALMACENAMIENTO DE CLAVE TENGO EL PROGRAMA HASTA DONDE ME PIDE QUE DIGITE LA CLAVE Y DIGA QUE ES INCORRECTA PERO ME FALTA DONDE EL USUARIO PUEDA CAMBIAR LA CLAVE POR SI SE LE OLVIDA ESTA CLAVE DE VE EN LA LCD. AGRADECERIA MUCHO SU AYUDA!!! ES MUY URGENTE :unsure:


# include <16f877a.h>
#use delay (clock = 4000000)

#include <lcd.c>
#define use_portb_kbd TRUE
#include <kbd.c>
#rom 0x2100={'7','3','2','4'}
unsigned long int adc;

main (){


char k;
int i;
int c=0;
char data[4],clave[4];
lcd_init();
kbd_init();
port_b_pullups(1);
while(true){
i=0;
printf(lcd_putc,"\fBienvenido\n");
delay_ms(1000);
printf(lcd_putc,"\ningrese clave\n");
delay_ms(1000);
printf( lcd_putc ,"\fpulsar tecla 1\n");
while(i<=3){
k=kbd_getc();

if (k!=0)
{data =k;
i++;
printf(lcd_putc,"\fpulsar tecla %u\n",i+1);
}
}
c++;
if (c==3){
while(1){
printf(lcd_putc,"\fbloqueado\n");
delay_ms(1000);
printf(lcd_putc,"\freinicie\n");
delay_ms(1000);
}
}



for (i=0;i<=3;i++){
clave=read_eeprom(i);}
if((data[0]==clave[0])&& (data[1]==clave[1]) && (data[2]==clave[2])&& (data[3]==clave[3])){


while(1){
printf(lcd_putc,"\fok\n");
setup_port_a(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0); // selecciona el canal 0 solamente
adc = read_adc();
lcd_gotoxy(1,1);
printf(lcd_putc, "dec=%lu",adc);
lcd_gotoxy(1,2);
printf(lcd_putc,"Hex=%lx",adc);


set_adc_channel(1); // selecciona el canal 1 solamente
adc = read_adc();
lcd_gotoxy(10,1);
printf(lcd_putc, "dec=%lu",adc);
lcd_gotoxy(9,2);
printf(lcd_putc,"Hex=%lx",adc);
delay_ms(500);


}
}

else printf(lcd_putc,"\fclave incorrecta\n");

delay_ms(1000);




}
}
 
Última edición:
#3
# include <16f877a.h>
#use delay (clock = 4000000)

#include <lcd.c>
#define use_portb_kbd TRUE
#include <kbd.c>
#rom 0x2100={'7','3','2','4'}
unsigned long int adc;

main (){


char k;
int i;
int c=0;
char data[4],clave[4];
lcd_init();
kbd_init();
port_b_pullups(1);
while(true){
i=0;
printf(lcd_putc,"\fBienvenido\n");
delay_ms(1000);
printf(lcd_putc,"\ningrese clave\n");
delay_ms(1000);
printf( lcd_putc ,"\fpulsar tecla 1\n");
while(i<=3){
k=kbd_getc();

if (k!=0)
{data =k;
i++;
printf(lcd_putc,"\fpulsar tecla %u\n",i+1);
}
}
c++;
if (c==3){
while(1){
printf(lcd_putc,"\fbloqueado\n");
delay_ms(1000);
printf(lcd_putc,"\freinicie\n");
delay_ms(1000);
}
}



for (i=0;i<=3;i++){
clave=read_eeprom(i);}
if((data[0]==clave[0])&& (data[1]==clave[1]) && (data[2]==clave[2])&& (data[3]==clave[3])){


while(1){
printf(lcd_putc,"\fok\n");
setup_port_a(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0); // selecciona el canal 0 solamente
adc = read_adc();
lcd_gotoxy(1,1);
printf(lcd_putc, "dec=%lu",adc);
lcd_gotoxy(1,2);
printf(lcd_putc,"Hex=%lx",adc);


set_adc_channel(1); // selecciona el canal 1 solamente
adc = read_adc();
lcd_gotoxy(10,1);
printf(lcd_putc, "dec=%lu",adc);
lcd_gotoxy(9,2);
printf(lcd_putc,"Hex=%lx",adc);
delay_ms(500);


}
}

else printf(lcd_putc,"\fclave incorrecta\n");

delay_ms(1000);




}
}
 
Arriba