Hello.
Below is my code which generates very nice looking, double width letters from 0 to 9, on any HD44780 compatible LCD module. Works well on LCD, OLED, VFD. Below I'm attaching the sample pictures.

Code:
DECODER 'DECODE DIGITS INTO PROPER SCREEN AREAS
LEFT=$40:RIGHT=$48 'SELECT ADDRESSES AS CUSTOM DIGITS ARE PLACED FROM LEFT TO RIGHT 0 TO 7 
'1ST DIGIT
IF T1=0 THEN
GOSUB D0
ENDIF
IF T1=1 THEN
GOSUB D1
ENDIF
IF T1=2 THEN
GOSUB D2
ENDIF
IF T1=3 THEN
GOSUB D3
ENDIF
IF T1=4 THEN
GOSUB D4
ENDIF
IF T1=5 THEN
GOSUB D5
ENDIF
IF T1=6 THEN
GOSUB D6
ENDIF
IF T1=7 THEN
GOSUB D7
ENDIF
IF T1=8 THEN
GOSUB D8
ENDIF
IF T1=9 THEN
GOSUB D9
ENDIF


'2nd digit
LEFT=$50:RIGHT=$58 
IF T2=0 THEN
GOSUB D0
ENDIF
IF T2=1 THEN
GOSUB D1
ENDIF
IF T2=2 THEN
GOSUB D2
ENDIF
IF T2=3 THEN
GOSUB D3
ENDIF
IF T2=4 THEN
GOSUB D4
ENDIF
IF T2=5 THEN
GOSUB D5
ENDIF
IF T2=6 THEN
GOSUB D6
ENDIF
IF T2=7 THEN
GOSUB D7
ENDIF
IF T2=8 THEN
GOSUB D8
ENDIF
IF T2=9 THEN
GOSUB D9
ENDIF


LEFT=$60:RIGHT=$68 
'3rd digit
IF T3=0 THEN
GOSUB D0
ENDIF
IF T3=1 THEN
GOSUB D1
ENDIF
IF T3=2 THEN
GOSUB D2
ENDIF
IF T3=3 THEN
GOSUB D3
ENDIF
IF T3=4 THEN
GOSUB D4
ENDIF
IF T3=5 THEN
GOSUB D5
ENDIF
IF T3=6 THEN
GOSUB D6
ENDIF
IF T3=7 THEN
GOSUB D7
ENDIF
IF T3=8 THEN
GOSUB D8
ENDIF
IF T3=9 THEN
GOSUB D9
ENDIF


LEFT=$70:RIGHT=$78 
'4th digit
IF T4=0 THEN


GOSUB D0
ENDIF
IF T4=1 THEN
GOSUB D1
ENDIF
IF T4=2 THEN
GOSUB D2
ENDIF
IF T4=3 THEN
GOSUB D3
ENDIF
IF T4=4 THEN
GOSUB D4
ENDIF
IF T4=5 THEN
GOSUB D5
ENDIF
IF T4=6 THEN
GOSUB D6
ENDIF
IF T4=7 THEN
GOSUB D7
ENDIF
IF T4=8 THEN
GOSUB D8
ENDIF
IF T4=9 THEN
GOSUB D9
ENDIF


RETURN
D0: 'decode into proper digit at proper location
LCDOUT $FE,LEFT,%01111,%11000,%11000,%11000,%11000,%11000,%01111,%0 '0L
LCDOUT $FE,RIGHT,%11110,%00011,%00011,%00011,%00011,%00011,%11110,%0 '0R
return 
D1: 
LCDOUT $FE,LEFT,%00001,%00011,%00110,%0,%0,%0,%00111'1L
LCDOUT $FE,RIGHT,%11000,%11000,%11000,%11000,%11000,%11000,%11111,%0	'1R
return
D2: 
LCDOUT $FE,LEFT,%01111,%11000,%00000,%01111,%11000,%11000,%11111,%0	'2L
LCDOUT $FE,RIGHT,%11110,%00011,%00011,%11110,%00000,%00000,%11111,%0	'2R
return 
D3: 
LCDOUT $FE,LEFT,%01111,%11000,%00000,%00000,%00000,%11000,%01111,%0	'3L
LCDOUT $FE,RIGHT,%11110,%00011,%00011,%11110,%00011,%00011,%11110,%0	'3R
return 
D4:
LCDOUT $FE,LEFT,%11000,%11000,%11000,%01111,%00000,%00000,%00000,%0	'4L
LCDOUT $FE,RIGHT,%00011,%00011,%00011,%11111,%00011,%00011,%00011,%0	'4R
return 
D5:
LCDOUT $FE,LEFT,%11111,%11000,%11000,%11111,%00000,%11000,%01111,%0	'5L
LCDOUT $FE,RIGHT,%11111,%00000,%00000,%11110,%00011,%00011,%11110,%0	'5R
return
D6:
lcdout $FE,LEFT, %01111,%11000,%11000,%11111,%11000,%11000,%01111,%0	'6L
lcdout $FE,RIGHT, %11110,%00011,%00000,%11110,%00011,%00011,%11110,%0	'6R
return
D7:
lcdout $FE,LEFT, %11111,%11000,%00000,%00000,%00000,%00000,%00000,%0	'7L
lcdout $FE,RIGHT, %11111,%00011,%00011,%00011,%01110,%11000,%11000,%0'7R
return
D8:
lcdout $FE,LEFT, %01111,%11000,%11000,%01111,%11000,%11000,%01111,%0	'8L
lcdout $FE,RIGHT, %11110,%00011,%00011,%11110,%00011,%00011,%11110,%0	'8R
return
D9:
lcdout $FE,LEFT, %01111,%11000,%11000,%01111,%00000,%11000,%01111,%0	'9L
lcdout $FE,RIGHT, %11110,%00011,%00011,%11111,%00011,%00011,%11110,%0	'9R
return
To use this code, you need to place this string in your code (change starting position as needed):
Code:
 lcdout $FE, $1, 0,1,2,3,4,5,6,7
Then assign to T1-T4 variables appropriate values and call the DECODER subroutine.

As you can see, this code uses 64 bytes of memory, to hold the visual data for bitmaps of digits 0-9.
However, I want to add whole ASCII charset + some extras, so that will require 256 bytes of memory (I want to have 128 characters, each needs 2x8 bytes of memory). I can use on-chip eeprom, but they're usually 256 bytes and I need them for some extras, so I plan to use external eeprom chip.

I want to have fast display update rate (at least 25 fps), so speed is critical. As far as I know, PBP does not support hardware I2C or SPI capabilities of PIC chips directly, you have to use assembly language, which is far above of my capabilities. So in software mode, can average PIC provide 64*25 bytes per second (that's 1.6kb/sec) reading data rate from external EEPROM ?

Name:  lcds.jpg
Views: 318
Size:  149.9 KB
Name:  vfds.jpg
Views: 315
Size:  205.3 KB