Quote Originally Posted by savnik View Post
And if we have a variable byte or word how to display?
Use the DIG function. The demo below counts up to 65534, showing each number for 25mS. It also blanks out any leading zeros.

Code:
' PIC18F2550

'Pin Assignments
'---------------
' Pin	Name	           Use/Connection
'------------------------------------
'  1  MCLR			Master Clear/Reset.  Pull High through 4.7k
'  2  RA0/AN0		LCD RS
'  3  RA1/AN1		LCD R/W
'  4  RA2/AN2		LCD Enable
'  5  RA3/AN3		n/c
'  6  RA4/T0CKI		n/c
'  7  RB5/AN4		n/c
'  8  Vss			Ground
'  9  OSC1			20 MHz resonator
' 10  OSC2			20 MHz resonator
' 11  RC0/T1CKI		To 32 kHz crystal
' 12  RC1/CCP2		To 32 kHz crystal
' 13  RC2/CCP1		n/c
' 14  Vusb			To USB (internal USB 3.3V voltage regulator)

' 15  RC4/D-		To USB (USB differential minus line)
' 16  RC5/D+		To USB (USB differential plus line)
' 17  RC6/TX		To MAX232
' 18  RC7/RX		To MAX232
' 19  Vss			Ground
' 20  Vdd			Voltage in (5V from USB)
' 21  RB0/INT		LCD DB0
' 22  RB1			LCD DB1
' 23  RB2			LCD DB2
' 24  RB3			LCD DB3
' 25  RB4			LCD DB4
' 26  RB5			LCD DB5
' 27  RB6			LCD DB6
' 28  RB7			LCD DB7

' Compiler directives:
Define  OSC 20
DEFINE LOADER_USED 1 'Bootloader Used
'Set receive register to receiver enabled
DEFINE HSER_RCSTA 90h
'Set transmit register to transmitter enabled, high speed BRGH
DEFINE HSER_TXSTA 24h
'Set baud rate
DEFINE HSER_BAUD 9600
DEFINE HSER_CLROERR 1 

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 2
DEFINE LCD_BITS 8
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 1600'3000
DEFINE LCD_DATAUS 50'200

TRUE        	CON 1
FALSE       	CON 0

ADCON1 = 15
CMCON = 7

TRISB = %00000000
TRISA.0 = $0
TRISA.1 = $0
TRISA.2 = $0

nPos var byte
wVal var WORD
nDig var byte
bDoneWithLeadingZeros var bit

low PORTA.1

'high PORTA.2
pause 500
LCDOUT $FE,1

'Set up the digits (http://www.darreltaylor.com/files/CustChar.htm)
LCDOUT  $FE,$40,$01,$01,$01,$01,$01,$01,$01,$01  ' Cust Char #0 
LCDOUT  $FE,$48,$1F,$11,$11,$11,$11,$11,$11,$11  ' Cust Char #1  
LCDOUT  $FE,$50,$1F,$10,$10,$10,$10,$10,$10,$1F  ' Cust Char #2  
LCDOUT  $FE,$58,$01,$01,$01,$01,$01,$01,$01,$1F  ' Cust Char #3  
LCDOUT  $FE,$60,$1F,$11,$11,$11,$11,$11,$11,$1F  ' Cust Char #4  
LCDOUT  $FE,$68,$11,$11,$11,$11,$11,$11,$11,$1F  ' Cust Char #5  
LCDOUT  $FE,$70,$1F,$01,$01,$01,$01,$01,$01,$1F  ' Cust Char #6  
LCDOUT  $FE,$78,$1F,$01,$01,$01,$01,$01,$01,$01  ' Cust Char #7  
  
GOTO MAIN_LOOP

Zero:
	LCDOUT $FE,$80+nPos,1
	LCDOUT $FE,$C0+nPos,5
return

One:
	LCDOUT $FE,$80+nPos,0
	LCDOUT $FE,$C0+nPos,0
return

Two:
	LCDOUT $FE,$80+nPos,7
	LCDOUT $FE,$C0+nPos,2
return

Three:
	LCDOUT $FE,$80+nPos,6
	LCDOUT $FE,$C0+nPos,3
return

Four:
	LCDOUT $FE,$80+nPos,5
	LCDOUT $FE,$C0+nPos,0
return

Five:
	LCDOUT $FE,$80+nPos,2
	LCDOUT $FE,$C0+nPos,3
return

Six:
	LCDOUT $FE,$80+nPos,2
	LCDOUT $FE,$C0+nPos,5
return

Seven:
	LCDOUT $FE,$80+nPos,7
	LCDOUT $FE,$C0+nPos,0
return

Eight:
	LCDOUT $FE,$80+nPos,4
	LCDOUT $FE,$C0+nPos,5
return

Nine:
	LCDOUT $FE,$80+nPos,4
	LCDOUT $FE,$C0+nPos,3
return

Blank:
	LCDOUT $FE,$80+nPos," "
	LCDOUT $FE,$C0+nPos," "
return

PickDigit:
	if nDig = 0 AND bDoneWithLeadingZeros = false then
		gosub Blank
'LCDOUT $FE,1
	else
		bDoneWithLeadingZeros = true
		select case nDig
		case 0
			gosub Zero
		case 1
			gosub One
		case 2
			gosub Two
		case 3
			gosub Three
		case 4
			gosub Four
		case 5
			gosub Five
		case 6
			gosub Six
		case 7
			gosub Seven
		case 8
			gosub Eight
		case 9
			gosub Nine
		end select
	endif
return

MAIN_LOOP:
	for wVal = 0 to $FFFE 
		bDoneWithLeadingZeros = FALSE
		'Most significant digit
		nPos = 0
		nDig = wVal dig 4
		Gosub PickDigit
		
		nPos = 1
		nDig = wVal dig 3
		Gosub PickDigit
		
		nPos = 2
		nDig = wVal dig 2
		Gosub PickDigit
		
		nPos = 3
		nDig = wVal dig 1
		Gosub PickDigit
		
		'Least significant digit
		nPos = 4
		nDig = wVal dig 0
		Gosub PickDigit
		
		pause 25
	next wVal
goto MAIN_LOOP
Best Regards,
Paul