Autor Tema: Ceros a la derecha  (Leído 1604 veces)

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

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Ceros a la derecha
« en: 11 de Mayo de 2009, 20:51:24 »
Amigos, seguro es un error tonto pero no logro darme cuenta.
Tengo un int16 representado en un LCD. Uso la librería lcd.c y cuando incremento el numero anda al pelo, cuando lo decremento, al pasar de 100 a 99 me deja el 0 a la derecha, es decir, queda 990.. lo mismo pasa al pasar de 10 a 9, me deja 90, mas el cero de antes 900..
No se que será... el codigo es este

#include "C:\Documents and Settings\nico\Mis documentos\Luxometro\main.h"

void teclado()
{
   while(!input(Tmas))
   {
   if (Vduty < 1023)
      {
      Vduty=Vduty+1;
      set_pwm1_duty(Vduty);
      lcd_gotoxy(1,2);  //muevo cursor a segunda linea
      printf(lcd_putc,"%lu",Vduty);
      delay_ms(50);
      }
   }
   
   while(!input(Tmenos))
   {
   if (Vduty > 0)
      {
      Vduty=Vduty-1;
      set_pwm1_duty(Vduty);
      lcd_gotoxy(1,2);  //muevo cursor a segunda linea
      printf(lcd_putc,"%lu",Vduty);
      delay_ms(50);
      }
   }
}

void main()
{
//Configuracion de puertos

   setup_oscillator(OSC_4MHZ);
   //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   //setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_1,249,1);
   setup_ccp1(CCP_PWM);
   //setup_comparator(NC_NC_NC_NC);
   //setup_vref(FALSE);

   lcd_init();                //inicio lcd
   Lcd_putc ("Lux. RAA");
   lcd_gotoxy(1,2);  //muevo cursor a segunda linea
   printf(lcd_putc,"%lu",Vduty);

loop:

   teclado();
   goto loop;
}


El main.h tiene esto

#include <16F628a.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOPUT                    //No Power Up Timer
//#FUSES BANDGAP_HIGH         
#use delay(clock=4000000)

unsigned int16 Vduty=50;

//Teclado
#define Tmas PIN_A1   //tecla
#define Tmenos PIN_A2 //telca
#define led PIN_B3   //led
#define led_power PIN_A3
// LCD
#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7
#define LCD_RS     PIN_B1
#define LCD_RW    PIN_B2
#define LCD_E      PIN_B0
//#define set_tris_d   

#include "lcd.c"

Muchisimas gracias de antemano a todos..
Saludos
N
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ceros a la derecha
« Respuesta #1 en: 11 de Mayo de 2009, 20:58:57 »
Se te olvidó limpiar la LCD...

Código: [Seleccionar]
printf(lcd_putc,"\f%lu",Vduty);
Hazlo con diagonal f.

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Ceros a la derecha
« Respuesta #2 en: 11 de Mayo de 2009, 21:03:47 »
Gracias mig, sos un capo.. no sabia que se podia meter el \f en medio de la instruccion.
Ahora voy a meter un \p para pasar esto abajo y meter en le fila de arriba un texto permanete.
Muchisimas gracias por tu lucidez.
saludos
N

AGREGO: Ha quedado asi

printf(lcd_putc,"\fLux RAA\n%lu",Vduty);

Espectacular!!
« Última modificación: 11 de Mayo de 2009, 21:06:49 por vasconinicolas »
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Ceros a la derecha
« Respuesta #3 en: 11 de Mayo de 2009, 21:15:58 »
No es lucidez, es experiencia. Lee el manual de CCS, ahí viene todo.  :wink: