enats
08.07.2009, 16:10
Hey Leute hoffe ihr könnt mir helfen,
Möchte gerne eine Taste in der Hauptschleife erkennen und beim drücken in ein Untermenü springen. Mit dem Debounce Befehl bis dahin eigentlich kein Problem. Jetzt sollte aber ein Unterschied darin liegen, wie lange ich die Taste drücke:
Kurzer Druck -> Nichts passiert (später vielleicht Led odes so schalten).
Langer Druck -> Untermenü geht auf.
Habe schon so vieles versucht.
Wollte Timer1 ca. mit 2 Sekunden zum Überlauf voreinstellen. Falls es zum Überlauf kommt sollte ein Untermenü aufgehen, bis ich dieses wieder mit dem gleichen Taster quitiere und zur Hauptschleife zurück kehre. Falls es nicht zum Überlauf kommt (Taster also nicht 2 Sekunden gedrückt wurde) sollte dieses Untermenü nicht aufgehen, der Timer gestopt und wieder auf den "2 Sekunden Wert" zurück gestellte, eine Led getoggelt und in die Hauptschleife zurück gesprungen werden.
Ich hoffe Ihr könnt mir helfen, bitte bitte bitte:-)
Hier meine Bascom Datei
'************************************************* *********************************************
'************************************************* *********************************************
'************************ Variablen Festlegen ********************************************
Dim A As Byte
'************************************************* *********************************************
'************************************************* *********************************************
'************************ Hauptprogramm **********************************************
Stop Timer1
Sound Portd.4 , 800 , 150
Call Lcd_rs232 ' Rufe Unterprogramm "Lcd_RS232" auf
Do
If A = 1 Then Gosub Lcd_uhrzeit
'Wenn A =1 , also Taster länger als 2 Sekunden gedrückt, wechsele in Sub LCD_UHRZEIT
Debounce Pinc.1 , 0 , Ledein , Sub
Loop
End
'************************************************* *********************************************
'************************************************* *********************************************
'************************ Unterprogramme *********************************************
Sub Lcd_rs232: ' Sub Standardbildschirm
Cls
Locate 1 , 4
Lcd "RS232 Test"
End Sub
'------------------------------
Sub Lcd_uhrzeit:
Sound Portd.4 , 900 , 250
Cls
Locate 1 , 5
Lcd "Uhrzeit"
A = 0
'Variable A wieder auf 0 setzen
Do
Debounce Pinc.1 , 0 , Lcd_rs232
' Taster 1 nochmal drücken um wieder ins Hauptmenü zu wechseln
Loop
End Sub
'------------------------------
Sub Ledein:
Timer1 = 36736
'ca. 2 Sekunden bis zum Überlauf
Start Timer1
If Pinc.1 = 1 Then
Stop Timer1
'Wenn Taster wieder losgelassen wird stoppe den Timer1, ANNSONSTEN KOMMT ES ZUM ÜBERLAUF T1
Timer1 = 36736
' Timer wieder zurücksetzen auf ca. 2 Sekunden, falls es nicht zum Überlauf kam
Toggle Portd.7
' Falls kein Überlauf Toggle LED
End If
End Sub
'************************************************* *********************************************
'************************************************* *********************************************
'************************ Interrupts *********************************************
T1:
Stop Timer1
Incr A
Call Lcd_uhrzeit
Return
Möchte gerne eine Taste in der Hauptschleife erkennen und beim drücken in ein Untermenü springen. Mit dem Debounce Befehl bis dahin eigentlich kein Problem. Jetzt sollte aber ein Unterschied darin liegen, wie lange ich die Taste drücke:
Kurzer Druck -> Nichts passiert (später vielleicht Led odes so schalten).
Langer Druck -> Untermenü geht auf.
Habe schon so vieles versucht.
Wollte Timer1 ca. mit 2 Sekunden zum Überlauf voreinstellen. Falls es zum Überlauf kommt sollte ein Untermenü aufgehen, bis ich dieses wieder mit dem gleichen Taster quitiere und zur Hauptschleife zurück kehre. Falls es nicht zum Überlauf kommt (Taster also nicht 2 Sekunden gedrückt wurde) sollte dieses Untermenü nicht aufgehen, der Timer gestopt und wieder auf den "2 Sekunden Wert" zurück gestellte, eine Led getoggelt und in die Hauptschleife zurück gesprungen werden.
Ich hoffe Ihr könnt mir helfen, bitte bitte bitte:-)
Hier meine Bascom Datei
'************************************************* *********************************************
'************************************************* *********************************************
'************************ Variablen Festlegen ********************************************
Dim A As Byte
'************************************************* *********************************************
'************************************************* *********************************************
'************************ Hauptprogramm **********************************************
Stop Timer1
Sound Portd.4 , 800 , 150
Call Lcd_rs232 ' Rufe Unterprogramm "Lcd_RS232" auf
Do
If A = 1 Then Gosub Lcd_uhrzeit
'Wenn A =1 , also Taster länger als 2 Sekunden gedrückt, wechsele in Sub LCD_UHRZEIT
Debounce Pinc.1 , 0 , Ledein , Sub
Loop
End
'************************************************* *********************************************
'************************************************* *********************************************
'************************ Unterprogramme *********************************************
Sub Lcd_rs232: ' Sub Standardbildschirm
Cls
Locate 1 , 4
Lcd "RS232 Test"
End Sub
'------------------------------
Sub Lcd_uhrzeit:
Sound Portd.4 , 900 , 250
Cls
Locate 1 , 5
Lcd "Uhrzeit"
A = 0
'Variable A wieder auf 0 setzen
Do
Debounce Pinc.1 , 0 , Lcd_rs232
' Taster 1 nochmal drücken um wieder ins Hauptmenü zu wechseln
Loop
End Sub
'------------------------------
Sub Ledein:
Timer1 = 36736
'ca. 2 Sekunden bis zum Überlauf
Start Timer1
If Pinc.1 = 1 Then
Stop Timer1
'Wenn Taster wieder losgelassen wird stoppe den Timer1, ANNSONSTEN KOMMT ES ZUM ÜBERLAUF T1
Timer1 = 36736
' Timer wieder zurücksetzen auf ca. 2 Sekunden, falls es nicht zum Überlauf kam
Toggle Portd.7
' Falls kein Überlauf Toggle LED
End If
End Sub
'************************************************* *********************************************
'************************************************* *********************************************
'************************ Interrupts *********************************************
T1:
Stop Timer1
Incr A
Call Lcd_uhrzeit
Return