tnego un picf16877A + lcd + keypad+led para semular una puerta si la puerta esta abierta o no,
tengo un problema con mi codigo de programacion en mikroc,
cuando enciendo esto en proteus tengo en la lcd
1-open dor
2-setup
cuando le doy al keypad 1 me sale write password si es correcto osea { 7777} la puerta tiene que abrirse y en unos secundos se ciera y vuelve al menu inicial
y si el password no es correcto te dice vuelve a intentarlo y vuelve al menu.
y si le doy al 2 entra en setup y solo hay en la lcd :
7-return
le doy al 7 y vuelve
todo impecable PEEEEROOOOO
por ejemplo si hqgo todo lo de arriba y despues le doy al 2 para ira setup pues la pantalla se queda asi
1-abrir puerta
2-config 7- volver
cpp
sbit LCD_RS at RB2_bit; sbit LCD_EN at RB3_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB2_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; char keypadPort at PORTD; unsigned short kp; char T[4]; int i; void main() { Keypad_Init(); TRISA=0;//led kp = 0; PORTA=0; Lcd_Init(); {C: Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1,"1-abrir puerta"); //menu Lcd_Out(2,1,"2-config"); // while (1){ {D: kp=0; // for(i=0;i<1;i++){ T[i]=kp; do kp = Keypad_Key_Click(); while (!kp); switch (kp){ case 1: kp= 55; break; // 1 case 2: kp= 52; break; // 2 case 3: kp= 49; break; // 3 case 4: kp= 65; break; // A case 5: kp= 56; break; // 4 case 6: kp= 53; break; // 5 case 7: kp= 50; break; // 6 case 8: kp= 48; break; // B case 9: kp= 57; break; // 7 case 10: kp= 54; break; // 8 case 11: kp= 51; break; // 9 case 12: kp= 80; break; // C case 13: kp= 81; break; // * case 14: kp= 82; break; // 0 case 15: kp= 83; break; // # case 16: kp= 84; break; // D } //} if(kp==49){ // si 1 Lcd_Cmd(_LCD_CLEAR); goto A; //aller a A : entre le mot de passe pour ouvrire la porte } else if(kp==50){ //si 2 Lcd_Cmd(_LCD_CLEAR); goto B; //aller parametre } goto D; } {A: Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1,1,"escriba el password :"); Lcd_Out(2,2," "); //while (1){ kp=0; kp = Keypad_Key_Click(); for(i=0;i<4;i++){ T[i]=kp; do kp = Keypad_Key_Click(); while (!kp); switch (kp){ case 1: kp= 55; break; // 1 case 2: kp= 52; break; // 2 case 3: kp= 49; break; // 3 case 4: kp= 65; break; // A case 5: kp= 56; break; // 4 case 6: kp= 53; break; // 5 case 7: kp= 50; break; // 6 case 8: kp= 48; break; // B case 9: kp= 57; break; // 7 case 10: kp= 54; break; // 8 case 11: kp= 51; break; // 9 case 12: kp= 80; break; // C case 13: kp= 81; break; // * case 14: kp= 82; break; // 0 case 15: kp= 83; break; // # case 16: kp= 84; break; // D } Lcd_Chr_Cp(kp); } if(T[1]==55 && T[1]==55 && T[2]==55 && T[3]==55) { //code 7777 Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1,1,"Correct"); Lcd_Out(2,1,"Puerta abierta "); PORTA=1; delay_ms(3000); PORTA.RA0=0; delay_ms(5000); goto C; } else { Lcd_Cmd(_LCD_CLEAR); PORTA=0; Lcd_Out(1,1,"password incorecto"); delay_ms(2000); Lcd_Cmd(_LCD_CLEAR); Lcd_Out(2,1,"intentelo"); delay_ms(2000); goto A; } { B : Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1,1," 7-volver "); kp=0; for(i=0;i<1;i++){ do kp = Keypad_Key_Click(); while (!kp); switch (kp){ case 1: kp= 50; break; // 2 } } if(kp==50){ Lcd_Cmd(_LCD_CLEAR); goto C; } } // } Lcd_Out_Cp(kp); } } }