tampoco lo probre como dicen pero no anda igua.
#include <18F2550.h>
#device adc=8
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(oscillator=4M)
//LCD
#define use_portb_lcd TRUE
#include <lcd.c>
//Libreria STRING
#include <string.h>
//Variables Globales
char Pass[5];
char Pass2[5]={"1111"};
char Pass3[5];
int Estado=0;
int A=0;
//Declaro Funciones
void configuracion ();
int medir ();
char LeerEEPROM ();
void EscribirEEPROM ();
char TeclaLeida();
void ComprobarPASS();
void CambiarPASS();
#INT_TIMER0
void TIMER0_isr(void){
A++;
if (A==195){
A=0;
estado = 0;
}
}
//Principal////////////////////////////////////////////////////////
void main() {
int i=0;
char tecla='E';
char teclaantigua;
configuracion ();
write_eeprom(1,Pass2); //escritura de los mensajes...
while (TRUE){
if (estado == 0){ ////////////////NORMAL
lcd_gotoxy(1,1);
lcd_putc("Ingrese Clave:");
teclaantigua = tecla;
tecla = TeclaLeida ();
if (!(tecla == 'A') && !(teclaantigua == tecla)){
Pass[(i)] = Tecla;
i++;
lcd_gotoxy(i,2);
lcd_putc("*");
}
if (i == 4) {
delay_ms(100);
lcd_putc("\f" );
ComprobarPASS();
i=0;
}
}else if(estado == 1){ ///////////Pregunta si quiere cambiar CLAVE
lcd_gotoxy(2,1);
lcd_putc("Cambiar Calve:");
lcd_gotoxy(2,2);
lcd_putc("Presionar -> #");
teclaantigua = tecla;
tecla = TeclaLeida ();
if ((tecla == '#') && !(teclaantigua == tecla)){
estado = 3;
lcd_putc("\f" );
}
}else if(estado == 3){ ///////////Cambiar CLAVE
lcd_gotoxy(2,1);
lcd_putc("Nueva Calve:");
teclaantigua = tecla;
tecla = TeclaLeida ();
if (!(tecla == 'A') && !(teclaantigua == tecla)){
Pass3[(i)] = Tecla;
i++;
lcd_gotoxy(i,2);
lcd_putc("*");
}
if (i == 4) {
write_eeprom(1,Pass3);
delay_ms(50);
i=0;
estado = 0;
lcd_putc("\f" );
}
}
}
}
//Funciones/////////////////////////////////////////////////////////
char TeclaLeida (){
int valor;
char TeclaChar;
valor = medir();
if (valor == 0){
TeclaChar = 'A';
}else if (valor < 150){
TeclaChar = '#';
}else if (valor<154){
TeclaChar = '9';
}else if (valor<160){
TeclaChar = '6';
}else if (valor<165){
TeclaChar = '3';
}else if (valor<175){
TeclaChar = '0';
}else if (valor<180){
TeclaChar = '8';
}else if (valor<188){
TeclaChar = '5';
}else if (valor<195){
TeclaChar = '2';
}else if (valor<205){
TeclaChar = '*';
}else if (valor<211){
TeclaChar = '7';
}else if (valor<223){
TeclaChar = '4';
}else if (valor<233){
TeclaChar = '1';
}else{
TeclaChar = 'E';
}
return TeclaChar;
}
int medir () {
int Medicion=0;
Medicion = read_adc();
delay_ms( 50 );
return Medicion;
}
void configuracion () {
//ADC
setup_adc_ports(AN0|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_32);
set_adc_channel(0);
//TMR0
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
//LCD
lcd_init();
}
void ComprobarPASS(){
if (strcmp(LeerEEPROM(),Pass)== 0 ){
lcd_gotoxy(4,1);
lcd_putc("Bienvenido");
delay_ms(2000);
lcd_putc("\f" );
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
set_TIMER0(195);
Estado = 1;
}else{
lcd_gotoxy(1,1);
lcd_putc("La Clave");
lcd_gotoxy(1,2);
lcd_putc("es Incorecta.");
delay_ms(2000);
lcd_putc("\f" );
}
}
char LeerEEPROM (){
char LAST_VOLUME=1;
return read_EEPROM (LAST_VOLUME);
}