Die Uhr funktioniert immer noch, wie schon sowas aussehen kann...
Auch das Minus hab ich auf die reihe gekriegt, nämlich so:
Aber zwei Sachen machen mir noch etwas Kopfschmerzen, einmal die Home-Funktion und einmal das Datum.
Warum funktioniert das Datum nicht?
Die einstellung für Uhr und Datum sind identisch im Code, also nichts was mit Time$ oder zu tun hat, ist anders als bei Date$
Und bei Menu_homecnt haben wir ja eine Variable definiert, ich würde jetzt mit meinen verknoteten Hirn denken: Ja gut, dann befüllen wir doch die Variable Menu_homecnt mit der Uhrzeit, also Menu_homecnt = Time$ damit der dann nach 10 Sekunden die Uhrzeit anzeiigt...
Nee warte mal, ich merk gerade selber, das ich Unfug schreibe...
Ich glaube, ich muss Menu_Homecnt irgendwie die Zeit_pos entziehen... Nee das scheint auch völliger Quatsch zu sein...
Muss ich nochmal darüber nachdenken...
Meld mich später nochmal!
Hier nochmal der aktueller Stand des Codes:
Auch das Minus hab ich auf die reihe gekriegt, nämlich so:
Code:
Case 2
Decr _min
If _min > 59 Then
_min = 59
End if
Aber zwei Sachen machen mir noch etwas Kopfschmerzen, einmal die Home-Funktion und einmal das Datum.
Warum funktioniert das Datum nicht?
Die einstellung für Uhr und Datum sind identisch im Code, also nichts was mit Time$ oder zu tun hat, ist anders als bei Date$
Und bei Menu_homecnt haben wir ja eine Variable definiert, ich würde jetzt mit meinen verknoteten Hirn denken: Ja gut, dann befüllen wir doch die Variable Menu_homecnt mit der Uhrzeit, also Menu_homecnt = Time$ damit der dann nach 10 Sekunden die Uhrzeit anzeiigt...
Nee warte mal, ich merk gerade selber, das ich Unfug schreibe...
Ich glaube, ich muss Menu_Homecnt irgendwie die Zeit_pos entziehen... Nee das scheint auch völliger Quatsch zu sein...
Muss ich nochmal darüber nachdenken...
Meld mich später nochmal!
Hier nochmal der aktueller Stand des Codes:
Code:
'_________________________ CONTROLLER-KONFIG ___________________________________
$regfile = "m8def.dat"
$framesize = 24
$swstack = 8
$hwstack = 32
$crystal = 1000000
'_________________________ LCD-Display Einstellungen ___________________________
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , _
Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Initlcd
Display On
Waitms 400
Cursor Off
Cls
' ===== SoftClock starten ======================================================
Enable Interrupts
Dim Newsec As Byte ' Flag fuer Erkennung von neuer Sekunde
Newsec = 0 ' Flag initialisieren
Config Date = Dmy , Separator = . ' Datumsformat einstellen
Config Clock = Soft , Gosub = Sectic ' Sekunden-Sub setzen und Uhr starten
Cls
Time$ = "00:00:00" ' Setzen auf Startwert
Date$ = "00.00.00" ' Setzen auf Startwert
'_________________________ Variablen ___________________________________________
Dim Menu_homecnt As Byte
Dim Zeit_pos As Integer
'_________________________ Taster: Uhreit stellen ______________________________
Config Pind.5 = Input
Portd.5 = 1
Taster_s Alias Pind.5
'_________________________ Taster: Zeit (+) ____________________________________
Config Pind.6 = Input
Portd.6 = 1
Taster_p Alias Pind.6
'_________________________ Taster: Zeit (-) ____________________________________
Config Pind.7 = Input
Portd.7 = 1
Taster_m Alias Pind.7
'_________________________ Kontroll-LED ________________________________________
Config Portb.0 = Output
Portb.0 = 1
Led Alias Portb.0
Do
' ===== Uhrzeit mit Taster einstellen ==========================================
Debounce Taster_s , 0 , Zeit_stelle , Sub ' Taster fuer Uhrzeit einstellen
Debounce Taster_p , 0 , Zeit_plus , Sub ' Taster fuer Plus
Debounce Taster_m , 0 , Zeit_minus , Sub ' Taster fuer Minus
' ===== Uhrzeit einstellen Ende ================================================
' ===== Diese Zeilen werden durch SECTIC aktiviert =============================
If Newsec = 1 Then ' Flag fuer neue Sekunde gesetzt ?
Newsec = 0 ' Erkennung auf Sekundenaenderung zuruecksetzen
End If
' ===== SECTIC-Zeilen Ende =====================================================
Locate 1 , 1 ' Zeige in Zeile 1, ab erstes Zeichen...
Lcd Time$ ' ... die Uhrzeit an.
Locate 2 , 1 ' Zeige in Zeile 1, ab erstes Zeichen...
Lcd Date$ ' ... das Datum an.
Cursor Off Noblink
Waitms 50
Loop
End
' =============================================================================
' ===== Service-Routine sectic wird automatisch jede Sekunde ausgeführt. ======
' =============================================================================
Sectic:
Toggle Led ' LED fuer Lebenszeichen toggeln
Newsec = 1 ' Flag fuer neue Sekunde setzen
Return
' =============================================================================
' ===== Stelle waehlen ========================================================
' =============================================================================
Zeit_stelle:
Menu_homecnt = 10 ' Auto-Home auf 10 Sekunden setzen
Incr Zeit_pos ' Position +1
If Zeit_pos > 8 Then
Zeit_pos = 0
End If
Locate 2 , 13
Select Case Zeit_pos
Case 0 ' 0 Ruheposition
Lcd "Uhr ";
Case 1 ' 1 Sekunden
Lcd "Sec.";
Case 2 ' 2 Minuten
Lcd "Min.";
Case 3 ' 3 Stunden
Lcd "Std.";
Case 4 ' 4 Tag
Lcd "Tag.";
Case 5 ' 5 Monat
Lcd "Mon.";
Case 6 ' 6 Jahr
Lcd "Jahr";
Case 7 ' 7 Zeit speichern/laden
Lcd "LdSp";
Case 8 ' 8 Initialisieren
Lcd "Init";
End Select
Return
Zeit_plus:
' Wenn ich auf Taster_p jumpt er zu der "Zeit_PLUS:"-Routine
' diese Routine wurde angesprungen weil Debounce den Druck vom Taster_p erkannt hat.
' Die Taste wurde also gedrückt um eine von Zeit_pos ausgewählte Stelle um eins zu erhöhen
Select Case Zeit_pos ' Hier wird die Variable IM CASE VERGLICHEN (Schubladendenken) (0=Normal,1=Sec,2=Min,3=Std,...)
Case 1 ' Case 1 da DURCH TASTER_P UND ZEIT_STELLE MINUTEN GEWAEHLT WURDEN
Incr _sec ' Hier die Sekunde um eins erhöhen
If _sec > 59 Then ' Überlauf abfangen (Sekunde nur von 0...59)
_sec = 0 ' Bei Sekunde > 59 wird wieder ab 0 angefangen
End if
Case 2 ' Case 2 da DURCH TASTER_P UND ZEIT_STELLE MINUTEN GEWAEHLT WURDEN
Incr _min ' Hier die Minuten um eins erhöhen
If _min > 59 Then ' Überlauf abfangen (Minuten nur von 0...59)
_min = 0 ' Bei Minuten > 59 wird wieder ab 0 angefangen
End if
Case 3 ' Case 3 da DURCH TASTER_P UND ZEIT_STELLE MINUTEN GEWAEHLT WURDEN
Incr _hour ' Hier die Stunde um eins erhöhen
If _hour > 23 Then ' Überlauf abfangen (Stunde nur von 0...23)
_hour = 0 ' Bei Stunde > 23 wird wieder ab 0 angefangen
End if
Case 3 ' Case 4 da DURCH TASTER_P UND ZEIT_STELLE MINUTEN GEWAEHLT WURDEN
Incr _day ' Hier die Tage um eins erhöhen
If _day > 31 Then ' Überlauf abfangen (Tage nur von 1...31)
_day = 1 ' Bei Tage > 31 wird wieder ab 1 angefangen
End If
Case 3 ' Case 5 da DURCH TASTER_P UND ZEIT_STELLE MINUTEN GEWAEHLT WURDEN
Incr _month ' Hier die Monate um eins erhöhen
If _month > 12 Then ' Überlauf abfangen (Monate nur von 1...12)
_month = 1 ' Bei Monate > 12 wird wieder ab 1 angefangen
End if
Case 3 ' Case 6 da DURCH TASTER_P UND ZEIT_STELLE MINUTEN GEWAEHLT WURDEN
Incr _year ' Hier die Jahr um eins erhöhen
If _year > 99 Then ' Überlauf abfangen (Jahr nur von 0...99)
_year = 0 ' Bei Jahr > 99 wird wieder ab 0 angefangen
End if
End Select
Return
Zeit_minus:
Select Case Zeit_pos
Case 1
Decr _sec
If _sec > 59 Then
_sec = 59
End if
Case 2
Decr _min
If _min > 59 Then
_min = 59
End if
Case 3
Decr _hour
If _hour > 23 Then
_hour = 23
End if
Case 3
Decr _day
If _day > 31 Then
_day = 31
End if
Case 3
Decr _month
If _month > 12 Then
_month = 12
End if
Case 3
Decr _year
If _year > 99 Then
_year = 99
End if
End Select
Return