Hola a todos. He estado jugando un poco con PICC y el teclado matricial 4x4 y logré que la tecla presionada apareciera en un display 7 segmentos.
El siguiente paso que he intentado dar pero nada que sale, es poder guardar un número de tres cifras <=255 (8 bits) para poder mostrarlo en una pantalla o enviarlo como parámetro a una función cualquiera.
En la web ya he visto algunas métodos pero usan la librería especial para eso; eso es lo que no quiero.
Les dejo el código, ya está probado y funciona a la perfección.
He pensado en hacer una función que acumule los valores ingresados.
Algo así
Pero no funciona. Espero que me puedan ayudar para solucionar este problema.
Les agradezco mucho. Estoy usando el PIC16F877A
El siguiente paso que he intentado dar pero nada que sale, es poder guardar un número de tres cifras <=255 (8 bits) para poder mostrarlo en una pantalla o enviarlo como parámetro a una función cualquiera.
En la web ya he visto algunas métodos pero usan la librería especial para eso; eso es lo que no quiero.
Les dejo el código, ya está probado y funciona a la perfección.
Código:
#include "main.h"
#byte PORTB=6
#byte PORTD=8
void main()
{
int teclado;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_b(0x0F); //RB7_RB4 Salidas RB3_RB0 Entradas
set_tris_d(0);
portd=0xff;
while(TRUE)
{
portb=0x00;
portb=0x8F;
if(input(pin_b3)==1)
{
teclado=0x01;
}
else
{
if(input(pin_b2)==1)
{
teclado=0x02;
}
else
{
if(input(pin_b1)==1)
{
teclado=0x03;
}
else
{
if(input(pin_b0)==1)
{
teclado=0x0a;
}
else
{
portb=0x4f;
if(input(pin_b3)==1)
{
teclado=0x04;
}
else
{
if(input(pin_b2)==1)
{
teclado=0x05;
}
else
{
if(input(pin_b1)==1)
{
teclado=0x06;
}
else
{
if(input(pin_b0)==1)
{
teclado=0x0b;
}
else
{
portb=0x2f;
if(input(pin_b3)==1)
{
teclado=0x07;
}
else
{
if(input(pin_b2)==1)
{
teclado=0x08;
}
else
{
if(input(pin_b1)==1)
{
teclado=0x09;
}
else
{
if(input(pin_b0)==1)
{
teclado=0x0c;
}
else
{
portb=0x1f;
if(input(pin_b3)==1)
{
teclado=0x7e;
}
else
{
if(input(pin_b2)==1)
{
teclado=0x00;
}
else
{
if(input(pin_b1)==1)
{
teclado=0x7e;
}
else
{
if(input(pin_b0)==1)
{
teclado=0x0d;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
switch(teclado)
{
case 0: portd=0x01;
break;
case 1: portd=0x4f;
break;
case 2: portd=0x12;
break;
case 3: portd=0x06;
break;
case 4: portd=0x4c;
break;
case 5: portd=0x24;
break;
case 6: portd=0x20;
break;
case 7: portd=0x0f;
break;
case 8: portd=0x00;
break;
case 9: portd=0x0c;
break;
case 10: portd=0x08;
break;
case 11: portd=0x60;
break;
case 12: portd=0x31;
break;
case 13: portd=0x42;
break;
default: portd=0x7e;
break;
}
}
}
Algo así
Código:
float valor_teclado()
{
conta1++; //los "conta" sirven para saber el numero de pulsaciones...supuestamente
if(conta1>1)
{
conta2++;
if(conta2>1)
{
conta3++;
acc3=teclado;
}
else
{
acc2=10*teclado;
}
}
else
{
acc1=100*teclado;
}
return (acc1+acc2+acc3);
}
Les agradezco mucho. Estoy usando el PIC16F877A
Última edición por un moderador: