Code:
$regfile = "m128def.dat"
$crystal = 16000000
$framesize = 100
$swstack = 100
$hwstack = 100
$baud = 57600
'$sim
Luefter_pwm Alias Portb.4 : Config Luefter_pwm = Output : Luefter_pwm = 0
Testpin Alias Portf.4 : Config Testpin = Output : Testpin = 0
Declare Sub Lcd_ausgabe()
Declare Sub Lcd_put(_x As Byte)
Declare Sub Lcd_cls()
Declare Sub Lcd_print(byval _x As Byte , Byval _y As Byte , Byval _text As String)
'################### LCD Settings #############################################
Dim Lcd_textbuffer As String * 20 , Lcd_textbuffer1 As String * 20
Config Lcdpin = Pin , Port = Portc , E = Portd.5 , Rs = Portg.3
Config Lcd = 20 * 4
Config Portg.4 = Output
Lcd_enable Alias Portd.5
Lcd_rs Alias Portg.3
Lcd_rw Alias Portg.4
Lcd_data Alias Portc
Cursor Off
Initlcd
Deflcdchar 0 , 4 , 14 , 31 , 4 , 4 , 4 , 4 , 32 ' Pfeil hoch
Deflcdchar 1 , 4 , 4 , 4 , 4 , 31 , 14 , 4 , 32 ' Pfeil runter
Deflcdchar 2 , 27 , 27 , 27 , 27 , 27 , 27 , 27 , 32 ' Pause-Zeichen
Deflcdchar 3 , 16 , 24 , 28 , 30 , 28 , 24 , 16 , 32 ' Play-Zeichen
Deflcdchar 4 , 32 , 32 , 31 , 31 , 31 , 31 , 31 , 32 ' Stop-Zeichen
Deflcdchar 5 , 32 , 32 , 32 , 32 , 12 , 10 , 12 , 10 ' kleines R
Deflcdchar 6 , 32 , 32 , 32 , 32 , 10 , 10 , 12 , 10 ' kleines K
Deflcdchar 7 , 32 , 32 , 32 , 32 , 8 , 8 , 8 , 14 ' kleines L
Cls
Dim Lcd_4zeilen As String * 80
Dim Lcd_4zeilen_char(80) As Byte At Lcd_4zeilen Overlay
Dim I As Byte
Dim Text As String * 20
Do
Call Lcd_print(1 , 1 , "Das ist die 1. Zeile")
Call Lcd_print(1 , 2 , "Das ist die 2. Zeile")
Text = "T" + Chr(5) + "= 5 " + Chr($df) + "C"
Call Lcd_print(1 , 3 , Text)
Call Lcd_print(1 , 4 , "Das ist die 4. Zeile")
Toggle Testpin
Call Lcd_cls()
'Cls
Toggle Testpin
Call Lcd_ausgabe
Waitms 100
Loop
End
Sub Lcd_ausgabe
Local _i As Byte
For _i = 1 To 80 : Call Lcd_put(lcd_4zeilen_char(_i)) : Next _i
End Sub
Sub Lcd_put(_x As Byte)
' Dauer für die Ausgabe von 20 Zeichen: 1,1ms
' 80 Zeichen: 3,1ms (bei 27 nop's Pause)
' mit Lcd Chr(_x) in der Funktion 20 Z: 23ms
If _x = 0 Then _x = $a0 'chr(0) auf Leerzeichen mappen
Lcd_data = _x 'Datenbyte auf Bus legen
Lcd_rw = 0 'Schreibbefehl
Lcd_rs = 1 'Datenpuffer
!nop
!nop
Lcd_enable = 1
!nop
!nop
Lcd_enable = 0
'auf Display-Ready warten
Toggle Ddrc 'Busrichtung lesen
Lcd_rw = 1 'Lesebefehl
Lcd_rs = 0 'Steuerpuffer
!nop
!nop
Do
Toggle Lcd_enable
!nop
Loop Until Pinc.7 = 0 'auf busy-flag warten
Toggle Ddrc 'Busrichtung schreiben
End Sub
Sub Lcd_print(byval _x As Byte , Byval _y As Byte , _text As String * 20)
'Z1S1 = 1-20
'Z2S1 = 41-60
'Z3S1 = 21-40
'Z4S1 = 61-80
Local _position As Byte
Local _anzahl As Byte
Local _i As Byte
Select Case _y
Case 1 : _position = 0
Case 2 : _position = 40
Case 3 : _position = 20
Case 4 : _position = 60
End Select
_position = _position + _x
_anzahl = Len(_text)
_i = Memcopy(_text , Lcd_4zeilen_char(_position) , _anzahl)
End Sub
Sub Lcd_cls()
'Dauer knapp 1.6ms
'Bsacom CLS dauert 5.2ms
Lcd_data = 1 'Datenbyte auf Bus legen
Lcd_rw = 0 'Schreibbefehl
Lcd_rs = 0 'Datenpuffer
!nop
!nop
Lcd_enable = 1
!nop
!nop
Lcd_enable = 0
'auf Display-Ready warten
Toggle Ddrc 'Busrichtung lesen
Lcd_rw = 1 'Lesebefehl
Lcd_rs = 0 'Steuerpuffer
!nop
!nop
Do
Toggle Lcd_enable
!nop
Loop Until Pinc.7 = 0 'auf busy-flag warten
Toggle Ddrc 'Busrichtung schreiben
End Sub
Lesezeichen