Llave electronica con MikroC


El siguiente programa enciende la marcha de un carro, utilizando un teclado matricial en mikroc
tambien tiene una clave de proteccion con encendido de poco tiempo, y una clave para apagar el carro

unsigned short contador,clave[5],apagar,apago[5],memoria[5]={'2','2','2','2','2'}, kp;
char oldstate = 0;
  char  J = 0;
char *txt1 = "password";
char *txt2 = "   ok_hola";
char *txt3 = "correcto";
char *txt4 = "APAGADO";
void main() {        //

  Keypad_Init(&PORTB);      // Initialize Keypad EN PORTB
  Lcd_Init(&PORTD);        // Initialize LCD on PORTD,
  Lcd_Cmd(LCD_CLEAR);      // LIMPIA LA PANTALLA DE LA LCD

  trisa=0b000000;       // INICIAMOS CON LOS PINES DE SALIDA EN CERO
  kp = 0;               // INICIAMOS LA VARIABLE DE KP EN CERO

 Lcd_Out(1,1, txt1);

 do {
    if (Button(&PORTC, 1, 1, 1))                // detect logical one on RB1 pin
      oldstate = 1;
    if (oldstate && Button(&PORTC, 1, 1, 0)) {
    {
    for(J=0 ; J<5 ; J ++ )
    }
    if( J>=5)
    {
     PORTA = ~PORTA;
      oldstate = 0;
      J=0;
    }  // detect one-to-zero transition on RB1 pin

   
    }
  } while(1);    // MANDANOS UN TEXTO A LA LCD DE PASSWORD
  do {                 // INICIAMOS PROGRAMA
      Lcd_Cmd(LCD_CLEAR);  // LIMPIAMOS LA PANTALLA DE LA LCD
      Lcd_Cmd(LCD_cursor_off);   // APAGAMOS EL CURSOR DE LA LCD
      Lcd_Out(1,1, txt1);    // MANDAMOS EL TEXTO PASSWORD AL REGLON UNO COLUMNA UNO
      clave[0]='0';clave[1]='0';clave[2]='0';clave[3]='0';clave[4]='0'; // LE ASIGNAMOS LA LETRA CERO
                                                                        //AL ARRELO EN SUS ESPACIOS
    for(contador=0 ; contador<5 ; contador ++ )  //DECLARAMOS UN CONTADOR CON UN FOR
    {
                do {
                      kp = Keypad_Released(); // FUNCION DE LA KEYPAD MANDA UN 1 O UN 16
                           Delay_ms(10);       // SEGUN LA TECLA PRESIONADA
                   }while (!kp);
           Lcd_Chr_CP('*');  // IMPRIME EN LA LCD
         
    switch (kp) {   // UBICO A KP EN CADA UNO DE LOS CASOS
      case  1: kp = '1'; break;
      case  2: kp = '2'; break;
      case  3: kp = '3'; break;
      case  4: kp = 'A'; break;
      case  5: kp = '4'; break;
      case  6: kp = '5'; break;
      case  7: kp = '6'; break;
      case  8: kp = 'B'; break;
      case  9: kp = '7'; break;
      case 10: kp = '8'; break;
      case 11: kp = '9'; break;
      case 12: kp = 'C'; break;
      case 13: kp = '*'; break;
      case 14: kp = '0'; break;
      case 15: kp = '#'; break;
      case 16: kp = 'D'; break;
    }
   clave[contador]=kp; // ASIGNAMOS EL VALOR DE KP EN CADA PUNTO DEL ARREGLO

     }

 
  if(clave[0]==memoria[0]&&clave[1]==memoria[1]&&clave[2]==memoria[2]&&clave[3]==memoria[3]&&clave[4]==memoria[4])
         {
           Lcd_Cmd(Lcd_Clear);  // LIMPIA PANTALLA
           Lcd_Out(2,1, txt2);   // IMPRIME EL TEXTO OK_HOLA
                porta=0b001101;  // ENCIENDE EL switch
            delay_ms(300);        // TARDA 300 MS
             porta=0b001111;      // ENCIENDE MARCHA
              delay_ms(650);      // RETARDO DE 650
              porta=0b001101;     // APAGA MARCHA
              delay_ms(10000);
               porta=0b001101;
               delay_ms(10000);  // TARDA 2 SEGUNDOS
                porta=0b001101;
                delay_ms(10000);
                porta=0b001101;
                delay_ms(10000);
                porta=0b001101;
                delay_ms(10000);
              porta=0b000000;    // CARRO SE APAGA
           Lcd_Cmd(Lcd_Clear);    // LIMPIA PANTALLA
           clave[0]='0';clave[1]='0';clave[2]='0';clave[3]='0';clave[4]='0';clave[5]='0';

         }
 
  if(clave[0]=='2'&&clave[1]=='6'&&clave[2]=='C'&&clave[3]=='6'&&clave[4]=='6')
         {
           Lcd_Cmd(Lcd_Clear);
           Lcd_Out(2,1, txt3); // CORRECTO
           porta=0b001101;
            delay_ms(300);
             porta=0b001111;
              delay_ms(650);
              porta=0b001101;
           Lcd_Cmd(Lcd_Clear);
           clave[0]='0';clave[1]='0';clave[2]='0';clave[3]='0';clave[4]='0';clave[5]='0';
                }
        if(clave[0]=='C'&&clave[1]=='C'&&clave[2]=='C'&&clave[3]=='C'&&clave[4]=='C')
         {
           Lcd_Cmd(Lcd_Clear);
           Lcd_Out(2,3, txt4);  // APAGADO
           porta=0b000000;
            delay_ms(2000);
             porta=0b000000;

           Lcd_Cmd(Lcd_Clear);
           clave[0]='0';clave[1]='0';clave[2]='0';clave[3]='0';clave[4]='0';clave[5]='0';
            }
  } while (1);  // CERRAMOS EL CICLO
}

Comentarios

Anónimo ha dicho que…
hola :) tu proyecto esta buenisimo muy interesante y kiero comprobarlo en una practica de clases...me podrias mandar el archivo .HEX a mi correo xfa carnal. saludos sigue adelante
vasquez_ave@hotmail.com
Anónimo ha dicho que…
hola :) tu proyecto esta buenisimo muy interesante y kiero comprobarlo en una practica de clases...me podrias mandar el archivo .HEX a mi correo xfa carnal. saludos sigue adelante
vasquez_ave@hotmail.com
Anónimo ha dicho que…
no funciona tu programacion
Anónimo ha dicho que…
Este comentario ha sido eliminado por un administrador del blog.
MTI Jairo Avendaño Malvaez ha dicho que…
El programa funciona perfectamente inclusive se realizo no solo en simulador tambien fisicamente...