Autor Tema: Atencion a teclado matricial 4x4  (Leído 4354 veces)

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

Desconectado J.C

  • PIC10
  • *
  • Mensajes: 23
Atencion a teclado matricial 4x4
« en: 13 de Marzo de 2007, 08:37:16 »
Hola a todos
Hoy no vengo a preguntar dudas mas bien a dar un aporte, segun he podido ver

en todos los ejemplos que he bajado de internet casi siempre cuando atendemos

un teclado matricial 4x4 que es el mas comun usamos el driver KBD.c que trae

el MPLAB, haciendo que gastemos mas memoria ROM del micro lo cual a veces no

es bueno, es por ello que decidi buscar otra forma de atender el teclado sin

tener que usar KBD.c... de esta forma se puede conectar el teclado en

cualquier puerto del micro, en este caso use un PIC16F73 y el teclado lo

conecte al puerto C de esta forma:


    
           
                                          4x1K      Vcc 
               |---|---|---|---|                      |
   C0 <----| 3 | 7 | B | F |-----/\/\/\------|
               |---|---|---|---|                      |
   C1 <----| 2 | 6 | A | E |-----/\/\/\------|
               |---|---|---|---|                      |
   C2 <----| 1 | 5 | 9 | D |-----/\/\/\------|
               |---|---|---|---|                      |
   C3 <----| 0 | 4 | 8 | C |-----/\/\/\------|
               |---|---|---|---|
                 ^   ^   ^   ^
        |   |   |    |
   C4  _____|   |   |    |
   C5  _______|    |    |
   C6  __________|    |
   C7  _____________|
 

Estas son las funciones que implemente, he aqui todo lo que hace falta para

usarlas:

//...Variables globales
typedef unsigned long myint;
myint teclas;
unsigned char Burbuja[] = {0xEF, 0xDF, 0xBF, 0x7F};
unsigned char tecla_activa;


//...Declaracion de funciones
void Leer(void);
void Teclado(void);


void main()
{
   while(1)
   {
      Teclado();   
   }
}



//...Leer puerto del teclado
void Leer(void)
{
   unsigned char i;
   for(i = 0; i<=3; i++)
   {
      PORTC = Burbuja;
      teclas = (teclas << 4)| (PORTC & 0x0F);   
   }
}


//...Atencion al teclado 4x4
void Teclado(void)
{
   //...Determino cual tecla fue activada
   unsigned char i, cont_tecla = 0;
   teclas = 0xFFFF;
   Leer();
   while(teclas == 0xFFFF)
      return;
   delay_ms(250);   //...elimino el rebote
      
   C = 1;   //...bandera de acarreo (PIC16F73)

   for(i = 0; i<16; i++)
   {
      teclas = teclas <<1;
         if(C == 1)
            cont_tecla++;
         else
            tecla_activa = cont_tecla;
   }
   
   
   //...En funcion de la tecla presionada realizo la accion
   switch(tecla_activa)
      {
         case 0x01:   
                break;
         case 0x02:
               break;
            .
            .
            .   
            .
         
         
         default:   break;      
      }
}


Como veran lo unico que hice fue basarme en el algoritmo de atencion al

teclado, es decir mando la burbuja por el puerto y despues leo el valor y lo

guardo en una variable de 16bits (teclas), despues la roto a la izquierda

hasta que la bandera de acarreo (C en este PIC) me de distinta de uno y voy

contando y asi determino cual fue la tecla activada... bueno eso es todo,

espero que les sirva para algo... cualquier sugerencia sera recivida con

agrado, ah otra cosa pueden usar el codigo y hacer con el lo que quieran

Saludos J.C
Todo esta ahi... no hay mas que mirar.

Desconectado mi_chell2002

  • PIC10
  • *
  • Mensajes: 15
Re: Atencion a teclado matricial 4x4
« Respuesta #1 en: 15 de Abril de 2009, 20:14:59 »
hola  saves que estoy tratando de hacer que un micro 16F877A  me lea un teclado de membrana, leido y hecho cuanto intento se pueda creer para que me funcione y no pasa nada me soy por vencido. Asi que ahora estoy viendo quien tiene algo que funcione realmente para hacerlo, te consulto lo siguiente, que compilador estas usando sera el CC5X o el CCS C?. Otra cosa es que dices que la funcion KBD.C la trae el MPLAB yo creia que la trae el compilador CCS?. si tienes mas informacion programas hechos que te haya funcionado te lo agradecere.