'##############################################################################
' LCD-Display_TG12864B.BAS                                     Stand 05.09.2019
' ------------------------                                     (C) Markus Fulde
'
' Testprogramm zur Inbetriebnahme des Grafik-Display TG12864B
'
' Die Inbetriebnahme erfolgt mit einem Steckbrett auf Basis ATMega8L
'
' Die Spezialität bei BASCOM mit diesem Display besteht in der Verwendung einer
' speziellen Library.
'
' Die für die LCD-Display-Ansteuerung notwendigen Routinen sind
' als solche gekennzeichnet und bereits zur späteren Verwendung
' ausgelagert.
'
' Die Anbindung des Display erfolgt über einen 8 Bit breiten Datenbus
' verschiedensten Steuerleitungen und mit einer Betriebsspannung von
' 5V
'
'##############################################################################

'------------------------------------------------------------------------------
' Compilerinstruktionen und Compilerdirektiven
'------------------------------------------------------------------------------
$regfile = "m8def.dat"                                      ' Definitionsdatei für ATmega128 laden
$crystal = 1000000                                          ' Quarzfrequenz für 16 MHz festlegen

$hwstack = 40
$swstack = 40
$framesize = 40

' Hier wird die spezielle Grafik-LIB von BASCOM geladen
$lib "glcdKS108.lib"

'------------------------------------------------------------------------------
' Allgemeine Zusatzinformatonen zu Programmbeginn
'------------------------------------------------------------------------------

' Generelle Informationen zum Display

' Das Display verfügt über 128x64 Pixel.
' Es ist über zwei KS108 Displaycontroller mit 2 Pages zu jeweils 64x64 Pixel
' organisiert. Über die physikalische Organisation des Display muss der An-
' wender sich aber keine Gedanken machen da dies vollständig von BASCOM
' übernommen wird.
'
' Organisation der Auflösung:
'  +------ x-Koordinate
'  | +---- y-Koordinate
'  | |
'  0,0 ------------------------127,0
'   !                            !
'   !                            !
'   !                            !
'   !                            !
'  0,63 -----------------------127,63

'------------------------------------------------------------------------------
' Definition von Ressourcen
'------------------------------------------------------------------------------

' ----- LCD-Display -----

' LCD-Display
Bglcd_dataport Alias Portd
Bglcd_controlport Alias Portb

Glcd_cs1 Alias 2                                            ' GPIO PB2 chip select 1
Glcd_cs2 Alias 3                                            ' GPIO PB3 chip select 2
Glcd_data_cmd Alias 0                                       ' GPIO PB0 data/instruction
Glcd_rw Alias 1                                             ' GPIO PB1 read/write
Glcd_rst Alias 5                                            ' GPIO PB5 resets
Glcd_e Alias 4                                              ' GPIO PB4 output data / latches data

'------------------------------------------------------------------------------
' Definition von Konstaten
'------------------------------------------------------------------------------

' ----- Allgemeine Systemkonstanten -----

Const False = 0
Const True = 1

' ----- LCD -----

'------------------------------------------------------------------------------
' Definition von Variablen und Datentypen
'------------------------------------------------------------------------------

' ----- Temporäre Hilfsvariablen -----
Dim Temp_byte_1 As Byte                                     ' Temporäre Byte Variable 1

' ----- Variablen für LCD-Display -----

'------------------------------------------------------------------------------
' Prototyping
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
' Konfiguration und Basiseinstellungen (Projekt und Testumgebung)
'------------------------------------------------------------------------------

' --------------------------------- CONFIG ------------------------------------

' ----- LCD Display -----

' Konfiguration LCD Display
' Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portb , Ce = 2 , Ce2 = 3 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 4
Config Graphlcd = 128 * 64sed , Dataport = Bglcd_dataport , Controlport = Bglcd_controlport , Ce = Glcd_cs1 , Ce2 = Glcd_cs2 , Cd = Glcd_data_cmd , Rd = Glcd_rw , Reset = Glcd_rst , Enable = Glcd_e

Initlcd                                                     ' LCD Initialisieren (normal beim ersten LCD Zugriff automatisch)
Cls                                                         ' Display löschen

' ------------------------------- Port's und Pin's ----------------------------

' ------------------------------ Variablen und Werte --------------------------

' ----- LCD-Display -----

