Autor Tema: ingresar un numero(caracter) por teclado matricial y convertirlo a entero  (Leído 10381 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mikipic

  • PIC10
  • *
  • Mensajes: 19
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

Desconectado mikipic

  • PIC10
  • *
  • Mensajes: 19
Re: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
« Respuesta #1 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);




}








Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
« Respuesta #2 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
« Respuesta #3 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: ingresar un numero(caracter) por teclado matricial y convertirlo a entero
« Respuesta #4 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.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.


 

anything