Update zu Beitrag Nr. 10
Hallo zusammen !
Der Gute HBA (HinterBlauenAugen) hatte mich darauf hingewiesen, dass ich meine Lösung zum Zerlegen des Textstrings "Eingabe" in einzelne Zeichen wesentlich einfacher und schneller realisieren kann.
Das "Zauberwort" dafür heißt:
Overlay
Ich hatte mich bis jetzt nicht wirklich mit "Overlay" befasst, weil ich im Hinterkopf immer noch einen alten Hinweis hatte.....
"Früher" hieß es beim Overlay: Man müsste die genauer Speicheradresse kennen, um die darin enthaltenen Daten zu "manipulieren".
HBA hatte mich aber eines besseren belehrt und mir einen Tipp gegeben, wie ich das Overlay dimensionieren muss.
Aus dem Grunde habe ich meine Routine zum Senden der einzelnen Zeichen aus dem Textstring geändert!
Kurzer Blick zurück....
(Vollständiger
Beitrag Nr. 10)
Vorher wurde der Textstring mit den Befehlen "Len()", "Mid()" und "Asc()" zerlegt und in die jeweils zugehörige ASCII-Nummer ermittelt.
Vollständige
alte Subroutine:
Code:
Text:
'Text-String ausgeben
Bitwait Display_busy , Set
Reset Display_cs ' Chipselect Display Module
Waitus 2
I = &H48 ' Display Text
Spiout I , 1
Bitwait Display_busy , Reset
Spiout X1 , 1 ' Send Parameter
Spiout Y1 , 1
Spiout Xmax , 1
' Eingabestring in einzelne Zeichen zerlegen
For Zz = 1 To Len(eingabe) 'Pro Zeichen im String aufwärtszählen
Zeichen = Mid(eingabe , Zz , 1) 'Einzelne Ziffer, oder Buchstabe aus String
Char = Asc(zeichen)
Spiout Char , 1
Next Zz
Char = 0 'Binäre Null zum Abschluss für den Textstring !
Spiout Char , 1
Bitwait Display_busy , Set
Set Display_cs ' Chipselect Display Module
Waitus 1
Return
Und nun die neue Variante:
Im Header bitte hinzufügen:
Dim Eingabe_o(23) As Byte At Eingabe Overlay
(Dafür kann:
Dim Zeichen As String * 1 entfallen)
In die Subroutine "Text" wird dann folgendes eingetragen:
(Bitte die alte "For Zz - Next Zz Schleife" entfernen !)
CodeBox bascom
' Eingabestring in einzelne Zeichen zerlegen
For Zz = 1 To Len(eingabe) 'Pro Zeichen im String aufwärtszählen
Char = Eingabe_o(zz) 'ASCII-Zeichen aus dem Eingabe-Array lesen
Spiout Char , 1
Next Zz
Eine Umwandlung der einzelnen Stringzeichen mit "Asc()" ist nicht mehr notwendig, weil im Array schon die zugehörign ASCII-Nummern abgelegt werden.
Der Programmcode ist nun nicht nur kürzer sondern auch effektiver!
Vollständige neue Subroutine "Text":
CodeBox bascom
Text:
'Text-String ausgeben
Gosub Positionen
Bitwait Display_busy , Set
Reset Display_cs ' Chipselect Display Module
Waitus 2
I = &H48 ' Display Text
Spiout I , 1
Bitwait Display_busy , Reset
Spiout X1 , 1 ' Send Parameter
Spiout Y1 , 1
Spiout Xmax , 1
' Eingabestring in einzelne Zeichen zerlegen
For Zz = 1 To Len(eingabe) 'Pro Zeichen im String aufwärtszählen
Char = Eingabe_o(zz) 'ASCII-Zeichen aus dem Overlay Eingabe lesen
Spiout Char , 1
Next Zz
Char = 0 'Binäre Null zum Abschluss für den Textstring !
Spiout Char , 1
Bitwait Display_busy , Set
Set Display_cs ' Chipselect Display Module
Waitus 1
Return
Danke noch mal an HBA, für den Hinweis und die Tipps !
Grüße,
Cassio