Autor Tema: Tengo Problema en PIc 32 con teclado matricial 4*4  (Leído 2308 veces)

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

Desconectado alex_angeluz01

  • PIC10
  • *
  • Mensajes: 14
Tengo Problema en PIc 32 con teclado matricial 4*4
« en: 07 de Octubre de 2010, 22:08:11 »
Buenas BUeno acontinuacion coloco el programa que tengo sobre un teclado matricial pero al probarlo en el entrenador siempre me muestra el teclado 1 y cuadno oprimo otro tecla del teclado no sirve
Código: [Seleccionar]
// PIC32 Peripheral library functions and macros
#include <plib.h>
#include <p32xxxx.h>



// Configuration Bits
#pragma config FNOSC    = PRIPLL        // Oscillator Selection
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider (PIC32 Starter Kit: use divide by 2 only)
#pragma config FPLLMUL  = MUL_20        // PLL Multiplier
#pragma config FPLLODIV = DIV_1         // PLL Output Divider
#pragma config FPBDIV   = DIV_1         // Peripheral Clock divisor
#pragma config FWDTEN   = OFF           // Watchdog Timer
#pragma config WDTPS    = PS1           // Watchdog Timer Postscale
#pragma config FCKSM    = CSDCMD        // Clock Switching & Fail Safe Clock Monitor
#pragma config OSCIOFNC = OFF           // CLKO Enable
#pragma config POSCMOD  = XT            // Primary Oscillator
#pragma config IESO     = OFF           // Internal/External Switch-over
#pragma config FSOSCEN  = OFF           // Secondary Oscillator Enable
#pragma config CP       = OFF           // Code Protect
#pragma config BWP      = OFF           // Boot Flash Write Protect
#pragma config PWP      = OFF           // Program Flash Write Protect
#pragma config ICESEL   = ICS_PGx2      // ICE/ICD Comm Channel Select
#pragma config DEBUG    = OFF           // Debugger Disabled for Starter Kit
           
// application defines
#define SYS_FREQ (80000000, RESTART_WDT)


//Conection del teclado
#define COL0  PORTDbits.RD1
#define COL1  PORTDbits.RD2
#define COL2  PORTDbits.RD3
#define COL3  PORTDbits.RD4

#define ROW0  PORTDbits.RD6
#define ROW1  PORTDbits.RD7
#define ROW2  PORTDbits.RD12
#define ROW3  PORTDbits.RD13


//Teclado
 char codigo, tecla;
 char TECLADO [16]={'1','2','3','C',
                   '4','5','6','D',
                   '7','8','9','E',
                    '*','0','#','F'};

// función que explora todo el teclado
char explorar_teclado ()
{
PORTD=0xFd;
codigo=PORTD;
 if(ROW0==0)
   return 1;                     // si se presiono el uno devuelve 1
   if(ROW1==0)
   return 4;                     // si se presiono el cuatro devuelve 4
   if(ROW2==0)
   return 7;                     // si se presiono el siete devuelve 7
   if(ROW3==0)
   return 10;                    // si se presiono el * devuelve 10

PORTD=0xFb;
codigo=PORTD;   // guarda valor de puerto D en variable
   if(ROW0==0)
   return 2;                     // si se presiono el dos devuelve 2
   if(ROW1==0)
   return 5;                     // si se presiono el cinco devuelve 5
   if(ROW2==0)
   return 8;                     // si se presiono el ocho devuelve 8
   if(ROW3==0)
   return 0;                     // si se presiono el cero devuelve 0
               
   PORTD=0xF7;
codigo=PORTD;
   if(ROW0==0)
   return 3;                     // si se presiono el tres devuelve 3
   if(ROW1==0)
   return 6;                     // si se presiono el seis devuelve 6
   if(ROW2==0)
   return 9;                     // si se presiono el nueve devuelve 9
   if(ROW3==0)
   return 11;                    // si se presiono el # devuelve 11
                 
   PORTD=0xEf
codigo=PORTD
   if(ROW0==0)
   return 12;                    // si se presiono la A devuelve 12 = C
   if(ROW1==0)
   return 13;                    // si se presiono la B devuelve 13 = D
   if(ROW2==0)
   return 14;                    // si se presiono la C devuelve 14 = E
   if(ROW3==0)
   return 15;                    // si se presiono el D devuelve 15 = F

}

int main (void)
{
mPORTDSetPinsDigitalIn (BIT_1 | BIT_2| BIT_3 |BIT_4);   // Los pines seleccionados se ponen como entrada
mPORTDSetPinsDigitalOut (BIT_0 | BIT_5 | BIT_6 | BIT_7 | BIT_12);// los pines seleccionados son salidas
  PORTD=0;   //inicializa puerto D
  mPORTESetPinsDigitalOut (BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_5 | BIT_6 | BIT_7);          // define puerto e como todas salidas
  PORTE=0;                     // inicializa puerto E


 while(1)           
 {
  PORTE=explorar_teclado(); // explora si se presiona pulsador en teclado y lo muestra en el puerto E
}
}

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Tengo Problema en PIc 32 con teclado matricial 4*4
« Respuesta #1 en: 07 de Octubre de 2010, 22:13:26 »
Hola

Hay unos pines compartidos con JTAG y deben habilitarse como I/O. Prueba cambiándolos...

Código: [Seleccionar]
   //Habilita la caché de lectura ROM
   SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);

   //Deshabilita los pines de programación JTAG
   //Hace que las terminales RB10, RB11, RB12 y RB13 sean I/O
   DDPCONbits.JTAGEN = 0;

Desconectado alex_angeluz01

  • PIC10
  • *
  • Mensajes: 14
Re: Tengo Problema en PIc 32 con teclado matricial 4*4
« Respuesta #2 en: 08 de Octubre de 2010, 01:07:39 »
lo cambie y sigue igual por ejemplo como esta en portd me muestra
00000000 00000000 00000000 11100001
osea como lo tengo configurada va a ser que me muestre en portE la tecla 7
ya que el pin 6 y 7 están en alto y el que se encuentra en bajo es el 12 y 13 y como revisamos en col 0 que es pin 1 esta bajo y el primero que el ve que se encuentra en bajo es la tecla 7 me muestra tecla 7 pero se queda alli
ya que fila0 esta en pinD6
fila1 en pinD7
fila2 pinD12
fila3 pind13