TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: alex_angeluz01 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
// 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
}
}
-
Hola
Hay unos pines compartidos con JTAG y deben habilitarse como I/O. Prueba cambiándolos...
//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;
-
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