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,
Bookmarks