MUY BUENAS A TODOS!!!
soy nuevo en este foro, y weno el caso es q tengo un problemilla a la hora de tomar valores desde un teclado matricial 4x4, os explico:
Trabajo con un PIC16f876 y el compilador CCS de C y conectando el teclado al puerto b, tengo ke conseguir introducir un valor de dos numeros (ej:12 o 45 o 36 o...) y al pulsar la tecla A que me lo almacene en una cadena, de forma que luego, con un atoi pueda coger esos dos datos de la cadena y hacer un entero, es decir:
si pulso en el teclado 1,2 y luego A, kiero ke la cadena corresponda a :
char cadena[2]={'1','2'};
para luego con otra variable haga:
int valor= atoi (cadena);
y obtenga=> valor=12
lo que necesito es saber como hacer que el teclado me asigne el 1 y el 2 a esa cadena, que no encuentro al forma.
la libreria de teclado es la siguiente:
__________________________________________________________________________________________________
/*-------------------------------------------*\
| KBD2.C |
| Autor: Pedro Mª Jiménez |
| (c) Microsystems Engineering (Bilbao) |
\*-------------------------------------------*/
// Funciones para la gestión del teclado de la Trainer PLUS.
// char kbd_getc( )Devuelve el código ASCII de la tecla pulsada.
//Si no se pulsó ninguna, devuelve 0.
// Conexiones del teclado.
/*
RB0 RB1 RB2 RB3
^ ^ ^ ^
| | | |
|---|---|---|---|
RB4 ---> | 1 | 2 | 3 | F |
|---|---|---|---|
RB5 ---> | 4 | 5 | 6 | E |
|---|---|---|---|
RB6 ---> | 7 | 8 | 9 | D |
|---|---|---|---|
RB7 ---> | A | 0 | B | C |
|---|---|---|---|
*/
// Caracteres ASCII asociados a cada tecla:
char const KEYS[4][4] = {{'1','2','3','F'} ,
{'4','5','6','E'} ,
{'7','8','9','D'} ,
{'A','0','B','C'} };
#byte kbd_port_b = 6
char kbd_getc( )
{
char tecla=0;
int f,c,t,i,j;
port_b_pullups(true);
set_tris_b(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas
for(f=0x10, i=0; i<4; f<<=1, i++)
{
for(c=0x01, j=0; j<4; c<<=1, j++)
{
kbd_port_b = ~f;
delay_cycles(1);
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0 );
if(t == c)
{
delay_ms(20);
tecla=KEYS[i ][j ];
while(t==c)
{
restart_wdt( );
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0) ;
}
break;
}
}
if(tecla)
break;
}
port_b_pullups(false);
return tecla;
}
____________________________________________________________________________________________________
Si alguien me puede aceralguna sugerencia os lo agradeceria...
Muchas gracias de antemano, un saludo!!!!!