Autor Tema: Problema con PIC16f877A, LCD 16x2 y teclado matricial  (Leído 2402 veces)

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

Desconectado mxpxjgc

  • PIC10
  • *
  • Mensajes: 1
Problema con PIC16f877A, LCD 16x2 y teclado matricial
« en: 27 de Noviembre de 2010, 07:38:36 »
Hola, este proyecto lo encontre e intente armarlo pero no funciona del todo bien. El proyecto es algo parecido a la llave electrónica, consiste en ingresar dos veces  una clave (4-12 digitos), si es correcta se puede ingresar a la casa, pero si no lo es y haz intentado ingresar mas de tres veces el alarma se activará y te dirá que eres un intruso.

Mi problema es q al simularlo con en Proteus, la mitad de las teclas no responden y algunas funcionaliddes del programa no funcionan.

El programa esta en C, que recien lo estoy conociendo, lo compile con el CCS.

Les agradeceria muchisimo si me ayudarían a encontrar el error, y gracias por el tiempo q  se estan tomando.
« Última modificación: 27 de Noviembre de 2010, 07:54:52 por mxpxjgc »

Desconectado MarkKnopfler81

  • PIC12
  • **
  • Mensajes: 64
    • PICs, Electrónica y Robótica
Re: Problema con PIC16f877A, LCD 16x2 y teclado matricial
« Respuesta #1 en: 28 de Noviembre de 2010, 06:35:36 »
Hola mxpxjgc, lo primero que debes cambiar es como lees el teclado, lo haces midiendo la tensión en A0-A3, pero AN3 no lo tienes conectado.

La solución es hacerlo con input() y las entradas en digital, es mas rápido y mas preciso para este caso.

Aquí te pongo un ejemplo de como lo podrías hacer sin modificar el hardware. Lo único que debes cambiar son los diodos D1-D4 por resistencias.

Código: [Seleccionar]
int scanning()
{
   int tec=0;
   for(i=0;i<3;i++)
   {
      output_low(Pin_A0);
      output_low(Pin_A1);
      output_low(Pin_A2);
      if(i==0)output_high(Pin_A0);
      if(i==1)output_high(Pin_A1);
      if(i==2)output_high(Pin_A2);
      delay_us(10);
      if(input(Pin_D0)) tec=i+1;
      if(input(Pin_D1)) tec=i+4;
      if(input(Pin_D2)) tec=i+7;
      if(input(Pin_D3)) tec=i+10;
     
   }
   return (Tec);
}

Este ejemplo devuelve 0 si no se pulsa ninguna tecla y un valor del 1 al 12, dependiendo de la tecla pulsada.

Saludos.



 

anything