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