#include <xc.h>
#define _XTAL_FREQ 1000000
#pragma config FOSC=INTOSC_EC
#pragma config WDT=OFF
#pragma PBADEN=OFF
#define fila1 RB0
#define fila2 RB1
#define fila3 RB2
#define columna1 RB5
#define columna2 RB6
#define columna3 RB7
unsigned char teclado;
void __interrupt() ISRL();
void fila1_ON();
void fila2_ON();
void fila3_ON();
void main (){
TRISD=0;
LATD=0;
TRISB=0b11110000;
LATB=0b11110000;
RBPU=0;//prender resistencias de pull-up
teclado=PORTB;
RBIF=0; //borrar bandera
RBIE=1; //habilitar interrupciones de cambio en el puerto B
GIE=1;
while(1){
}
}
void __interrupt() ISRL(){
if(RBIF==1){
teclado=PORTB;
RBIF=0;
if((teclado&0b11100000)!=0b11100000){
fila1=0; fila2=0; fila3=0;
while(columna1==1 && columna2==1 && columna3==1){
}
fila1_ON();
if(columna1==0) LATD=0x06; //num1
if(columna2==0) LATD=0x5b; //num2
if(columna3==0) LATD=0x4f; //num3
fila2_ON();
if(columna1==0) LATD=0x66; //num4
if(columna2==0) LATD=0x6d; //num5
if(columna3==0) LATD=0x7c; //num6
fila3_ON();
if(columna1==0) LATD=0x07; //num7
if(columna2==0) LATD=0x7f; //num8
if(columna3==0) LATD=0x67; //num9
}
}
}
void fila1_ON(){
fila1=0;
fila2=1;
fila3=1;
}
void fila2_ON(){
fila1=1;
fila2=0;
fila3=1;
}
void fila3_ON(){
fila1=1;
fila2=1;
fila3=0;
}