' {$STAMP BS2sx,GraphicLCD(slot1),GraphicLCD(slot2)} ' {$PBASIC 2.5} ' ========================================================================= ' File...... GraphicLCD(slot0).bs2sx ' Purpose... Graphic LCD Display Demo ' Author.... O.A.A. ' E-Mail.... info@osmanardali.com ' Started... Feb 2008 ' ' -----[ Program Description ]---------------------------------------------- ' ' This program demonstrates graphical display in a 128x64 Garaphic LCD with a ' KS0107/KS0108 controller set. ' This code works with the BS2e and BS2sx ' In BS2 EEPROM Data ana Program Space overlaps ' GraphicLCD(slot0) is the main routine downloaded to slot 0 ' It contins subroutines : ' Init_LCD : Initialization routine ' Screen_00 : Sets all screen pixels TO zero ' Frame : Draws a frame ' GraphicLCD(slot1) is downloaded to slot 1 ' Standart Font Data (ASCII 32 to 127) stored here ' All text display done here ' It contains the following font resizing subroutines : ' Text_6x8 : Outputs text in 6x8 pixels ' Text_6x16 : Outputs text in 6x16 pixels ' Text_12x8 : Outputs text in 12x8 pixels ' Text_12x16 : Outputs text in 12x16 pixels ' GraphicLCD(slot2) is downloaded to slot ' Font data for jumbo digits stored here ' It contins the routine :' ' JumboDigits : Displays digits in 22x32 pixel ' ' -----[ Constants ]------------------------------------------------------------ ' cur_dspON CON $3F ' %00111111 Display On cur_dspOFF CON $3E ' %00111110 Display Off Yadd CON 64 ' %01000000 Y Address = 0 Xadd CON 184 ' %10111000 X (Page) Address = 0 Jumbo CON 0 ' Jumbo Digits Demo Resize CON 1 ' Character Resizing Demo '------[ I/O Definitions ]-------------------------------------------------- RES PIN 0 ' Reset active low CS1 PIN 1 ' Select Signal for KS0108(1) CS2 PIN 2 ' Select Signal for KS0108(2) E PIN 3 ' Enable Signal RW PIN 4 ' Read/Write Selection DI PIN 5 ' Register Selection (0=Instruction, 1=Data) LCDpins VAR OUTH ' 8-bit LCD data '------[ Variables ]-------------------------------------------------------- Menu VAR Bit ' Menu variable (0 = DEMO_1 1 = DEMO_2) sdx VAR Nib ' Slot control index addr VAR Word ' EEPROM address addr2 VAR Word ' EEPROM address dNum VAR Nib ' Digit number Number VAR Word ' Number to be displayed idx VAR Byte ' loop counter jdx VAR Byte ' loop counter kdx VAR Nib ' loop counter ndx VAR Nib ' loop counter digit VAR Nib ' digit cur_dsp VAR Nib(3) ' Number currently displayed dgtW VAR Byte(3) ' Width of digit Yadd_dgt VAR Byte ' Starting Y address of digit char VAR Byte ' ASCII value of char Fyadd VAR Byte ' Y Address of top left coner of frame (0-63) Fxadd VAR Nib ' X Address of top left coner of frame (0-7) width VAR Byte ' Frame width (max 64) height VAR Nib ' Frame height (max 8) border VAR Nib ' Frame border thickness (max 8) workVariable VAR Byte '------[ EEPROM Data ]------------------------------------------------------ ' '------[ Initialization ]--------------------------------------------------- ' BRANCH sdx,[Initialize,sdx_1,sdx_2,sdx_3] Initialize: OUTS = %0000000000000000 ' Set All Output Low DIRS = %1111111100111111 ' Set I/O Direction PAUSE 500 cur_dsp(0) = 11 cur_dsp(1) = 11 cur_dsp(2) = 11 GOSUB Init_LCD ' Initialize The LCD Display '------[ Program Code ]----------------------------------------------------- Main: '************************************************************** '* SET Menu = "Jumbo" for Jumbo Digits Demo * '* Set Menu = "Resize" for Character Resizing Demo * '************************************************************** Menu = Resize BRANCH Menu,[DEMO_1,DEMO_2] DEMO_1 : ' Draw a frame in screen 1 Fyadd = 0 ' Y address of frame Fxadd = 0 ' X address of frame width = 41 ' Frame width height = 8 ' Frame height border = 2 ' Frame border thicknes LOW CS1 : HIGH CS2 GOSUB Frame ' ' Display Number in Jumbo Digits Number = 308 sdx = 1 RUN 3 sdx_1 : ' ' Display message in Frame sdx = 2 RUN 1 sdx_2 : STOP DEMO_2 : sdx = 3 RUN 1 sdx_3 : STOP END '------[ Subroutines ]------------------------------------------------------ Init_LCD: LOW E ' Put a low on enable pin HIGH RES ' De-select Reset Mode LOW RW ' Put LCD in Write Mode LOW CS1 : HIGH CS2 ' Select cols 0-63 /De-Select cols 64-127 HIGH DI ' Set LCD to display data GOSUB Screen_00 ' Set Cols 0-63 to zero LOW DI ' Set LCD TO receive instructions LCDpins = %00111111 ' Turn Display On - cols 0-63 PULSOUT E,1 PAUSE 1 LOW CS2 : HIGH CS1 ' Select cols 64-127 /De-Select cols 0-63 HIGH DI ' Set LCD to display data GOSUB Screen_00 ' Set Cols 64-127 to zero LOW DI ' Set LCD TO receive instructions LCDpins = %00111111 ' Turn Display On - cols 64-127 PULSOUT E,1 PAUSE 1 RETURN '--------------------------------------------------------------------------- ' Set screen to 0 Screen_00 : FOR idx = 0 TO 7 LOW DI LCDpins = (Yadd + 0) ' Set Y Address to zero PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + idx) PULSOUT E,1 PAUSE 1 HIGH DI LCDpins = 0 FOR jdx = 0 TO 63 PULSOUT E,1 PAUSE 1 NEXT NEXT RETURN '--------------------------------------------------------------------------- Frame: ' Fyadd ....... Y address of frame (0-63) ' Fxadd ....... X address of frame (0-7) ' width ....... Frame width (max 64) ' height ...... Frame height (max 8) ' border ...... Frame border thickness (max 8) FOR idx = Fxadd TO (Fxadd+height-1) ' Draw vertical lines LOW DI LCDpins = (Yadd + Fyadd) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd+idx) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI LCDpins = $FF FOR jdx = 1 TO border PULSOUT E,1 PAUSE 1 NEXT LOW DI LCDpins = (Yadd + Fyadd + width - border) ' Set Y Address PULSOUT E,1 PAUSE 1 HIGH DI LCDpins = $FF FOR jdx = 1 TO border PULSOUT E,1 PAUSE 1 NEXT NEXT ' Draw top horizontal line LOW DI LCDpins = (Yadd + Fyadd + border) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + Fxadd) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI LOOKUP border,[0,$1,$3,$7,$F,$1F,$3F,$7F,$FF],LCDpins FOR jdx = 1 TO (width-(2*border)) PULSOUT E,1 PAUSE 1 NEXT ' Draw bottom horizontal line LOW DI LCDpins = (Yadd + Fyadd + border) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + Fxadd + height - 1) ' SET X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI LOOKUP border,[0,$80,$C0,$E0,$F0,$F8,$FC,$FE,$FF],LCDpins FOR jdx = 1 TO (width-(2*border)) PULSOUT E,1 PAUSE 1 NEXT RETURN '-------------------------------------------------------------------------- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' {$STAMP BS2sx} ' {$PBASIC 2.5} ' ========================================================================= ' File...... GraphicLCD(slot1).bs2sx ' Purpose... Graphic LCD Display Demo ' Author.... O.A.A. ' E-Mail.... info@osmanardali.com ' Started... Feb 2008 ' ' -----[ Program Description ]---------------------------------------------- ' ' This program demonstrates graphical display in a 128x64 Garaphic LCD with a ' KS0107/KS0108 controller set. ' This code works with the BS2e and BS2sx ' In BS2 EEPROM Data ana Program Space overlaps ' GraphicLCD(slot1) is downloaded to slot 1 ' Standart Font Data (ASCII 32 to 127) stored here ' All text display done here ' It contains the following font resizing subroutines : ' Text_6x8 : Outputs text in 6x8 pixels ' Text_6x16 : Outputs text in 6x16 pixels ' Text_12x8 : Outputs text in 12x8 pixels ' ' ' ' -----[ Constants ]------------------------------------------------------------ ' cur_dspON CON $3F ' %00111111 Display On cur_dspOFF CON $3E ' %00111110 Display Off Yadd CON 64 ' %01000000 Y Address = 0 Xadd CON 184 ' %10111000 X (Page) Address = 0 '------[ I/O Definitions ]-------------------------------------------------- RES PIN 0 ' Reset active low CS1 PIN 1 ' Select Signal for KS0108(1) CS2 PIN 2 ' Select Signal for KS0108(2) E PIN 3 ' Enable Signal RW PIN 4 ' Read/Write Selection DI PIN 5 ' Register Selection (0=Instruction, 1=Data) LCDpins VAR OUTH ' 8-bit LCD data '------[ Variables ]-------------------------------------------------------- Menu VAR Bit ' Menu variable (0 = DEMO_1 1 = DEMO_2) sdx VAR Nib ' Slot control index addr VAR Word ' EEPROM address addr2 VAR Word ' EEPROM address dNum VAR Nib ' Digit number Number VAR Word ' Number to be displayed idx VAR Byte ' loop counter jdx VAR Byte ' loop counter kdx VAR Nib ' loop counter ndx VAR Nib ' loop counter digit VAR Nib ' digit cur_dsp VAR Nib(3) ' Number currently displayed dgtW VAR Byte(3) ' Width of digit Yadd_dgt VAR Byte ' Starting Y address of digit char VAR Byte ' ASCII value of char Fyadd VAR Byte ' Y Address of top left coner of frame (0-63) Fxadd VAR Nib ' X Address of top left coner of frame (0-7) width VAR Byte ' Frame width (max 64) height VAR Nib ' Frame height (max 8) border VAR Nib ' Frame border thickness (max 8) workVariable VAR Byte '------[ EEPROM Data ]------------------------------------------------------ ' DATA 0 acs32 DATA 0,0,0,0,0 acs33 DATA 0,0,$4F,0,0 acs34 DATA 0,$7,0,$7,0 acs35 DATA $14,$7F,$14,$7F,$14 acs36 DATA $24,$2A,$7F,$2A,$12 acs37 DATA $23,$13,$8,$64,$62 asc38 DATA $36,$49,$55,$22,$50 asc39 DATA 0,$5,$3,0,0 asc40 DATA 0,$1C,$22,$41,0 asc41 DATA 0,$41,$22,$1C,0 asc42 DATA $14,$8,$3E,$8,$14 asc43 DATA $8,$8,$3E,$8,$8 asc44 DATA 0,$50,$30,0,0 asc45 DATA $8,$8,$8,$8,$8 asc46 DATA 0,$60,$60,0,0 asc47 DATA $20,$10,$8,$4,$2 chr0 DATA $3E,$51,$49,$45,$3E chr1 DATA 0,$42,$7F,$40,0 chr2 DATA $42,$61,$51,$49,$46 chr3 DATA $21,$41,$45,$4B,$31 chr4 DATA $18,$14,$12,$7F,$50 chr5 DATA $27,$45,$45,$45,$39 chr6 DATA $3C,$4A,$49,$49,$30 chr7 DATA $1,$71,$9,$5,$3 chr8 DATA $36,$49,$49,$49,$36 chr9 DATA $6,$49,$49,$29,$1E asc58 DATA 0,$36,$36,0,0 asc59 DATA 0,$56,$36,0,0 asc60 DATA $8,$14,$22,$4129,0 asc61 DATA $14,$14,$14,$14,$14 asc62 DATA 0,$41,$22,$14,$8 asc63 DATA $2,$1,$51,$9,$6 asc64 DATA $32,$49,$79,$41,$3E chrA DATA $7E,$11,$11,$11,$7E chrB DATA $7F,$49,$49,$49,$36 chrC DATA $3E,$41,$41,$41,$22 chrD DATA $7F,$41,$41,$22,$1C chrE DATA $7F,$49,$49,$49,$41 chrF DATA $7F,$9,$9,$9,$1 chrG DATA $3E,$41,$49,$49,$7A chrH DATA $7F,$8,$8,$8,$7F chrI DATA 0,$41,$7F,$41,0 chrJ DATA $20,$40,$41,$3F,$1 chrK DATA $7F,$8,$14,$22,$41 chrL DATA $7F,$40,$40,$40,$40 chrM DATA $7F,$2,$C,$2,$7F chrN DATA $7F,$4,$8,$10,$7F chrO DATA $3E,$41,$41,$41,$3E chrP DATA $7F,$9,$9,$9,$6 chrQ DATA $3E,$41,$51,$21,$5E chrR DATA $7F,$9,$19,$29,$46 chrS DATA $46,$49,$49,$49,$31 chrT DATA $1,$1,$7F,$1,$1 chrU DATA $3F,$40,$40,$40,$3F chrV DATA $1F,$20,$40,$20,$1F chrW DATA $3F,$40,$38,$40,$3F chrX DATA $63,$14,$8,$14,$63 chrY DATA $7,$8,$70,$8,$7 chrZ DATA $61,$51,$49,$45,$43 asc91 DATA 0,$7F,$41,$41,0 asc92 DATA $15,$16,$7C,$16,$15 asc93 DATA 0,$41,$41,$7F,0 asc94 DATA $4,$2,$1,$2,$4 asc95 DATA $40,$40,$40,$40,$40 asc96 DATA 0,$1,$2,$4,0 chraa DATA $20,$54,$54,$54,$78 chrbb DATA $7F,$48,$44,$44,$38 chrcc DATA $38,$44,$44,$44,$20 chrdd DATA $38,$44,$44,$4C,$7F chree DATA $38,$54,$54,$54,$18 chrff DATA $8,$7E,$9,$1,$2 chrgg DATA $C,$52,$52,$52,$3E chrhh DATA $7F,$8,$4,$4,$78 chrii DATA 0,$44,$7D,$40,0 chrjj DATA $20,$40,$44,$3D,0 chrkk DATA $7F,$10,$28,$44,0 chrll DATA 0,$41,$7F,$40,0 chrmm DATA $7C,$4,$18,$4,$78 chrnn DATA $7C,$8,$4,$4,$78 chroo DATA $38,$44,$44,$44,$38 chrpp DATA $7C,$14,$14,$14,$8 chrqq DATA $8,$14,$14,$18,$7C chrrr DATA $7C,$8,$4,$4,$8 chrss DATA $48,$54,$54,$54,$20 chrtt DATA $4,$3F,$44,$40,$20 chruu DATA $3C,$40,$40,$20,$6C chrvv DATA $1C,$20,$40,$20,$1C chrww DATA $3C,$40,$30,$40,$3C chrxx DATA $44,$28,$10,$28,$44 chryy DATA $C,$50,$50,$50,$3C chrzz DATA $44,$64,$54,$4C,$44 asc123 DATA 0,$8,$36,$41,0 asc124 DATA 0,0,$7F,0,0 asc125 DATA 0,$41,$36,$8,0 asc126 DATA $8,$8,$2A,$1C,$8 asc127 DATA $8,$1C,$2A,$8,$8 msg1 DATA " DEMO 22x32pixelJUMBODIGITS" msg2 DATA " 6x8 pixel12x8 pixel6x16 pixel12x16pixel" msg3 DATA " ABCDEFUVWXYZ" ' '--------------------------------------------------------------------------- ' BRANCH sdx,[err,err,sdx_2,sdx_3] ' sdx_2: ' addr2 = msg1 LOW CS1 : HIGH CS2 FOR idx = 1 TO 6 IF idx = 2 THEN GOTO next_01 LOOKUP idx,[0,6,0,5,5,5,6],ndx LOW DI LCDpins = (Yadd+((36-(6*ndx))/2)+3) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd+idx) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI FOR jdx = 1 TO ndx addr2 = addr2 + 1 READ addr2,char GOSUB Text_6x8 NEXT next_01: NEXT RUN 0 ' sdx_3 : ' addr2 = msg2 LOW CS1 : HIGH CS2 FOR idx = 0 TO 6 STEP 2 LOW DI LCDpins = (Yadd+5) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + idx) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI FOR jdx = 1 TO 10 addr2 = addr2 + 1 READ addr2,char GOSUB Text_6x8 NEXT NEXT addr2 = msg3 LOW CS2 : HIGH CS1 ' Display 6x8 pixel text FOR idx = 0 TO 1 LOW DI LCDpins = (Yadd+16) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + idx) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI FOR jdx = 1 TO 6 addr2 = addr2 + 1 READ addr2,char GOSUB Text_6x8 NEXT NEXT ' Display 12x8 pixel text addr2 = msg3+3 FOR idx = 2 TO 3 LOW DI LCDpins = (Yadd+16) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + idx) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI FOR jdx = 1 TO 3 addr2 = addr2 + 1 READ addr2,char GOSUB Text_12x8 NEXT NEXT ' Display 6x16 pixel text FOR idx = 4 TO 5 addr2 = msg3 LOW DI LCDpins = (Yadd+16) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + idx) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI FOR jdx = 1 TO 6 addr2 = addr2 + 1 READ addr2,char GOSUB Text_6x16 NEXT NEXT ' Display 12x16 pixel text FOR idx = 6 TO 7 addr2 = msg3 LOW DI LCDpins = (Yadd+16) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + idx) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI FOR jdx = 1 TO 3 addr2 = addr2 + 1 READ addr2,char GOSUB Text_12x16 NEXT NEXT RUN 0 '------[ Subroutines ]------------------------------------------------------ ' Text_6x8: addr = (char-32)*5 FOR kdx = 0 TO 4 addr = addr+1 READ addr,LCDpins PULSOUT E,1 PAUSE 1 NEXT LCDpins = 0 PULSOUT E,1 PAUSE 1 RETURN '--------------------------------------------------------------------------- ' Text_12x8: addr = (char-32)*5 FOR kdx = 0 TO 4 addr = addr+1 READ addr,LCDpins PULSOUT E,1 PAUSE 1 PULSOUT E,1 PAUSE 1 NEXT LCDpins = 0 PULSOUT E,1 PAUSE 1 PULSOUT E,1 PAUSE 1 RETURN '--------------------------------------------------------------------------- ' Text_6x16: addr = (char-32)*5 FOR kdx = 0 TO 4 addr = addr+1 READ addr,LCDpins IF idx = 4 THEN workVariable = LCDpins.LOWNIB IF idx = 5 THEN workVariable = LCDpins.HIGHNIB LOOKUP workvariable/4,[0,3,12,15],LCDpins.HIGHNIB LOOKUP workvariable//4,[0,3,12,15],LCDpins.LOWNIB PULSOUT E,1 PAUSE 1 NEXT LCDpins = 0 PULSOUT E,1 PAUSE 1 RETURN '--------------------------------------------------------------------------- ' Text_12x16: addr = (char-32)*5 FOR kdx = 0 TO 4 addr = addr+1 READ addr,LCDpins IF idx = 6 THEN workVariable = LCDpins.LOWNIB IF idx = 7 THEN workVariable = LCDpins.HIGHNIB LOOKUP workvariable/4,[0,3,12,15],LCDpins.HIGHNIB LOOKUP workvariable//4,[0,3,12,15],LCDpins.LOWNIB PULSOUT E,1 PAUSE 1 PULSOUT E,1 PAUSE 1 NEXT LCDpins = 0 PULSOUT E,1 PAUSE 1 PULSOUT E,1 PAUSE 1 RETURN '--------------------------------------------------------------------------- ' err: ' output error message !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' {$STAMP BS2sx} ' {$PBASIC 2.5} ' ========================================================================= ' File...... GraphicLCD(slot2).bs2sx ' Purpose... Graphic LCD Display Demo ' Author.... O.A.A. ' E-Mail.... info@osmanardali.com ' Started... Feb 2008 ' ' -----[ Program Description ]---------------------------------------------- ' ' This program demonstrates graphical display in a 128x64 Garaphic LCD with a ' KS0107/KS0108 controller set. ' This code works with the BS2e and BS2sx ' In BS2 EEPROM Data ana Program Space overlaps ' GraphicLCD(slot2) is downloaded to slot 2 ' Font data for jumbo digits stored here ' It contains the routine : ' JumboDigits : Displays digits in 22x32 pixel ' -----[ Constants ]------------------------------------------------------------ ' cur_dspON CON $3F ' %00111111 Display On cur_dspOFF CON $3E ' %00111110 Display Off Yadd CON 64 ' %01000000 Y Address = 0 Xadd CON 184 ' %10111000 X (Page) Address = 0 '------[ I/O Definitions ]-------------------------------------------------- RES PIN 0 ' Reset active low CS1 PIN 1 ' Select Signal for KS0108(1) CS2 PIN 2 ' Select Signal for KS0108(2) E PIN 3 ' Enable Signal RW PIN 4 ' Read/Write Selection DI PIN 5 ' Register Selection (0=Instruction, 1=Data) LCDpins VAR OUTH ' 8-bit LCD data '------[ Variables ]-------------------------------------------------------- Menu VAR Bit ' Menu variable (0 = DEMO_1 1 = DEMO_2) sdx VAR Nib ' Slot control index addr VAR Word ' EEPROM address addr2 VAR Word ' EEPROM address dNum VAR Nib ' Digit number Number VAR Word ' Number to be displayed idx VAR Byte ' loop counter jdx VAR Byte ' loop counter kdx VAR Nib ' loop counter ndx VAR Nib ' loop counter digit VAR Nib ' digit cur_dsp VAR Nib(3) ' Number currently displayed dgtW VAR Byte(3) ' Width of digit Yadd_dgt VAR Byte ' Starting Y address of digit char VAR Byte ' ASCII value of char Fyadd VAR Byte ' Y Address of top left coner of frame (0-63) Fxadd VAR Nib ' X Address of top left coner of frame (0-7) width VAR Byte ' Frame width (max 64) height VAR Nib ' Frame height (max 8) border VAR Nib ' Frame border thickness (max 8) workVariable VAR Byte '------[ EEPROM Data ]------------------------------------------------------ ' DATA 0 dgt0 DATA $FC,$FE,$FF,$FF,$FF,$3F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$3F,$FF,$FF,$FF,$FF,$FE,$FC DATA $FF,$FF,$FF,$FF,$FF,0,0,0,0,0,0,0,0,$C0,$C0,$E0,$FF,$FF,$FF,$FF,$FF,$FF DATA $FF,$FF,$FF,$FF,$FF,0,0,0,0,0,0,0,0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF DATA $3F,$7F,$FF,$FF,$FF,$FC,$F8,$F8,$F8,$F8,$F8,$F8,$FC,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7F,$3F dgt1 DATA 0,0,0,$FE,$FF,$FF,$FF,$FE DATA $C0,$E0,$E0,$FF,$FF,$FF,$FF,$FF DATA $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF DATA $7F,$FF,$FF,$FF,$FF,$FF,$FF,$7F dgt2 DATA $1C,$1E,$1F,$1F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$1F,$FF,$FF,$FF,$FF,$FE,$FC DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,$80,$FF,$FF,$FF,$FF,$FF,$FF DATA $FC,$FE,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$1F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$7,$3 DATA $3F,$7F,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$F8,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F8,$F8,$F8,$78 dgt3 DATA $1C,$1E,$1F,$1F,$F,$F,$F,$F,$F,$F,$F,$F,$1F,$FF,$FF,$FF,$FF,$FE,$FC,0,0,0 DATA 0,0,0,0,$78,$78,$78,$78,$78,$78,$78,$78,$7C,$FF,$FF,$FF,$FF,$FF,$FF,$F0,$E0,$C0 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF DATA $3E,$7E,$FE,$FE,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$FC,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7F,$3F dgt4 DATA $FE,$FF,$FF,$FF,$FF,$FE,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DATA $FF,$FF,$FF,$FF,$FF,$FF,$80,$80,$80,$80,$80,$80,$80,$E0,$F0,$F0,$F0,$F0,$E0,$80,$80,0 DATA $3,$7,$7,$7,$7,$7,$7,$7,$7,$7,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7,$7,$3 DATA 0,0,0,0,0,0,0,0,0,0,$7F,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7F,0,0,0 dgt5 DATA $FC,$FE,$FF,$FF,$FF,$FF,$1F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F DATA $1F,$3F,$7F,$7F,$7F,$7F,$7C,$78,$78,$78,$78,$78,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$F0,$E0 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF DATA $3F,$7F,$FF,$FF,$FF,$FC,$F8,$F8,$F8,$F8,$F8,$F8,$FC,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7F,$3F dgt6 DATA $FC,$FE,$FF,$FF,$1F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$1F,$1F,$1F,$1F,$1E,$1C DATA $FF,$FF,$FF,$FF,$F8,$78,$78,$78,$78,$78,$78,$78,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$F0,$E0 DATA $FF,$FF,$FF,$FF,0,0,0,0,0,0,0,0,0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF DATA $3F,$7F,$FF,$FF,$FC,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$FC,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7F,$3F dgt7 DATA $3E,$3F,$3F,$3F,$1F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$F,$FF,$FF,$FF,$FF,$FF DATA 0,0,0,0,0,0,0,0,0,0,0,$C0,$E0,$E0,$E0,$FF,$FF,$FF,$FF,$FF DATA 0,0,0,0,0,0,0,0,0,0,0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF DATA 0,0,0,0,0,0,0,0,0,0,0,$7F,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7F dgt8 DATA 0,0,$FC,$FE,$FF,$FF,$1F,$F,$F,$F,$F,$F,$F,$1F,$FF,$FF,$FF,$FF,$FE,$FC,0,0 DATA $F0,$F8,$FF,$FF,$FF,$FF,$7C,$78,$78,$78,$78,$78,$78,$FC,$FF,$FF,$FF,$FF,$FF,$FF,$F8,$F0 DATA $FF,$FF,$FF,$FF,$FF,0,0,0,0,0,0,0,0,0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF DATA $3F,$7F,$FF,$FF,$FF,$FC,$F8,$F8,$F8,$F8,$F8,$F8,$F8,$FC,$FF,$FF,$FF,$FF,$FF,$FF,$7F,$3F dgt9 DATA $FC,$FE,$FF,$FF,$FF,$7F,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$7F,$FF,$FF,$FF,$FF,$FE,$FC DATA $FF,$FF,$FF,$FF,$FF,$C0,$80,$80,$80,$80,$80,$80,$80,$80,$80,$C0,$FF,$FF,$FF,$FF,$FF,$FF DATA $1,$3,$7,$7,$7,$7,$7,$7,$7,$7,$7,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7,$3 DATA 0,0,0,0,0,0,0,0,0,0,0,$7F,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$7F,0,0 ' '--------------------------------------------------------------------------- '------[ Subroutines ]------------------------------------------------------ ' JumboDigits: FOR dNum = 2 TO 0 digit = Number DIG dNum LOOKUP digit,[dgt0,dgt1,dgt2,dgt3,dgt4,dgt5,dgt6,dgt7,dgt8,dgt9],addr addr = addr - 1 LOOKUP digit,[22,8,22,22,22,22,22,20,22,22],dgtW(dNum) BRANCH dNum,[digit3,digit2,digit1] digit1: IF digit = cur_dsp(dNum) THEN GOTO Next_dNum LOW CS1 : HIGH CS2 Yadd_dgt = 64-dgtW(dNum) GOTO DisplayDigit digit2: IF digit = cur_dsp(dNum) THEN GOTO Next_dNum LOW CS2 : HIGH CS1 Yadd_dgt = 5 GOTO DisplayDigit digit3: LOW CS2 : HIGH CS1 Yadd_dgt = dgtW(1) + 10 DisplayDigit: FOR idx = 0 TO 3 LOW DI LCDpins = (Yadd + Yadd_dgt) ' Set Y Address PULSOUT E,1 PAUSE 1 LCDpins = (Xadd + 2 + idx) ' Set X (Page) Address PULSOUT E,1 PAUSE 1 HIGH DI FOR jdx = 0 TO (dgtW(dNum)-1) addr = addr + 1 READ addr,LCDpins PULSOUT E,1 PAUSE 1 NEXT NEXT cur_dsp(dNum) = digit Next_dNum: NEXT RUN 0 '--------------------------------------------------------------------------- '