Microcontroladores - Teclado Matricial PIC 18F4550

 
Vista:
sin imagen de perfil

Teclado Matricial PIC 18F4550

Publicado por Pablo (1 intervención) el 16/05/2023 16:40:53
Hola, necesito ayuda con un código de mi teclado matricial, tengo que mandar a prender un display de 4 exhibidores ánodo común de 7 segmentos, lo que quiero que haga es que cuando presione una tecla del teclado, se guarde en el primer exhibidor y si presiono otra tecla, se guarde en el segundo exhibidor, este es el código que tengo, lo que hace es si presiono una tecla, se muestra en los 4 exhibidores.
#include <18F4550.h>
#fuses INTRC, NOWDT, CPUDIV1, PLL1,NOPROTECT
#use delay(internal= 4M)
#use FIXED_IO(D_outputs = PIN_D7, PIN_D6, PIN_D5, PIN_D4, PIN_D3, PIN_D2, PIN_D1,PIN_D0)
#use FIXED_IO(B_outputs = PIN_B3, PIN_B2, PIN_B1, PIN_B0)

void main()
{
int8 a,b,c; //a-barrido de columnas //b tecla presionada //c leer respuestas del teclado
int8 vect_anodo[16]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0xCC, 0x88,0x83, 0xC6, 0xA1,0x86, 0x8E};


output_d(0x3F);//0011 1111
while(TRUE)
{
b=255;//tecla no presionada
for(a=0x0E; a<0x0F; a=(2*a+1) & 0x0F)
{
output_b(a);
c=input_b()&0xF0;
if(c!=0xF0)
{
b=a|c;
switch(b)
{
case 0xE7: b=14; break;
case 0xED: b=15; break;
case 0xEB: b=0; break;
case 0xEE: b=13; break;

case 0xD7: b=7; break;
case 0xDB: b=8; break;
case 0xDD: b=9; break;
case 0xDE: b=12; break;

case 0xB7: b=4; break;
case 0xBB: b=5; break;
case 0xBD: b=6; break;
case 0xBE: b=11; break;

case 0x77: b=1; break;
case 0x7B: b=2; break;
case 0x7D: b=3; break;
case 0x7E: b=10; break;
default: b=255; //tecla no presionada
}
}
}

if (b!=255)
{
output_d(vect_anodo[b]);//valor que se manda al puerto D
output_c(0b11110000); // Enciende los exhibidores en C7, C6, C5 y C4
delay_us(250);
}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder