Taster:
Locate 1 , 10 : Lcd "Hallo"
Locate 2 , 10 : Lcd "Hallo"
Locate 3 , 10 : Lcd "Hallo"
Locate 4 , 10 : Lcd "Hallo"
Return
Config Debounce = 500
Cls
Locate 1 , 1 : Lcd "Hallo"
Locate 2 , 1 : Lcd "Hallo"
Locate 3 , 1 : Lcd "Hallo"
Locate 4 , 1 : Lcd "Hallo"
A = 0
Debounce Pind.4 , 0 , Menu1 , Sub
Return
Menu1:
Cls
Locate 1 , 1 : Lcd "Menue 1"
Return
ja das setzte ich doch Config debounce = X
Code:Config Debounce = 500
$regfile = "m8def.dat"
$crystal = 16000000
$framesize = 32
$swstack = 32
$hwstack = 64
'Hast du eine RS232-Verbindzung zum PC, oder warum stellst du die Baudrate ein?
$baud = 38400
'Aus- und Eingänge bestimmen
Ddrd = &B1111_0110
Portd = &B0000_1001
'PD1 = RxD
'PD2 = TxD
'PD3 = Taster
'PD5 = LCD-RS
'PD6 = LCD-E
Ddrb = &B1111_1111
Portb = &B0000_0000
'PB0 bis PB7 = LCD 8bit
'LCD konfigurieren (8bit)
Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5
'LCD-Typ angeben
Config Lcd = 20 * 4
'LCD_flag dient dazu, die Daten nur einmal zum LCD zu senden
Dim Lcd_flag As Bit
'Anzeige_flag sorgt für den Wechsel der Anzeige (Standard oder Menü)
Dim Anzeige_flag As Bit
'Aliasnamen für den Taster, um nicht immer PIND.3 schreiben zu müssen
Taster Alias Pind.3
'**********************************************************
' ----Hauptschleife----
'**********************************************************
Do
If Taster = 0 Then 'Taster abfragen
Print ".............Taster gedrückt" 'Printausgabe
Toggle Anzeige_flag 'Anzeige wechseln (Standard <-> Menü)
Lcd_flag = 0 'LCD_Flag auf Null, damit es auch einmal angezeigt wird
Else
End If
If Anzeige_flag = 0 Then 'Anzeige_flag auswerten
Gosub Lcdanz 'gehe zur Standardanzeige
Else
Gosub Menue 'gehe zur Menüanzeige
End If
Loop
'**********************************************************
' ----Hauptschleife----
'**********************************************************
'**********************************************************
' ----Subroutinen----
'**********************************************************
'LCD Standardanzeige-------------------------------
Lcdanz:
If Lcd_flag = 0 Then 'wurde das LCD schon mal aktualisiert?
Print "Lcdanz ausführen" 'Printausgabe
Locate 1 , 1 : Lcd "1. Zeile "
Locate 2 , 1 : Lcd "2. Zeile "
Locate 3 , 1 : Lcd "3. Zeile "
Locate 4 , 1 : Lcd "4. Zeile "
Lcd_flag = 1 'LCD wurde einmal aktualisiert
Bitwait Taster , Set 'warten ob der Taster losgelassen wurde
Else
End If
Return
'Sub für Taster-------------------------------------
Menue:
If Lcd_flag = 0 Then 'wurde das LCD schon mal aktualisiert?
Print "Menue ausführen" 'Printausgabe
Locate 1 , 10 : Lcd "Hallo"
Locate 2 , 10 : Lcd "Hallo"
Locate 3 , 10 : Lcd "Hallo"
Locate 4 , 10 : Lcd "Hallo"
Lcd_flag = 1 'LCD wurde einmal aktualisiert
Bitwait Taster , Set 'warten ob der Taster losgelassen wurde
Else
End If
Return
End 'end program
Menue:
If Lcd_flag = 0 Then 'wurde das LCD schon mal aktualisiert?
Print "Menue ausführen" 'Printausgabe
Locate 1 , 10 : Lcd "Menue"
Locate 2 , 10 : Lcd "Oberer Temp"
Locate 3 , 10 : Lcd "Unterer Temp"
Locate 4 , 10 : Lcd "Abbrechen"
Lcd_flag = 1
K = Encoder(pind.2 , Pind.3 , Links , Rechts , 0) ' LCD wurde einmal aktualisiert
Bitwait Taster , Set 'warten ob der Taster losgelassen wurde
Else
End If
Return
Rechts:
B = B + 1
If B = 0 Then
Cls
Locate 2 , 1 : Lcd "Obere Temp."
End If
If B = 1 Then
Cls
Locate 2 , 1 : Lcd "Untere Temp."
End If
If B = 3 Then
B = 0
Cls
Locate 2 , 1 : Lcd "Abbrechen"
End If
Bitwait k , Set
Bitwait Taster , Set
Return
..... is das vom ansatz wenigsten ein wenig richtig??
Links= 3-1-0-2
Rechts= 3-2-0-1
Dim Z as Byte
Z = 127
Das ist KEIN Binärcode. Encoder arbeiten IMMER im Gray-Code damit sich beiOkay andere Ansatz mein Encoder hat 4 verschiedenen Stellungen
00 0
01 1
11 3
10 2
in der Reihenfolge
kann ich nicht eine Tabelle erstellen wenn 00 dann gehe auf punkt 1
wenn 01 dann gehe auf Punkt 2
wenn 11 dann gehe auf Punkt 3
wenn 10 dann gehe auf Punkt 4
$regfile = "m8def.dat"
$crystal = 16000000
$framesize = 32
$swstack = 32
$hwstack = 64
Ddrd = &B11100011
Portd = &B00011100
Ddrb = &B11111111
Portb = &B00000000
Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5
Config Lcd = 20 * 4
Dim Z As Byte
Dim K As Byte
Z = 127
Cls
Do
K = Encoder(pind.2 , Pind.3 , Rauf , Runter , 0 )
Locate 1 , 1 : Lcd Z
Loop
Rauf:
Z = Z + 1
Return
Runter:
Z = Z - 1
Return
End
Also es funzt aller Dings hab ich pro Rasten-Punkt (gefühlt im Finger) 2 werte hoch oder runter und schnell drehen ist auch nicht drin ....
.... ist das so okay??
If K = 0 Then
......
Else
End if
Dim Z As Byte
Dim K As Byte
Z = 127
Cls
Do
K = Encoder(pind.2 , Pind.3 , Runter , Rauf , 1 )
Locate 1 , 1 : Lcd Z
Loop
Rauf:
If K = 1 Then
Incr Z
End If
Return
Runter:
If K = 1 Then
Decr Z
End If
Return
End