'------------------------------------------------------------------------------
' Und los gehts, hier noch die Restarbeiten
'------------------------------------------------------------------------------

' ---------------------------------- Gosub's ----------------------------------

' #############################################################################
'
'                   Hauptprogramm zum Grafik-Display TG12864B
'
' #############################################################################

' Erste Textausgabe mit großem Font auf Dsiplaytext schreiben

Setfont Font16x16                                           ' Großer FONT laden

Lcdat 3 , 24 , "Hallo"
Lcdat 6 , 1 , "TG12864B" , 1                                ' Text invers

Wait 5                                                      ' 5 Sekunden warten

' ----------------------------------------------
' ----- Hier ist die Programmhauptschleife -----
' ----------------------------------------------

Do                                                          ' Hauptschleife

      ' ---- Text ausgeben ----

      Cls                                                   ' Display löschen

      Setfont Font8x8                                       ' Kleiner FONT laden
      Lcdat 1 , 1 , "Zeile 1"
      Waitms 500
      Lcdat 2 , 1 , "Zeile 2"
      Waitms 500
      Lcdat 7 , 1 , "Zeile 7 invers" , 1
      Waitms 500
      Lcdat 8 , 1 , "Zeile 8 invers" , 1
      Waitms 500

      Wait 5

      ' ---- Linien malen ----

      Cls                                                   ' Display löschen

      Lcdat 1 , 35 , "Linien"
      Waitms 500
      Line(0 , 63) -(127 , 0) , 1
      Waitms 500
      Line(0 , 0) -(127 , 63) , 1
      Wait 2
      Lcdat 8 , 30 , "loeschen"
      Waitms 500
      Line(0 , 63) -(127 , 0) , 0
      Waitms 500
      Line(0 , 0) -(127 , 63) , 0

      ' ---- Kreise malen ----

      Cls                                                   ' Display löschen

      Lcdat 1 , 1 , "Kreise"

      ' 15 Kreise von innen nach außen im Abstand von 2 Pixel mahlen
      For Temp_byte_1 = 0 To 30 Step 2
        Circle(64 , 32) , Temp_byte_1 , 1                   ' Farbe sichtbar
        Waitms 100
      Next

      Wait 2

      ' Kreisevon außen nach innen wieder löschen
      For Temp_byte_1 = 30 To 0 Step -2
        Circle(64 , 32) , Temp_byte_1 , 0                   ' Mit Farbe unsichbar
        Waitms 100
      Next

      ' ---- Bild anzeigen ----

      Cls                                                   ' Display löschen

      Showpic 0 , 0 , Picture                               ' BGF Grafik anzeigen

      Wait 5

      ' ---- Sonstige Display-Kommandos ----

      ' Gemäß Kommandoliste des Displays wird noch das Kommando zum Einschalten
      ' und Ausschalten des Display verwendet.

      ' Mit dem Kommando GLCDCMD können direkt Kommandos an das SED LCD Display
      ' gesendet werden. Der Parameter 1 und 2 gibt damit die CE line 1 und 2
      ' für die zwei Displaycontroller der getrennten Displayseiten an.

      Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2                   ' Beide Displayseiten aus

      Wait 1

      Glcdcmd &H3F , 1 : Glcdcmd &H3F , 2                   ' Beide Displayseiten an

      Wait 5

Loop                                                        ' Hauptschleife

'## End Hauptprogramm #########################################################

'------------------------------------------------------------------------------
' Devices schließend und ggf. "Terminate Programm execution"
'------------------------------------------------------------------------------

' System halt
End                                                         'end program

'------------------------------------------------------------------------------
' Definition von globalen Konstantenfeldern
'------------------------------------------------------------------------------

' ------------------------------- Grafiken für das GLCD -----------------------

'include the picture data
Picture:
$bgf "BASCOM.bgf"

' ------------------------------- FONT's für das GLCD -------------------------

' Include Font nach dem END und damit nach dem Programmcode damit nicht FONT-
' Data als Code interpretiert wird (sollte ganz am Ende stehen)
$include "font8x8.font"                                     ' Daten für kleinen FONT
$include "font16x16.font"                                   ' Daten für großen FONT

' ----------------------------------------------------------------------------

'###################################### END ###################################

'################################### Historie #################################
' 05.09.2019 : Version 1.0
'              Erstellung der 1. Version der generellen Inbetriebnahme
'##############################################################################