Autor Tema: Como mantener el lugar de los digitos en LCD/Panel  (Leído 4430 veces)

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

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
Como mantener el lugar de los digitos en LCD/Panel
« en: 25 de Septiembre de 2004, 07:20:00 »
Hola:
Me he tropezado con el siguiente "problema" con la presentacion de una cifra variable que puede tener 4 o menos digitos,este es el problema en concreto..
Si presento una cifra de 4 digitos con la instruccion dec4 en PLUS cuando la cifra a mostrar es 20 me presenta 0020 ,  y si empleo la instruccion dec solamente, el 20 se desplaza dos lugares hacia la izquierda.No encuentro la forma que los digitos ocupen el espacio que le corresponde es decir el 20 en sus dos ultimas posiciones sin los ceros delante,(como si tuviese 4 disp. de 7 segmentos) me explique o arme una galleta?.

Gracias
Saludos
khasistos

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #1 en: 25 de Septiembre de 2004, 07:45:00 »
y si usas dig .

lcdout Valor dig 1 : lcdout Valor dig 0

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #2 en: 25 de Septiembre de 2004, 07:54:00 »
HOLA:

SIEMPRE TU, GENIO,,,GRACIAS
INTENTARE PRINT AT ,XX, VALOR DIG1: VALOR DIG2 ETC

UN GRAN ABRAZO
KHASITOS

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #3 en: 28 de Septiembre de 2004, 19:03:00 »
Aunque se usen mas variables, a mi me dio mas resultado pasar los valores de cada digito primero antes de llamar a la rutina de mostrar los digitos...

Un abrazo a ambos...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #4 en: 29 de Septiembre de 2004, 12:33:00 »
Hola MG

POR FAVOR MG PUEDES ACLARAR UN POCO MAS TU CONCEPTO ,PUES SI BIEN LO QUE POSTEO SISCO ES CORRECTO VA A MANTENER EL LUGAR DE LOS DIGITOS PERO SIGUE TENIENDO EL INCONVENIENTE DE PRESENTAR CEROS INNECESARIOS,A MENOS QUE LE DIGAMOS COMO CUANDO TRABAJA CON 7 SEGMENTOS ,

LED ES ALIAS DEL PORT

led= dig X,0

if X < 9 then led=15 (PARA APAGAR EL 4511)
if X > 9 then led= dig X,1

if X < 99 then led=15 (PARA APAGAR EL 4511)
if X > 99 then led= dig X,3

Y ASI SUCESIVAMENTE CON 999 ,9999

ESTO FUNCIONA CON LOS 7 SEGMENTOS APAGANDO LOS CEROS INNECESARIOS

CLARO ESTA QUE YA NO SE PODRA USAR EL 15 PARA APAGAR EL BCD DEL 4511 SINO QUE HABRA QUE DECIRLE PRINT "  " ( CARACTER VACIO)

uN ABRAZO
KHASISTOS

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #5 en: 29 de Septiembre de 2004, 12:57:00 »
Una idea .
Codigo:

 digitos con 4  "digitos a mostrar

 for a = digitos-1  to  0 step-1  " imprimimos el mas significativo primero
    tem = Valor dig a
    if tem <> 0 then print tem+"0" else print " "
 next a



No se si está muy bien la sintaxis .

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #6 en: 29 de Septiembre de 2004, 16:02:00 »
Mas facil, no se compliquen:
if flt <= 9 then print "   ",#flt
if flt >9 and flt <= 99 then print "  ",#flt
 if flt >99 and flt <= 999 then print " ",#flt
 if flt >= 1000 then print #flt

con esa comprobacion es mas que suficiente.
ejemplo completo:
     DEVICE=16F628
     CONFIG INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,CP_OFF,BODEN_OFF,LVP_OFF,MCLRE_OFF
     
     ALL_DIGITAL=TRUE "DESHABILITAMOS COMPARADORES ANALOGOS  
     PORTB_PULLUPS=ON "HABILITAMOS PULLUPS  
     
     DECLARE LCD_DTPIN PORTA.0
     DECLARE LCD_ENPIN PORTB.3
     DECLARE LCD_RSPIN PORTA.4  
     
     TRISA=%00000000
     PORTA=%00000000
     TRISB=%00111111
     PORTB=0
     DIM FLT AS word
         

     DELAYMS 300 "ESPERAMOS QUE INICIE LCD
         for flt=0 to 2000 step 10
          cls
           if flt <= 9 then print "   ",#flt
         if flt >9 and flt <= 99 then print "  ",#flt
         if flt >99 and flt <= 999 then print " ",#flt
         if flt >= 1000 then print #flt
         delayms 125
         next
         cls
         print "OK"    
         delay 20000
Salu2

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #7 en: 29 de Septiembre de 2004, 16:49:00 »
Hola Pana

