Ingresar clave con teclado sin LCD Pic16f84a en lenguaje C

#1
Hola, necesito hacer un programa en lenguaje C para el pic16f84a, pero no entiendo como hacerlo, en base a lo que he leido, investigado y otros codigos que he visto hice el mio propio pero no funciona y no entiendo como hacerlo.

El programa consiste en introducir una clave de 8 digitos por medio del teclado matricial (3x4 en este caso) para asi poder accesar, no necesito mostrar el lcd.

En fin aqui les dejo mi codigo por si alguien puede ayudarme, estoy usando el PCW
Código:
#Device PIC16F84A
#fuses XT,NOWDT,PUT,NOPROTECT
#include <16F84A.h>
#use delay (clock=4000000)
#include <stdlib.h>
#use fast_io(a)
#use fast_io(b)
#byte puerto_a = 0x08
#byte puerto_b = 0x09
#rom 0x2100={'0','1','1','0','4','1','2','7'}
char keyport at PORTB;

main()
{
 char k;
 int i;
 char data[8],clave[8];
 set_tris_a(0x00);
 set_tris_b(0xF0);
 Keypad_Init();
 port_b_pullups(TRUE);
 output_low(PIN_A4);
 
 while(TRUE)
 {
  i=0;
  while(i<=7)
  {
   k=Keypad_Key_Click();
   if(k!=0)
    {
     data[i]=k;
     i++;
    }
  }    
  for (i=0;i<=7;i++)
  {
   clave[i]=read_eeprom(i);
  }
  if((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2])&&(data[3]==clave[3])&&(data[4]==clave[4])&&(data[5]==clave[5])&&(data[6]==clave[6])&&(data[7]==clave[7]))
  {
   output_high(PIN_A4);
   delay_ms(5000);
   output_low(PIN_A4);
  }
 }
}
 
Última edición:
#2
Tu programa contiene varios errores.
Por ejemplo para usar el PCWHD Compiler...
No es --> #Device PIC16F84A
Es --> #include <16F84A.H>

Ésto no va ---> char keyport at PORTB;

No es ---> main()
Puede ser ---> void main() ó void main(void)

Ésto no va ---> Keypad_Init();
Debe ser ---> kbd_init();

Ésto otro tampoco va ---> k=Keypad_Key_Click();
Debe ser ---> k=kbd_getc();

Aparte no incluiste el uso de la librería KBD.C para usar el teclado.

Cómo copiaste partes de alguno ó varios programas, por eso tienes ese desorden de instrucciones.

Por lo tanto es más fácil hacer un programa desde cero, que corregir el que hiciste.
Así que, adjunto uno con lo que quieres hacer.

Suerte y espero te sirva.
 

Adjuntos

Última edición:
#4
De nada.

Una mejora para el código, sería esta...
Código:
while(true){
   for (i=0;i<=7;i++){
// Leer los valores de las teclas pulsadas
   while(true){
      clave[i]=kbd_getc();    // Guardar en clave[i+1] el valor de la tecla pulsada
   if(clave[i]!=0){           // Si se pulso una tecla, continuar
      output_high(pin_a3);    // Avisar con un tono de 100Ms
      delay_ms(100);
      output_low(pin_a3);
   break;}
   }
}
Con esto se consigue no repetir el proceso en el resto del programa, al crear un bucle que lo hace.

Por si se requiere saber cómo es la conexión interna del teclado matricial 3x4, adjunto el esquema.

Hasta pronto.
 

Adjuntos

Última edición:

Temas similares

Arriba