Autor Tema: Problema PIC y codigo teclado matrical  (Leído 1381 veces)

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

Desconectado Razoh

  • PIC10
  • *
  • Mensajes: 9
Problema PIC y codigo teclado matrical
« en: 18 de Agosto de 2005, 15:06:00 »
Hola

Tengo un problema bastante extraño con un teclado matricial de 5 filas x 4 columnas. A continuación os expongo mi problema.

Tengo conectado las 5 filas a los bits RD0,RD1,RD2,RD3 y RD4  de un PIC18f452 y las 4 columnas a los bits RD5,RD6,RD7,RB4 con sus correspondientes resistencias pull-up.

El codigo de mi programa es el siguiente:

void main (void)
{
LCDInicializacion ();                                                     // Inicializa el LCD
while(1)
   {
   unsigned char teclado;
   unsigned char auxb,auxtecla;
   TRISD = 0xE0;                                              //Configuro las columnas
   PORTD = 0x00;                                                como entradas y las filas
   TRISBbits.TRISB4 = 1;                                      como salidas.
   teclado=PORTD;                                            //Leo lo que recibo en las
   teclado=(teclado>>5)&0x0F;                          entradas para saber  
   auxb=0x10&PORTB;                                        cuando hay tecla pulsada y
   teclado=teclado|(auxb>>1);                           la guardo en "teclado".
   

Hasta aqui todo bien detecto que hay tecla pulsada y se en que columna está pero ahora para saber la fila, intercambio las entradas por salidas y viceversa y envio por la salida el valor que tengo en "teclado" .


               if(teclado!=0x0F)                                   //Aqui entra cuando detecta tecla
      {
                   TRISD = 0x1F;                      //Configuro entradas y salidas
      PORTD = 0x1F;                        
      PORTD = 0xEF&(teclado<<5)  //Envio "teclado"
      TRISBbits.TRISB4 = 0;
      PORTBbits.RB4 = 0x01&(teclado>>3);
      auxtecla = 0x1F&PORTD;     //Aqui deberia tener el valor con
                                                                          el que poder calcular la columna

El problema es que en estas 6 ultimas lineas se vuelve loco, por ejemplo ejecutando paso a paso donde pongo PORTD =0x1F, tembién varia el valor de los bits RD5,RD6 y RD7 y se pone PORTD a 0xFF. En fin auxtecla siempre acaba valiendo 0x00. Alguien me puede ayudar. Se supone que en "auxtecla" deberia tener  todo unos menos un cero que me indicaria  la fila en la que esta.

//////El resto del programa ya no importa porque de aquí no pasa//////
      if(teclado==0x0E) //Columna 1
         {
         if(auxtecla==0x1E) strcpy(tecla,"tecla F2"Giño;
         if(auxtecla==0x1D) strcpy(tecla,"tecla A2"Giño;
          if(auxtecla==0x1B) strcpy(tecla,"tecla 1"Giño;
         if (auxtecla==0x17) strcpy(tecla,"tecla 4"Giño;
         if(auxtecla==0x0F) strcpy(tecla,"tecla 7"Giño;
         else strcpy(tecla,"tecla *"Giño;
         }
      else if(teclado==0x0D) //Columna 2
         {

Gracias por adelantado

Desconectado Razoh

  • PIC10
  • *
  • Mensajes: 9
RE: Problema PIC y codigo teclado matrical
« Respuesta #1 en: 20 de Agosto de 2005, 07:05:00 »
Ya he resuelto el problema, gracias a quien haya intentado pensar la solucion

Un saludo