Autor Tema: LCD+PIC16f876A+LED+speaker+keypad 4x4  (Leído 1521 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado amazigh

  • PIC10
  • *
  • Mensajes: 1
LCD+PIC16f876A+LED+speaker+keypad 4x4
« en: 31 de Diciembre de 2015, 22:14:38 »
Holaa Todo el mundo y feliz año nuevo.
soy nuevo en mikroC y en los PICS
lo que intento es crear una contraseña de 4 digitos o 6 .si es correcta la clave la led se enciende y mete un sonido y si no pues la led se queda apagada. me han dicho que lo tengo que hacer enel eeprom y la verdad no se como hacerlo me gustaria que me ayudarian.
1-como crear una contraseña de 4 o 6 digitos.Soy un novato
gracias por responder
os copio mi codigo :

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 PORTC;
unsigned short kp;


void main() {
TRISA=0;
kp = 0;
PORTA=0;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"ingrese codigo :");


Keypad_Init();
   while (1){
      kp = Keypad_Key_Click();
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(kp==55){
    PORTA.RA1=1;
    delay_us(500000);
    Lcd_Out(1,1," codigo correcto ");
    PORTA.RA0=1;
    Lcd_Out(2,16," led encendida ");
      }
      else  {
      PORTA.RA0=0;
      PORTA.RA1=0;
        Lcd_Cmd(_LCD_CLEAR);
    Lcd_Out(1,1,"codigo erroneo");
    delay_us(500000);
    Lcd_Out(2,16,"intentar otra vez");
    }

    //Lcd_Chr(2,2,kp);
    }

    }

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re:LCD+PIC16f876A+LED+speaker+keypad 4x4
« Respuesta #1 en: 02 de Enero de 2016, 20:37:28 »
Hola amazigh, yo tambien soy novato , no uso el mikroC y tampoco nunca use keypad, :D pero me gustaría ayudarte desde mis basicos conocimientos, solo para darte una idea  ;-)
Se me ocurre pensar que se podría hacer habilitando banderas a medida que se vayan pulsando las teclas correctas osea
if (input(pin_a1)==1) flag1=1;
  if (flag1==1 )
     { (input(pin_a2)==1)
        flag2=1;
     }
   if (flag2==1)
     { (input(pin_a3)==1)
        flag3=1;
     }
   if (flag3==1)
     { (input(pin_a4)==1)
        flag4=1;
     }
    if (flag4==1)
{
llama a la funcion que enciende el led e imprime en lcd "codigo correcto"
y pone todas las banderas en cero nuevamente
flag1=0;
flag2=0;
flag3=0;
flag4=0;
}
De esta manera solo llegaras al flag4 solo si antes se fueron pulsando las teclas correctas
El ejemplo lo hice imitando pulsadores, supongo que el keypad debe enviar caracteres ascci ,asi que deberias habilitar las banderas cuando recibas tal caracter o lo que te envie el keypad.
Esto solo sería para habilitar el codigo ahora nos falta cuando el codigo sea incorrecto........
Bueno si te parece bien el razonamiento seguimos adelante y aprendemos juntos o esperamos un poco y tal vez alguien tenga  la tecnica correcta
Saludos!!!   

 
 
El tiempo es una ilusión ,solo existe el presente................