EJEMPLO TECLADO MATRICIAL 4X4

#include <18F4550.h> // Definición de registros internos.
#fusesXT,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOPBADEN
#use delay (clock=4000000)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)     //   con esta instruccion evitamos que
#use fast_io(D)     //   se este configurando cada vez que usamos
#use fast_io(E)     //   alguna instruccion de entrada o salida
#byte porta=0xf80
#byte portb=0xf81
#byte portc=0xf82
#byte portd=0xf83
#byte porte=0xf84


#int_rb
void control_rb()
{
disable_interrupts(global);
if (input(pin_b4)==0)
{
//COLUMNA 1
   portb=0b00001110;
   if (input(pin_b4)==0) portd=1;
   portb=0b00001101;
   if (input(pin_b4)==0) portd=4;
   portb=0b00001011;
   if (input(pin_b4)==0) portd=7;
   portb=0b00000111;
   if (input(pin_b4)==0) portd=10;
   portb=0;

}
else if (input(pin_b5)==0)
{
//COLUMNA 2
   portb=0b00001110;
   if (input(pin_b5)==0) portd=2;
   portb=0b00001101;
   if (input(pin_b5)==0) portd=5;
   portb=0b00001011;
   if (input(pin_b5)==0) portd=8;
   portb=0b00000111;
   if (input(pin_b5)==0) portd=0;
   portb=0;

}
else if (input(pin_b6)==0)
{
//COLUMNA 3
   portb=0b00001110;
   if (input(pin_b6)==0) portd=3;
   portb=0b00001101;
   if (input(pin_b6)==0) portd=6;
   portb=0b00001011;
   if (input(pin_b6)==0) portd=9;
   portb=0b00000111;
   if (input(pin_b6)==0) portd=11;
   portb=0;
   }
else if (input(pin_b7)==0)
{
//COLUMNA 4
   portb=0b00001110;
   if (input(pin_b7)==0) portd=12;
   portb=0b00001101;
   if (input(pin_b7)==0) portd=13;
   portb=0b00001011;
   if (input(pin_b7)==0) portd=14;
   portb=0b00000111;
   if (input(pin_b7)==0) portd=15;
   portb=0;
  }
delay_ms(350);
enable_interrupts(global);
}

void main (void)
{
Setup_adc_ports(NO_ANALOGS);
set_tris_b(0b11110000); //RB4 - RB7 COMO ENTRADAS Y RBO - RB3 COMO SALIDAS
set_tris_d(0b00000000); //PUERTO D COMO SALIDAS
port_b_pullups(true);   //PULL-UP ACTIVADAS EN EL PUERTO B
portb=0;
portd=0;
enable_interrupts(int_rb); //HABILITAMOS INTERRUPCION POR RB
enable_interrupts(global); //HABILITAMOS INTERRUPCIONES GLOBALES
while(1)
{
sleep();
}
}

No hay comentarios:

Publicar un comentario