Autor Tema: Convertir un array en un entero  (Leído 3066 veces)

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

Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Convertir un array en un entero
« en: 14 de Febrero de 2010, 11:35:57 »
Hola,alguien me podria decir si el siguiente problema tiene alguna solucion:

Código: [Seleccionar]
#include <16f877a.h>
#fuses XT,NOPROTECT,PUT,BROWNOUT,NOLVP
#use delay(clock=4000000)
#include <flex_lcd.c>
#include <stdlib.h>
#use standard_io(b)
#byte portb=6
#define columna1 !input(PIN_B4)
#define columna2 !input(PIN_B5)
#define columna3 !input(PIN_B6)
//#define columna4 !input(PIN_B7)

char teclas[3];
char buffer=0;
int a;
int32 Buffer_ent=0;

char leer_teclado(void)
{
while(1)
   {
   portb=0b1110;
   if(columna1){ while(columna1); return '1';}//Saca un 1 y no hace nada mientras se mantiene oprimido el pulsador
   if(columna2){ while(columna2); return '2';}
   if(columna3){ while(columna3); return '3';}
   //if(columna4){ while(columna4); return 'F';}
   portb=0b1101;
   if(columna1){ while(columna1); return '4';}
   if(columna2){ while(columna2); return '5';}
   if(columna3){ while(columna3); return '6';}
   //if(columna4){ while(columna4); return 'E';}
   portb=0b1011;
   if(columna1){ while(columna1); return '7';}
   if(columna2){ while(columna2); return '8';}
   if(columna3){ while(columna3); return '9';}
   //if(columna4){ while(columna4); return 'D';}
   portb=0b0111;
   if(columna1){ while(columna1); return '*';}//o 'A'
   if(columna2){ while(columna2); return '0';}
   if(columna3){ while(columna3); return '#';}
   //if(columna4){ while(columna4); return 'C';}
   }
return 0;
}

main()
{
set_tris_b(0xf0);
port_b_pullups(TRUE);
lcd_init();
lcd_putc("Convirtiendo un\nbuffer en entero");
delay_ms(2000);
lcd_putc("\f");
   while(1)
   {
   while(buffer<=3)
   {
   teclas[buffer]=leer_teclado();
   Buffer_ent=atoi32(teclas);
   printf(lcd_putc,"%c\nBuffer_ent=%02ld",teclas[buffer],Buffer_ent);
   ++buffer;
   if(buffer==1)lcd_gotoxy(1,2);
   if(buffer==2)lcd_gotoxy(1,3);
   }
   buffer=0;
   lcd_gotoxy(1,1);
   }
}


Convierto lo q hay en un buffer en un entero y lo muestro en el LCD,lo que quiero hacer es q la variable buffer_ent se actualice cada vez que se oprima una tecla y lo hace pero no se muestra en la parte de arriba del LCD sino solo el primer digito de este entero,tiene algun arreglo?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Convertir un array en un entero
« Respuesta #1 en: 14 de Febrero de 2010, 14:21:53 »
Para convertir una array a entero puedes usar la función:

atoi    a 8bits
atoi16 a 16bits

Están dentro la librería stdlib.h, tendrías que incluirla en tu cabezera.

y quizá después muestres el valor con un printf:

printf(lcd_putc,"valor = %u",var_entera)  //en caso de 8bits
printf(lcd_putc,"valor = %lu",var_entera)  //en caso de 16bits

saludos.
.

Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Re: Convertir un array en un entero
« Respuesta #2 en: 14 de Febrero de 2010, 20:01:55 »
Si ok Cryn es lo que uso,convertir convierte,pero yo coloque en la 1° linea del lcd lo que se va pulsando en teclado y que se carga en el array y en la segunda la variable entera que resulta de ese array,el tema que yo quiero es que se actualice este ultimo dato con cada pulsacion y no cuando buffer=3 o sea cuando se llena el buffer o array y no se como hacerlo este detalle pero gracias = por la respuesta  :)  Salu2!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Convertir un array en un entero
« Respuesta #3 en: 14 de Febrero de 2010, 20:39:10 »
Yo creo que así se soluciona:

Código: C
  1. while(1){
  2.    while(buffer<=3){
  3.    k=leer_teclado();
  4.    if(k!=0){
  5.        teclas[buffer]=k;
  6.        Buffer_ent=atoi32(teclas);
  7.        printf(lcd_putc,"%c\nBuffer_ent=%02ld",teclas[buffer],Buffer_ent);
  8.        ++buffer;
  9.        if(buffer==1)lcd_gotoxy(1,2);
  10.        if(buffer==2)lcd_gotoxy(1,3);
  11.    }
  12.    }
  13.    buffer=0;
  14.    lcd_gotoxy(1,1);
  15.    }


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Re: Convertir un array en un entero
« Respuesta #4 en: 14 de Febrero de 2010, 21:12:28 »
No amigo Suky doy fe de que no funciona eso tampoco  :? observa la simulacion:
Saludos!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Convertir un array en un entero
« Respuesta #5 en: 15 de Febrero de 2010, 00:04:07 »
No puedo abrir el *.dns, yo uso la 7.4 (Aparentemente el mas completo  :mrgreen: )


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Trev

  • PIC16
  • ***
  • Mensajes: 115
Re: Convertir un array en un entero
« Respuesta #6 en: 15 de Febrero de 2010, 01:09:21 »
Yo tengo la version "roja" 7.5 es mas reciente por eso no puedes pero bueno es un teclado 3x4 y un lcd conectado al portd como siempre..en fin tengo siempre el problema con los lcd cuando no quiero borrar toda la pantalla y al mismo tiempo "recordar" donde estaba el cursor antes de borrar algun caracter pero me parece que no hay una funcion en c q haga esto,..esto de no poder ver el asm de estas funciones no me gusta quiza me haga mi propia funcion y eso de usar una variable y despues retroceder el cursor ya vi como no funciona y deberia,en fin nos vemos


 

anything