BlaueLed
12.09.2008, 17:15
Hallo,
für mein 240x128 Lcd mit T6963C Controller benutze ich die Sub´s von Evert Dekker. Probleme habe ich mit dem 16x16 Font. Wenn ich einen Text mit 16x16 Font schreibe, dann sehe ich aber nur 16x8 Pixel. Also der Text wird in der Mitte abgetrennt. Ich sehe nur den die hälfte der 16 Pixel. Wenn ich den Text aber um 180° drehe, dann wird er zwar auf dem kopf dargestellt, aber dafür in 16x16 Pixel. Ich kann mir keinen Reim draus machen, was für unterschiede zwischen der Funktion 0° Drehung und 180° Drehung bestehen. Wäre super, wenn Ihr mal über den Code drüber schauen könntet und mir vielleicht helfen würdet.
mfg Kay
$regfile = "m128def.DAT"
$crystal = 7372800
$baud = 19200
$hwstack = 100
$swstack = 120
$framesize = 100
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
'=== Your main prog here ====
Do
Lcdtext "5X5 Font" , 10 , 2 , 4 , 0 , 0
Lcdtext "8X8 Font" , 2 , 120 , 2 , 1 , 3
Lcdtext "6X8 Font" , 10 , 20 , 3 , 0 , 0
Lcdtext "16X16 font" , 10 , 30 , 2 , 0 , 0
Lcdtext "Inverted" , 10 , 85 , 2 , 1 , 0
Lcdtext "If you can't read this then incr. Swstack" , 1 , 120 , 4 , 0 , 0
Wait 10
Cls
Lcdtext "0 deg.Rotation" , 10 , 10 , 1 , 0 , 0
Lcdtext "90 deg.Rotation" , 170 , 1 , 1 , 0 , 1
Lcdtext "180 deg.Rotation" , 120 , 20 , 1 , 0 , 2
Lcdtext "270 deg.Rotation" , 200 , 120 , 1 , 0 , 3
Lcdtext "Also inverted" , 150 , 80 , 1 , 1 , 2
Lcdtext "Every font" , 150 , 100 , 2 , 0 , 2
Wait 10
Cls
Loop
End
'=== 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 ===
$include "Font8x8.font" 'Includes here your font files
$include "Font16x16.font" 'If you don't need the files in your program, don't include them,
$include "Font6x8.font" 'these are flash memory eaters.
$include "Font5x5.font"
für mein 240x128 Lcd mit T6963C Controller benutze ich die Sub´s von Evert Dekker. Probleme habe ich mit dem 16x16 Font. Wenn ich einen Text mit 16x16 Font schreibe, dann sehe ich aber nur 16x8 Pixel. Also der Text wird in der Mitte abgetrennt. Ich sehe nur den die hälfte der 16 Pixel. Wenn ich den Text aber um 180° drehe, dann wird er zwar auf dem kopf dargestellt, aber dafür in 16x16 Pixel. Ich kann mir keinen Reim draus machen, was für unterschiede zwischen der Funktion 0° Drehung und 180° Drehung bestehen. Wäre super, wenn Ihr mal über den Code drüber schauen könntet und mir vielleicht helfen würdet.
mfg Kay
$regfile = "m128def.DAT"
$crystal = 7372800
$baud = 19200
$hwstack = 100
$swstack = 120
$framesize = 100
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
'=== Your main prog here ====
Do
Lcdtext "5X5 Font" , 10 , 2 , 4 , 0 , 0
Lcdtext "8X8 Font" , 2 , 120 , 2 , 1 , 3
Lcdtext "6X8 Font" , 10 , 20 , 3 , 0 , 0
Lcdtext "16X16 font" , 10 , 30 , 2 , 0 , 0
Lcdtext "Inverted" , 10 , 85 , 2 , 1 , 0
Lcdtext "If you can't read this then incr. Swstack" , 1 , 120 , 4 , 0 , 0
Wait 10
Cls
Lcdtext "0 deg.Rotation" , 10 , 10 , 1 , 0 , 0
Lcdtext "90 deg.Rotation" , 170 , 1 , 1 , 0 , 1
Lcdtext "180 deg.Rotation" , 120 , 20 , 1 , 0 , 2
Lcdtext "270 deg.Rotation" , 200 , 120 , 1 , 0 , 3
Lcdtext "Also inverted" , 150 , 80 , 1 , 1 , 2
Lcdtext "Every font" , 150 , 100 , 2 , 0 , 2
Wait 10
Cls
Loop
End
'=== 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 ===
$include "Font8x8.font" 'Includes here your font files
$include "Font16x16.font" 'If you don't need the files in your program, don't include them,
$include "Font6x8.font" 'these are flash memory eaters.
$include "Font5x5.font"