Que explicacion, muchas gracias. Ahora esta me quedo claro.
Ahora habilite una linea y verifico cada columna para ver si se presiono algun pulsador.
Hasta ahi funciona perfecto, Lo que hice es verificar y asignar a una variable la el numero de tecla presionada.
Para verificarlo puse una condicio abajo con Tecla = 1 y entra pero cuando quiero prender la salida A4 y A5, el proteus solo me muestra durante esos 5 segundos la ultima pata A5 y la pata A4 queda apagada.
Estoy configurando algo mal?
void main(void) {
int8 paso=0;
byte Tecla = 1;
byte tmp;
set_tris_a(0b0011111);
set_tris_b(0x00);
port_a=0x00;
port_b=0x00;
while(true) {
//if(!input(PIN_A0)&&!input(PIN_A1)&&!input(PIN_A3)&&!input(PIN_A4))
paso++;
Tecla = 0;
if(paso==1) {
output_bit(PIN_B0,1);
output_bit(PIN_B1,0);
output_bit(PIN_B2,0);
output_bit(PIN_B3,0);
if(input(PIN_A0)) {
Tecla = 1;
} else if(input(PIN_A1)) {
Tecla = 2;
} else if(input(PIN_A3)) {
Tecla = 3;
} else if(input(PIN_A4)) {
Tecla = 4;
}
}else if(paso==2) {
output_bit(PIN_B0,0);
output_bit(PIN_B1,1);
output_bit(PIN_B2,0);
output_bit(PIN_B3,0);
if(input(PIN_A0)) {
Tecla = 5;
} else if(input(PIN_A1)) {
Tecla = 6;
} else if(input(PIN_A3)) {
Tecla = 7;
} else if(input(PIN_A4)) {
Tecla = 8;
}
}else if(paso==3) {
output_bit(PIN_B0,0);
output_bit(PIN_B1,0);
output_bit(PIN_B2,1);
output_bit(PIN_B3,0);
if(input(PIN_A0)) {
Tecla = 9;
} else if(input(PIN_A1)) {
Tecla = 10;
} else if(input(PIN_A3)) {
Tecla = 11;
} else if(input(PIN_A4)) {
Tecla = 12;
}
}else if(paso==4) {
output_bit(PIN_B0,0);
output_bit(PIN_B1,0);
output_bit(PIN_B2,0);
output_bit(PIN_B3,1);
paso=0;
if(input(PIN_A0)) {
Tecla = 13;
} else if(input(PIN_A1)) {
Tecla = 14;
} else if(input(PIN_A3)) {
Tecla = 15;
} else if(input(PIN_A4)) {
Tecla = 16;
}
}
delay_ms(500);
if(Tecla == 1) {
output_high(PIN_B4);
output_high(PIN_B5);
delay_ms(5000);
}
// if(bit_test(port_b,7) == 1) {
// Tecla = 1;
// }
//}
//if(Tecla==1) {
//}
}
}