Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

14/05/2013 #1


Ingresar clave con teclado sin LCD Pic16f84a en lenguaje C
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);
  }
 }
}
15/05/2013 #2
Moderador

Avatar de D@rkbytes

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.
15/05/2013 #3


Muchas gracias por a ayuda
15/05/2013 #4
Moderador

Avatar de D@rkbytes

GueroGreenwood dijo: Ver Mensaje
Muchas gracias por a ayuda
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.
Imágenes Adjuntas
Tipo de Archivo: jpg Con botones (SCH).jpg (74,5 KB (Kilobytes), 30 visitas)
16/05/2013 #5


Si de hecho fue lo que hice para no repetir los procesos, de nuevo muchas gracias
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.