Autor Tema: Leer teclado matricial....  (Leído 1669 veces)

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

Desconectado ijfa

  • PIC10
  • *
  • Mensajes: 3
Leer teclado matricial....
« en: 11 de Enero de 2006, 10:09:00 »
Hola a todos....tengo un problemita para poder leer un teclado matricial.....el programa ke modifique no anda........no se ke hacer....si alguien me puede ayudar...Llorica  jeje....estoy usando el kompilador CC5X ....mi pic es el 16f874A....y uso un cristal de 20MHz.....ojala alguien me ayude ....

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
RE: Leer teclado matricial....
« Respuesta #1 en: 12 de Enero de 2006, 11:57:00 »
Da mas datos... aporta codigo esquemas fotos... si no es imposible.

1 saludo

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Leer teclado matricial....
« Respuesta #2 en: 12 de Enero de 2006, 12:33:00 »
Holaa!!!pon la libreria y di donde la modificaste y tu programa.....

Como bien dice el amigo elmasvital si no, es imposible, por lo menos ami todavia no me han dado el titulo de adivino.....

Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado ijfa

  • PIC10
  • *
  • Mensajes: 3
RE: Leer teclado matricial....
« Respuesta #3 en: 12 de Enero de 2006, 21:37:00 »
Sorry jeje....aki va mi codigo.....no kacho ke onda...esta hecho para el kompilador CC5X..
Codigo:
//programa de lectura de un teclado matricial conectado al puerto B.
//se realiza una lectura cada 10ms.
/*char ADCON0 @ 0x1F; // Registro ADCON0
char ADCON1 @ 0x9F; // Direccion del registro ADCON1
char ADRESL@0x9E;
char ADRESH@0x1E;
char TXSTA@0x98;
char RCSTA@0x18;
char SPBRG@0x99;
char TXREG@0x19;
char RCREG@0x1A;*/
char Tecla, Temp,Temp1,Temp2, Pulsada;

char Tecla, Temp,Temp1,Temp2, Pulsada;


void delay_ms(char ms)
{/*
#asm

DEMORA  movlw     .55       ; 1 set numero de repeticion  (B)
        movwf     PDel0     ; 1 |
PLoop1  movlw     .181      ; 1 set numero de repeticion  (A)
        movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        clrwdt              ; 1 ciclo delay
        decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        return              ; 2+2 Fin.
#endasm
;-------------------------------------------------------------



Requerimientos  
-----------------
- Declaracion de PDel0 (registro)
- Declaracion oe PDel1 (registro)
- 1 nivel Stack

Ejemplo de uso
--------------
call DEMORA      ; Delay 50000 ciclos (incluyen  call+return)
*/uns16 x,y,z;
z=10000;y=100;
x=z*y;
while (x)
{
   x>>= 0;
   x--;
   
}*/}
void Lee_Tecla()
{//para las kolumnas
  TRISB = 0b11110000;
  OPTION.7 = 0; // habilita pull-ups
  PORTB = 0;
#asm
 comf PORTB,W;   // Lee y complementa
 movwf Temp1;   // Lee y complementa (Columna)
 swapf Temp1,f; // Cambia alta por baja
#endasm
Temp=0;
 
   while (!(Temp1 & 0x01))  // cuenta hasta que llegue a un bit set
   {
    Temp1>>= 1;
    Temp++;
   }

 if (Temp<4)  // se ha pulsado
   
   {
     Temp2=Temp;                        // Guardo columna
    //para las filas
    TRISB = 0b00001111;                 // ahora la fila
     OPTION.7 = 0; // habilita pull-ups
      PORTB = 0;
  #asm
    comf PORTB,W;            // Lee y complementa
     movwf Temp1;            // Lee y complementa (Fila)
  #endasm      
    Temp=0;
   
    while (!(Temp1 & 0x01))      // cuenta hasta que llegue a un bit set

    { Temp1>>=1;
      Temp++;
    }


    if (Temp<4)    // Fila correcta
       
       { Temp1=Temp;
       Tecla=(Temp2<<2)+Temp1;      //variable Tecla dice kual es la accionada
      
     
      /*para mostrar la tecla pulsada kon leds en el puerto A
            switch (Tecla)
             {
              case 0: if (Tecla==0x05)            //Muestra en binario la tekla pulsada comenzando por la 1ª tecla "0". pone 01H.-
                    PORTA=0x01; break;

              case 1: if (Tecla==0x06)            //Muestra en binario la 2ª tecla "1".PONE 02H.-
                    PORTA=0x02; break;

              case 2: if (Tecla==0x07)            //Muestra en binario la 3ª tecla "2".
                    PORTA=0x03; break;

              case 3: if (Tecla==0x08)            //Muestra en binario la 4ª tecla "3".
                    PORTA=0x04; break;

              case 4: if (Tecla==0x09)            //Muestra en binario la 5ª tecla "4".
                    PORTA=0x05; break;

              case 5: if (Tecla==0x0A)            //Muestra en binario la 6ª tecla "5".
                    PORTA=0x06; break;

              case 6: if (Tecla==0x0B)            //Muestra en binario la 7ª tecla "6".
                    PORTA=0x07; break;

              case 7: if (Tecla==0x0C)            //Muestra en binario la 8ª tecla "7".
                    PORTA=0x08; break;

              case 8: if (Tecla==0x0D)            //Muestra en binario la 9ª tecla "8".
                    PORTA=0x09; break;

              case 9: if (Tecla==0x0E)            //Muestra en binario la 10ª tecla "9".
                    PORTA=0x0A; break;

              case 10: if (Tecla==0x0F)            //Muestra en binario la 11ª tecla "A".
                    PORTA=0x0B; break;

              case 11: if (Tecla==0x10)            //Muestra en binario la 12ª tecla "B".
                    PORTA=0x0C; break;

              case 12: if (Tecla==0x11)            //Muestra en binario la 13ª tecla "C".
                    PORTA=0x0D; break;

              case 13: if (Tecla==0x12)            //Muestra en binario la 14ª tecla "D".
                    PORTA=0x0E; break;

              case 14: if (Tecla==0x13)            //Muestra en binario la 15ª tecla "E". PONE UN 0FH
                    PORTA=0x0F; break;
            
              case 15: if (Tecla==0x14)            //Muestra en binario la ultima tecla "F". PONE UN 10H .-
                    PORTA=0x10; break;
              }
       */}
   
     else Tecla=0xFF;
     }
     
     else Tecla=0xFF;
     }
void main()
{
         //Puerto A se selecciona komo salida
  while(1)
  {

   Lee_Tecla ();
   delay_ms (10);
   PORTB = Tecla;
   
         

  }
}




Weno...parece ke me falta poner el ADCON1 para salida digital....Expliko el ccto ke estoy haciendo.....Tengo konektado un teklado matricial al pic16f874A por el puerto B....y kiero ver la tekla pulsada a traves de unos leds en el puerto A......el otro dia me dijeron ke se podian poner los leds en el mismo puerto B...pero no se....no kise...los leds indikan  en binario el numero de la tekla...p ej: si apreto el "0"...los leds indican un 1..en binario: 00000001

weno este es mi problemita.....esto de los leds es para probar el programa para leer el teklado matricial.....porke lo ke kiero hacer al final es enviar la tekla presionada a traves de RS232 hasta el PC y verla en un programa tipo hyperterminal....Fumador