'------------------------------------------------------------------
' GRAPHIC FONT
' Use the Bascom font file's for all the graphic display's,
' include inverted and/or rotated text.
' By Evert Dekker 2007 GraphicFont@Evertdekker dotje com
' Created with Bascom-Avr: 1.11.8.8
'------------------------------------------------------------------
............
...........
Config Graphlcd = 240 * 128 , Dataport = Porta , Controlport = Portc , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6
Cursor Off
Cls
Declare Sub Lcdtext(byval S As String , Byval Xoffset As Byte , Byval Yoffset As Byte , Byval Fontset As Byte , Byval Inverse As Byte , Byval Rotation As Byte)
'SYNTAX Lcdtest String , Xoffset , Yoffset , Fontset , Inverse , Rotation
'
'* Xoffset and Yoffset is in pixels, so you can place text on every spot on the display
'* You determin yourself in the subroutine witch font belongs to the fontset
.....................
......................
'=== Sub Routines ===
Sub Lcdtext(byval S As String , Xoffset As Byte , Yoffset As Byte , Fontset As Byte , Inverse As Byte , Rotation As Byte)
Local Tempstring As String * 1 , Temp As Byte 'Dim local the variables
Local A As Byte , Pixels As Byte , Count As Byte , Carcount As Byte , Lus As Byte
Local Row As Byte , Byteseach As Byte , Blocksize As Byte , Dummy As Byte
Local Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
Local Xpos As Byte , Ypos As Byte , Pixel As Byte , Pixelcount As Byte
If Inverse > 1 Then Inverse = 0 'Inverse can't be greater then 1
If Rotation > 3 Then Rotation = 0 'There are only 4 rotation's
Stringsize = Len(s) - 1 'Size of the text string -1 because we must start with 0
For Carcount = 0 To Stringsize 'Loop for the numbers of caracters that must be displayed
If Fontset = 1 Then Restore Font8x8 'Add or remove here fontset's that you need or not,
If Fontset = 2 Then Restore Font16x16 'this is the name that you gave to the font, NOT the filename
If Fontset = 3 Then Restore Font6x8 'If you dont know the name, open the font file in wordpad, and there it is,
If Fontset = 4 Then Restore Font5x5 'right on top.
Temp = Carcount + 1 'Cut the text string in seperate caracters
Tempstring = Mid(s , Temp , 1)
Read Row : Read Byteseach : Read Blocksize : Read Dummy 'Read the first 4 bytes from the font file
Temp = Asc(tempstring) - 32 'Font files start with caracter 32
For Lus = 1 To Temp 'Do dummie read to point to the correct line in the fontfile
For Count = 1 To Blocksize
Read Pixels
Next Count
Next Lus
Colums = Blocksize / Row 'Calculate the numbers of colums
Row = Row * 8 'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
Row = Row - 1 'Want to start with row=0 instead of 1
Colums = Colums - 1 'Same for the colums
Select Case Rotation
Case 0 '0 degrees rotation
For Rowcount = 0 To Row Step 8 'Loop for numbers of rows
A = Rowcount + Yoffset
For Columcount = 0 To Colums 'Loop for numbers of Colums
Read Pixels : If Inverse = 1 Then Toggle Pixels 'Read the byte from the file and if inverse = true then invert de byte
Xpos = Columcount 'Do some calculation to get the caracter on the correct Xposition
Temp = Carcount * Byteseach
Xpos = Xpos + Temp
Xpos = Xpos + Xoffset
For Pixelcount = 0 To 7 'Loop for 8 pixels to be set or not
Ypos = A + Pixelcount 'Each pixel on his own spot
Pixel = Pixels.0 'Set the pixel (or not)
Pset Xpos , Ypos , Pixel 'Finaly we can set the pixel
Shift Pixels , Right 'Shift the byte 1 bit to the right so the next pixel comes availible
Next Pixel
Next Columcount
Next Rowcount
Case 1 '90 degrees rotation
For Rowcount = Row To 0 Step -8 'Loop is now counting down
A = Rowcount + Xoffset
A = A - 15 'Correction to set Xpos on Xoffset with rotation
For Columcount = 0 To Colums
Read Pixels : If Inverse = 1 Then Toggle Pixels
Xpos = Columcount
Temp = Carcount * Byteseach
Xpos = Xpos + Temp
Xpos = Xpos + Yoffset 'We want that Xoffset is still Xoffset, so we need here the change from x to y
For Pixelcount = 7 To 0 Step -1
Ypos = A + Pixelcount
Pixel = Pixels.0
Pset Ypos , Xpos , Pixel
Shift Pixels , Right
Next Pixel
Next Columcount
Next Rowcount
Case 2 '180 degrees rotation
For Rowcount = Row To 0 Step -8
A = Rowcount + Yoffset
A = A - 7 'Correction to set Xpos on Xoffset with rotation
For Columcount = Colums To 0 Step -1
Read Pixels : If Inverse = 1 Then Toggle Pixels
Xpos = Columcount
Temp = Carcount * Byteseach
Xpos = Xpos - Temp
Xpos = Xpos - 8 'Correction to set Xpos on Xoffset with rotation
Xpos = Xpos + Xoffset
For Pixelcount = 7 To 0 Step -1
Ypos = A + Pixelcount
Pixel = Pixels.0
Pset Xpos , Ypos , Pixel
Shift Pixels , Right
Next Pixel
Next Columcount
Next Rowcount
Case 3 '270 degrees rotation
For Rowcount = 0 To Row Step 8
A = Rowcount + Xoffset
For Columcount = Colums To 0 Step -1
Read Pixels : If Inverse = 1 Then Toggle Pixels
Xpos = Columcount
Temp = Carcount * Byteseach
Xpos = Xpos - Temp
Xpos = Xpos - 8 'Correction to set Xpos on Xoffset with rotation
Xpos = Xpos + Yoffset
For Pixelcount = 0 To 7
Ypos = A + Pixelcount
Pixel = Pixels.0
Pset Ypos , Xpos , Pixel
Shift Pixels , Right
Next Pixel
Next Columcount
Next Rowcount
End Select
Next Carcount
End Sub 'End of this amazing subroutine
'=== Includes ===