Dejo el antiguo ejemplo con el modulo que controla el posicionado del cero a la izquierda que por algún error lo había omitido al pegar el código en el foro.
Define CONF_WORD = 0x2f50 '/* FUSES
Define CONF_WORD_2 = 0x3ffd '*/
Define CLOCK_FREQUENCY = 8 'Frecuencia del reloj
'********************************************************
'FUNCION PARA IMPRIMIR UNA VARIABLE TIPO LONG EN EL LCD *
'NOMBRE: 16F88_PicEBasic_IMPRIMIR LONG POR EL LCD *******
'*************** 12/10/10 By COS ************************
'********************************************************
'----Puertos del LCD
Define LCD_BITS = 4 'Indicamos que el bus de datos del lcd sera de 4bit
Define LCD_DREG = PORTA 'Bus de datos sera el puerto A
Define LCD_DBIT = 0 'Bus de datos seran los 4 bit menos significativos del puerto A
Define LCD_RSREG = PORTB 'Bit de control RS sera del puerto B
Define LCD_RSBIT = 7 'Se usara el RB7 como RS
Define LCD_EREG = PORTB 'Bit de control E sera del puerto B
Define LCD_EBIT = 6 'Se usara el RB6 como E
Define LCD_COMMANDUS = 2000 'Tmp de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 50 'Tmp de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 5 '50 'Tmp de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg.
'----ASIGNACION DE I/O y valores de inicio de las salidas. Configura ADC
ANSEL = %00010000 'Los pin I/O digitales y RA4 analogico
CMCON = 0x07 'Comparador a off
OSCCON = 0x7e 'Set intrc To 8mhz, se usara reloj interno a 8Mhz
ADCON0 = %01100001 'Fosc/16 a 8Mhz (ADCON1.ADCS2=1) =2uSeg (minimo 1.6uSeg), channel RA4
ADCON1 = %11000000 'Volt. ref.(AVdd/AVss), selec. de escala division clock/16 ADCON1.ADCS2=1, ADC a ON
'ADCON1.ADFM = 0 'Activa lectura 8bit del ADC
TRISA = 0x00 'Puerto A como salidas
TRISB = 0x00 'Puerto B como salidas
TRISA.4 = 1 'Como entrada (RA4, adc)
TRISA.6 = 1 'Como entrada (RA6, tecla E1)
TRISA.5 = 1 'Como entrada (RA5, tecla E2)
'TRISB.5 = 0 'RB5(Tx, RS232)
TRISB.2 = 1 'RB2 (Rx, RS232)
PORTB.3 = 1 'Luz lcd a on (RB3)
PORTA.7 = 1 'Led amarillo a off
PORTB.0 = 1 'Led verde a off
'----VARIABLES GLOBALES
Dim dato As Long
'---INICIO
Lcdinit 'Inicializa el lcd sin cursor
Lcdcmdout LcdClear 'Limpia lcd y cursor principio linea 1
'----Rutina principal
Lcdout "Print Long:" 'Imprime el texto en la primera linea display
dato = 4000009998 '4,294,967,295 'Dato a imprimir en el LCD
main:
'WaitMs 200
Lcdcmdout LcdLine2Home 'Curso a principio de linea 2
Call longlcd(dato) 'Va a la funcion
dato = dato + 1
Goto main
End
'Imprime variable por el Lcd, hasta Long.
'Call longlcd(x), x es el numero a mostrar en el LCD.
'No devuelve datos
Proc longlcd(x As Long) 'Define funcion
Dim word2 As Word '/*Declaraciones de las variables
Dim word1 As Word
Dim word0 As Word
Dim aux_x As Long '*/
aux_x = x / 1000000 'Se extrae parte más significativa del Long
word2 = aux_x 'Se asigna los digitos más significativos del Long
aux_x = aux_x * 1000000 '/* Calculo de la segunda tanda de digitos del Long
x = x - aux_x
aux_x = x / 1000 '*/
word1 = aux_x 'Se asigna la segunda tanda de digitos
aux_x = aux_x * 1000 'Ultima tanda de digitos
word0 = x - aux_x 'Se asignan los ultimos digitos
If word2 > 0 Then Lcdout #word2 'Filtra valor cero
'Establece el cero a la izquierda
If dato >= 1000000 And word1 >= 10 And word1 < 100 Then Lcdout "0"
If dato >= 1000000 And word1 < 10 Then Lcdout "00"
If word2 > 0 Or word1 > 0 Then Lcdout #word1 'Filtra valor cero
If dato >= 1000 And word0 >= 10 And word0 < 100 Then Lcdout "0"
If dato >= 1000 And word0 < 10 Then Lcdout "00"
'-----------------
Lcdout #word0 'Imprime
End Proc