Autor Tema: separar digitos  (Leído 7146 veces)

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

Desconectado championx

  • PIC10
  • *
  • Mensajes: 22
separar digitos
« en: 03 de Octubre de 2005, 01:56:00 »
que tal amigos, tengo una duda, como puedo hacer para separar en 2 digitos una variable?

por ejemplo:
tengo una variable dato=25;
y quiero separar el 25 en dos digitos para luego mostrarlos por separado en dos displays de 7 segmentos, alguien tiene idea de como se hace esto?

gracias!

Desconectado El_Coach

  • PIC12
  • **
  • Mensajes: 79
RE: separar digitos
« Respuesta #1 en: 03 de Octubre de 2005, 03:06:00 »
para separar en dos digitos divide entre 10 y luego resta:


int a, b, c;

a= 25;

b= 25/10;    //b valdrá 2

c= 25 - (b*10);    //c valdrá 5


Seguramente alguien sabrá una forma mejor para hacerlo, pero es la única que se me ocurre en este momento.
Para mostrar un dígitos por un display de 8 segmentos creo recordar que habrá que transformar el número a código BCD.

Un saludo
"Hazlo o no lo hagas, pero nunca lo intentes"

Desconectado mirazulado

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 142
RE: separar digitos
« Respuesta #2 en: 03 de Octubre de 2005, 08:18:00 »
Esta es la rutina que yo utilizo para imprimir o descomponer una variable de dos o tres digitos en sus unidades para imprimirlas, en este caso, en un LCD, pero se puede utilizar para cualquier cosa:

void actualizar(int dato){
   LCD_FunctionMode();
   Lcdw(set_dd_line1+11);       // coloco el cursor del LCD en la linea 1 + 11 caracteres.

   LCD_DataMode();
   Lcdw(48+(dato)/100);          // imprimo el valor ASCI 48 ("0"Giño + dato dividido 100 o sea si dato = 254, dato/100=2.
 
   Lcdw(".");                              // imprime "." ya que la funcion imprime tiempo.

   Lcdw(48+((dato)/10)%10); // imprime ASCI 48 "0" + (dato/10)%10 .. esto es 254/10=25 y 25%10 es igual a 5.. "%" es el resto de la division 25/10 te da 2 y resto 5..

   Lcdw(48+(dato%10));  // 254%10=4 o sea 254/10 es igual a 25 y 4 de resto
   Lcdw("s");                     // imprime "s" de segundos..

}

Espero se entienda !! si tenes variable de 16 o 32 bits agregas mas divisiones y listo !

Saludos Mariano


Desconectado pachopic

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 207
RE: separar digitos
« Respuesta #3 en: 10 de Octubre de 2005, 07:27:00 »
HOLA:

tambien puedes utilizar la operacion modulo, ir guardando los numeros en un arreglo:     HeladoHeladoHeladoHeladoHeladoHeladoHeladoHeladoHelado

Codigo:

int bcd_dato[5];      // arreglo de 5 elementos para almacenar los digitos

void bin_dec5(long int n)// el numero a convertir es un entero largo
{
  int i;                     // indice del arreglo unidades=bcd_dato
  • ,d=[1],...m=[5]
      for(i=0;i<5;i++)   // llena el arreglo con los valores uni,dec,cen,mil,diezm
      {                         // despues de cada operacion se incrementa el indice
       bcd_dato=n%10;// mediante la operacion modulo se obtiene el, i digito decimal
       n=n/10;             // n dividido 10 para cada i y tomamos su valor entero:
       }                        // por ejemplo  para i=0,  4358 mod 10 =8, luego 4358/10 =435
    }                           // para i=1, 435 mod 10=5,435/10=43 luego 43 mod 10=3


luego al separar el numero 4835,en cada posicion del arreglo estaran guardados los  digitos:

bcd_dato[0]=8
bcd_dato[1]=5
bcd_dato[2]=3
bcd_dato[3]=4

la i puede incrementarse dependiendo de que tan grande sea el numero a separar...

saludos...


 

anything