TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: mikipic en 10 de Enero de 2013, 16:51:05

Título: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
Publicado por: mikipic en 10 de Enero de 2013, 16:51:05
Buenas tardes que tal. Estoy trabajando con el PIC 16f877a y la libreria del teclado matricial de ccs. Quiero ingresar un numero por dicho teclado, para luego hacer otras cosas con ese numero ( multiplicar, dividir etc).

El problema es que con la libreria solo me permite ingresar datos de tipo char con "while kbhit()".

Lo que quiero hacer es ingresar un numero de 3 digitos y almancenarlo para luego procesarlo. por ejemplo

Código: [Seleccionar]



int i=0;

while(i<2)
{


k=kbd_getc();

if (k!=0)
{
     
   data[i]=k;
   lcd_putc("*");
   
   delay_ms(400);
   i++;
     
}

}




Entonces ya tendria almacenado en mi arreglo data[] de 3 caracteres. Por ejemplo si fuera :

data[0]= ' 4'
data[1]='5'
data[2]='6'

lo que quisiera es almacenar en una variable int NUMERO = 456 (como entero) para luego trabajarlo como un entero(multiplicarlo dividirlo sumarlo etc) ....

y tambien como seria si quiero ingresar un numero float como 4.56???


muchas gracias
Título: Re: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
Publicado por: mikipic en 10 de Enero de 2013, 16:53:48
Hice un intento usando la libreria stdlib.h y la funcion atoi pero aun no logro hacer la conversion.

este es el codigo, ojala puedan decirme lo que este mal y que deberia corregir.

Código: [Seleccionar]



/////////////////////////////////////////////
//
//
//
/////////////////////////////////////////////
#include <16f877a.h>
# DEVICE ADC=10
#fuses xt,nowdt
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)// RS232 Estándar

///////////////////////////////////////////////////////////////
//LIBRERIAS DEL COMPILADOR CCS PARA MANEJO DE PERIFÉRICOS EXTERNOS
///////////////////////////////////////////////////////////////
#include <lcd420_miki.c>
#define use_portb_kbd true
#include <kbd_lib_punto.c>
#include <stdlib.h>
///////////////////////////////////////////////////////////////
//ENTRADAS SALIDAS
///////////////////////////////////////////////////////////////

# USE FAST_IO(A)
# USE FAST_IO(B)
# USE FAST_IO(C)

main()


{

///////////////////////////////////////////////////////////////
//VARIABLES//
///////////////////////////////////////////////////////////////
char data[];

int i=0;
int uni;
int dec;
int cen;
int numero;



char k;


/////////////////////////////////
//INICIALIZANDO PERIFERICOS /////
/////////////////////////////////
lcd_init();
kbd_init();
port_b_pullups(true);

//////////////////////////////

////////////////////////////////////////////////////////////////////
//INGRESO EL UN NUMERO ENTERO DE 3 DIGITOS MEDIANTE EL TECLADO MATRICIAL
///////////////////////////////////////////////////////////////////
printf(lcd_putc,"ingrese el numero \n");


while(i<2)
{


k=kbd_getc();

if (k!=0)
{
     
   data[i]=k;
   lcd_putc("*");
   
   delay_ms(200);
   i++;
     
}

}


/////////////////////////////////////////////
cen = data[0];
dec = data[1];
uni = data[2];
////////////////////////////////////////////

cen=atoi(cen);
dec=atoi(dec);
uni=atoi(uni);
numero= cen*100+ dec*10 + uni*1;




printf(lcd_putc,"%d",numero);




}







Título: Re: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
Publicado por: rivale en 10 de Enero de 2013, 16:55:12
para convertir un ascii a entero puedes usar la funcion atoi(), y para convertir a flotante usa la funcion atol()

para usarlas necesitas incluir la libreria stdlib
Título: Re: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
Publicado por: rivale en 10 de Enero de 2013, 17:00:10
puedes convertir directamente sin necesidad de convertir las unidades, decenas y centenas por separado

numero=atoi(data)

también debes considerar que tu variable numero debe tener la capacidad suficiente para que tu numero quepa, es decir, si es un entero signado solo caben hasta 127, si es no signado hasta 255

o si necesitas numeros mayores, usa la funcion atol
Título: Re: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
Publicado por: willynovi en 10 de Enero de 2013, 17:22:21
Mas lo que te dice el amigo rivale, que es lo que te indica el LCD?

No veo porque no debería funcionar, pero sabiendo cual es la salida por el LCD quizás podemos encontrar el error.