Bien en teoria seria bueno con un LCD ,pero no olvides que estoy usando panel grafico y ahi los caracteres no tienen "casilla" es decir ocupan o son ploteados en espacios no acotados por una matriz fija por ende la definicion del "      " espacios para que no muestre los ceros es critica y dificil de calcular, no te olvides que para que el numero a mostrar en el display se "refresque" hay que agragar la trampa de espacios vacios despues de definir el muestreo ej: print at 0,50 ,x ,"                                  " ,si tu pones en print algo que no cambie por ejemplo print at 0,50 ,"Lager" ahi no hay problema ,pero si lo que quieres es mostrar una variable numerica debes agregar el ejemplo anterior ,al final "                    ",si tu no haces eso se llegan a "pisar " los numeros que ya no muestras con los actuales.Tengan en cuenta esto es muy importante .Si no la otra opcion no muy ortodoxa es la de un CLS pero ello trae aparejado el parpadeo del display cada vez que el el numero a mostrar cambie con el consiguiente problema del borrado de todo lo que tengas en el ....
espero les sirva para no volverse locos ...

Ahora voy a probar el ejemplo de Sisco ...

Gracias pana y demas amigos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #8 en: 29 de Septiembre de 2004, 20:22:00 »
Hola Khasistos.
Entiendo que si tienes un valor de cero en la rutina te ocuparas de ponerle un espacio, de esa forma no veras mas de un cero antes de una coma y tampoco pisaras un numero anterior  cuando el numero se achica demasiado.

Cuidado con el orden, DIG0 es el digito menos significativo y DIG4 el mas significativo, conviene que te hagas una rutina de comparaciones de tu numero para poder mostrar cada digito como corresponde, solo contempla poner un " " en el DIGx que corresponda cuando el numero sea cero a la izquierda no deseado...

Saludos
Mil disculpas, ahora vi que Cisco ya lo habia contestado con su habitual y aguda sencillez... perdon Cisco !!
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #9 en: 29 de Septiembre de 2004, 23:44:00 »
Uso esto para imprimir una frecuencia en un lcd , tambien lo pasé a uno grafico facilmente imprimiendo numeros grandes .
Lo pego y de momento te dara mas ideas .
Es que son las 6 AM , mis clusters de mi cerebro estan todabia en off , y no me veo capaz de pasarlo al basic pero si te gusta lo hacemos en un periquete .

Codigo:

/****************************************/
/*  Escribe Valor numerico al LCD       */
/*  Max 1 a 9 digitos                   */
/*  ceros a la izquierda blancos        */
/*  puno de miles y millones            */
/****************************************/  
/*  ejemplo :  341.000.780   1.886  23  */

  void LCD_PUTUN (unsigned char Digitos , unsigned long valor)
  {
   unsigned char t1,i,wrote;
   unsigned long k;
 
  wrote=0;
  for (i=Digitos-1; i>=1; i--)
     {
     switch(i){

     case 8: k=100000000;
        break;
         case 7: k=10000000;
                   break;
     case 6: k=1000000;
        break;
   case 5: k=100000;  if (Digitos > 6){ if (wrote==1){ LCD_PUTCH(".");} else { LCD_PUTCH(" ");}} // millones
        break;
         case 4: k=10000;        
        break;
     case 3: k=1000;  
        break;
   case 2: k=100;     if (Digitos > 3){ if (wrote==1){ LCD_PUTCH(".");} else { LCD_PUTCH(" ");}} // miles
       break;
   case 1: k=10;
   }
    t1=valor/k;
 
   if((wrote)||(t1!=0)){LCD_PUTCH(t1+"0"); wrote=1;}
    else LCD_PUTCH(" ");                               // Ceros izquierda blanco

    valor-=(t1*k);
   
   }
   LCD_PUTCH( valor +"0");

}



Nada Marquitos , solo he sido un pelin mas rapido al darle

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #10 en: 30 de Septiembre de 2004, 02:56:00 »
No lo he probado pero, ¿no sería lo mismo que printf (LCD_PUTC,"%f9.0",variable)?

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #11 en: 30 de Septiembre de 2004, 10:41:00 »
Ni idea si así funcionaria , aunque MPLAB con los dspic el  printf no puedo usarlo (mas bien no se usarlo)

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #12 en: 30 de Septiembre de 2004, 13:14:00 »
Hola Sisco
Si cuando tus neuronas esten descansadas y libres me gustaria la traduccion al PLUS si es que asi lo deseas.

te mando un gran abrazo
khasistos

Desconectado pocher

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #13 en: 30 de Septiembre de 2004, 14:03:00 »
Nocturno, no no sería lo mismo.

Con el printf escribirías un número por ejemplo de 9 cifras, pero no tendría los puntos (2) separadores de miles y millones.

Otra cosa Sispic. Para que el programa funcione con CCS se tienen que hacer los cambios:

- void LCD_PUTUN (unsigned char Digitos , unsigned long valor) por void LCD_PUTUN (unsigned char Digitos , int32 valor)

- unsigned long k; por int32 k;

Y así funcionará perfectamente.

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Como mantener el lugar de los digitos en LCD/Panel
« Respuesta #14 en: 30 de Septiembre de 2004, 14:10:00 »
si pocher , con C30 los int32  se les llama long , la verdad es que varia muy pocas cosas en cuanto a la sintaxis se refiere .

cuantos digitos usas khasistos ?