'PinB.3 = LED Beleuchtung ein/aus
'PinB.4 = LED Automatische Anzeige der Werte
'PinB.5 = LED Manuelle Anzeige der Werte
'PinD.2 = LED Sekundentakt (1s an, 1s aus)
'PinD.4 = Taster Uhrzeit einstellen
'PinD.5 = Taster Aufwärtszählen der Stunden / Minuten / Sekunden
'PinD.6 = Taster Abwärtszählen der Stunden / Minuten / Sekunden
'PinD.7 = Taster fürs manuelle Durchschalten der LCD - Anzeige
'PinB.0 = Taster fürs Umschalten von manueller auf automatisch wechselnde Anzeige
'Sec_flag Sekundenvariable, in der das LCD die Zeitinformation erhält
'Flag_auto = Variable legt die Anzeigedauer in der sub Auto_anzeige in sec fest
'X = Variable legt die Anzahl und die Reihenfolge der Anzeigen in der sub Auto_anzeige fest
$regfile "m8def.dat"
$crystal = 1000000
$framesize = 64
$hwstack = 64
$swstack = 64
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 4
Cursor Off
Cls
Config Pinb.3 = Output
Portb.3 = 0
Config Pinb.4 = Output
Portb.4 = 0
Config Pinb.5 = Output
Portb.5 = 0
Config Pind.3 = Output
Config Pind.4 = Input
Portd.4 = 1
Taster_uhr_stellen Alias Pind.4
Config Pind.5 = Input
Portd.5 = 1
Taster_uhr_hoch Alias Pind.5
Config Pind.6 = Input
Portd.6 = 1
Taster_uhr_runter Alias Pind.6
Config Pind.7 = Input
Portd.7 = 1
Taster_man_anzeige Alias Pind.7
Config Pinb.0 = Input
Portb.0 = 1
Taster_auto_anzeige Alias Pinb.0
Dim X As Byte
X = 0
Dim Y As Byte
Y = 0
Config Debounce = 50
Enable Interrupts
Dim Flag_x As Byte
Dim Flag_y As Byte
Dim Flag_z As Word
Dim Flag_auto As Byte
Flag_auto = 0
Dim Sec_flag As Bit
Dim Str_temp As String * 5
Config Clock = Soft , Gosub = Sectic
Time$ = "00:00:00"
Dim Einschalt_std As Byte
Dim Einschalt_min As Byte
Dim Ausschalt_std As Byte
Dim Ausschalt_min As Byte
Einschalt_std = 0
Einschalt_min = 1
Ausschalt_std = 0
Ausschalt_min = 2
Dim Str_ein_std As String * 2
Dim Str_ein_min As String * 2
Dim Str_aus_std As String * 2
Dim Str_aus_min As String * 2
Cls
'##############################################################################
'##############################################################################
Do
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Debounce Taster_uhr_stellen , 0 , Uhr_stellen , Sub
Debounce Taster_man_anzeige , 0 , Man_anzeige , Sub
Debounce Taster_auto_anzeige , 0 , Auto_anzeige , Sub
'Umwandlung der Byte-Variablen in eine Stringvariable mit zweistelliger Formatierung
Str_ein_std = Str(einschalt_std)
Str_ein_std = Format(str_ein_std , "00")
Str_ein_min = Str(einschalt_min)
Str_ein_min = Format(str_ein_min , "00")
Str_aus_std = Str(ausschalt_std)
Str_aus_std = Format(str_aus_std , "00")
Str_aus_min = Str(ausschalt_min)
Str_aus_min = Format(str_aus_min , "00")
'Vergleich des Einschaltzeitpunkts der Beleuchtung
If _hour >= Einschalt_std And _min >= Einschalt_min Then
Gosub Einschalten
Else
End If
'Vergleich des Ausschaltzeitpunkts der Beleuchtung
If _hour >= Ausschalt_std And _min >= Ausschalt_min Then
Gosub Ausschalten
Else
End If
Loop
'###############################################################################
'###############################################################################
'Automatik
'###############################################################################
Auto_anzeige:
'LED Kontrolle Beleuchtung ein / aus
Portb.5 = 0
Portb.4 = 1
Do
If Flag_auto > 3 Then
Incr X
Flag_auto = 0
End If
Locate 2 , 14
Lcd Flag_auto
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Select Case X
Case 0
'Anzeige der Uhrzeit, wenn Var. Sec_flag=0 wird
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
'Anzeige der Ein - Ausschaltzeiten der Beleuchtung
Locate 3 , 1
Lcd " Ein: " ; Str_ein_std ; ":" ; Str_ein_min ; " "
Locate 4 , 1
Lcd " Aus: " ; Str_aus_std ; ":" ; Str_aus_min ; " "
Locate 3 , 1
Lcd " Ein: " ; Str_ein_std ; ":" ; Str_ein_min ; " "
Locate 4 , 1
Lcd " Aus: " ; Str_aus_std ; ":" ; Str_aus_min ; " "
Case 1
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Locate 4 , 1
Lcd " "
Locate 3 , 1
Lcd " Gut so "
Case 2
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Locate 3 , 1
Lcd " aha "
Case 3
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Str_temp = Str(flag_x)
Str_temp = Format(str_temp , "000")
Locate 3 , 1
Lcd " " ; Str_temp
Case 4
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Str_temp = Str(flag_y)
Str_temp = Format(str_temp , "000")
Locate 3 , 1
Lcd " " ; Str_temp
Case 5
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Str_temp = Str(flag_z)
Str_temp = Format(str_temp , "00000")
Locate 3 , 1
Lcd " " ; Str_temp
End Select
Locate 2 , 1
Lcd X ; " "
If X > 5 Then
X = 0
End If
If _hour >= Einschalt_std And _min >= Einschalt_min Then
Gosub Einschalten
Else
End If
If _hour >= Ausschalt_std And _min >= Ausschalt_min Then
Gosub Ausschalten
Else
End If
Loop Until Pind.7 = 0
Return
'##################################################
'Manuell
'##################################################
Man_anzeige:
Cls
Locate 2 , 1
Lcd Y ; " "
'LED Kontrolle Beleuchtung ein / aus
Portb.5 = 1
Portb.4 = 0
Select Case Y
Case 0
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
'Anzeige der Uhrzeit, wenn Var. Sec_flag=0 wird
Locate 3 , 1
Lcd " Ein: " ; Str_ein_std ; ":" ; Str_ein_min ; " "
Locate 4 , 1
Lcd " Aus: " ; Str_aus_std ; ":" ; Str_aus_min ; " "
Locate 3 , 1
Lcd " Ein: " ; Str_ein_std ; ":" ; Str_ein_min ; " "
Locate 4 , 1
Lcd " Aus: " ; Str_aus_std ; ":" ; Str_aus_min ; " "
Case 1
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Locate 4 , 1
Lcd " "
Locate 3 , 1
Lcd " Weiter so "
Case 2
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Locate 4 , 1
Lcd " "
Locate 3 , 1
Lcd " aha "
Case 3
Do
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Str_temp = Str(flag_y)
Str_temp = Format(str_temp , "000")
Locate 3 , 1
Lcd " " ; Str_temp ; " "
Loop Until Pind.7 = 0
Case 4
Do
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Str_temp = Str(flag_x)
Str_temp = Format(str_temp , "000")
Locate 3 , 1
Lcd " " ; Str_temp ; " "
Loop Until Pind.7 = 0
Case 5
Do
If Sec_flag = 0 Then
Locate 1 , 5
Lcd Time$
Sec_flag = 1
Else
End If
Str_temp = Str(flag_z)
Str_temp = Format(str_temp , "00000")
Locate 3 , 1
Lcd " " ; Str_temp ; " "
Loop Until Pind.7 = 0
End Select
If Y < 5 Then
Incr Y
Else
Y = 0
End If
Return
'***************************************************************************
Uhr_stellen:
'**************************************************************
'Uhrzeit einstellen
'**************************************************************
Cls
Locate 1 , 1
Lcd "Uhrzeit stellen:"
Wait 1
Cls
'**************************************************************
'Stunden
'**************************************************************
Do
Locate 2 , 2
Lcd "Stunden: " ; _hour ; " "
If Taster_uhr_hoch = 0 Then
If _hour < 23 Then
Incr _hour
Else
_hour = 0
End If
Waitms 300
End If
If Taster_uhr_runter = 0 Then
If _hour < 23 Then
Decr _hour
If _hour < 1 Or _hour > 23 Then
_hour = 0
End If
End If
Waitms 300
End If
Loop Until Taster_uhr_stellen = 0
Waitms 80
Bitwait Taster_uhr_stellen , Set
'********************************************************
'Minuten
'********************************************************
Do
Locate 3 , 2
Lcd "Minuten: " ; _min ; " "
If Taster_uhr_hoch = 0 Then
If _min < 59 Then
Incr _min
Else
_min = 0
End If
Waitms 300
End If
If Taster_uhr_runter = 0 Then
If _min < 59 Then
Decr _min
If _min < 1 Or _min > 59 Then
_min = 0
End If
End If
Waitms 300
End If
Loop Until Taster_uhr_stellen = 0
Waitms 80
Bitwait Taster_uhr_stellen , Set
'*********************************************************
'Sekunden
'*********************************************************
Do
Locate 4 , 1
Lcd "Sekunden: " ; _sec ; " "
If Taster_uhr_hoch = 0 Then
If _sec < 59 Then
Incr _sec
Else
_sec = 0
End If
Waitms 300
End If
If Taster_uhr_runter = 0 Then
If _sec < 59 Then
Decr _sec
If _sec < 1 Or _sec > 59 Then
_sec = 0
End If
End If
Waitms 300
End If
Loop Until Taster_uhr_stellen = 0
Waitms 80
Bitwait Taster_uhr_stellen , Set
Cls
'####################################################################
'Schaltzeiten
'####################################################################
'********************************************************
'Einschaltzeit
'********************************************************
Locate 1 , 1
Lcd "Einschaltzeit: "
Wait 1
Do
Locate 3 , 2
Lcd "Stunden: " ; Einschalt_std ; " "
If Taster_uhr_hoch = 0 Then
If Einschalt_std < 23 Then
Incr Einschalt_std
Else
Einschalt_std = 0
End If
Waitms 300
End If
If Taster_uhr_runter = 0 Then
If Einschalt_std < 23 Then
Decr Einschalt_std
If Einschalt_std < 1 And Einschalt_std > 23 Then
Einschalt_std = 0
End If
End If
Waitms 300
End If
Loop Until Taster_uhr_stellen = 0
Waitms 80
Bitwait Taster_uhr_stellen , Set
'********************************************************
'Minuten
'********************************************************
Do
Locate 4 , 2
Lcd "Minuten: " ; Einschalt_min ; " "
If Taster_uhr_hoch = 0 Then
If Einschalt_min < 59 Then
Incr Einschalt_min
Else
Einschalt_min = 0
End If
Waitms 300
End If
If Taster_uhr_runter = 0 Then
If Einschalt_min < 59 Then
Decr Einschalt_min
If Einschalt_min < 1 Or Einschalt_min > 59 Then
Einschalt_min = 0
End If
End If
Waitms 300
End If
Loop Until Taster_uhr_stellen = 0
Waitms 80
Bitwait Taster_uhr_stellen , Set
Cls
'################################################################
'Ausschaltzeit
'################################################################
'****************************************************
'Stunden
'****************************************************
Locate 1 , 1
Lcd "Ausschaltzeit: "
Wait 1
Do
Locate 3 , 2
Lcd "Stunden: " ; Ausschalt_std ; " "
If Taster_uhr_hoch = 0 Then
If Ausschalt_std < 23 Then
Incr Ausschalt_std
Else
Ausschalt_std = 0
End If
Waitms 300
End If
If Taster_uhr_runter = 0 Then
If Ausschalt_std < 23 Then
Decr Ausschalt_std
If Ausschalt_std < 1 Or Ausschalt_std > 23 Then
Ausschalt_std = 0
End If
End If
Waitms 300
End If
Loop Until Taster_uhr_stellen = 0
Waitms 80
Bitwait Taster_uhr_stellen , Set
'**********************************************************
'Minuten
'**********************************************************
Do
Locate 4 , 2
Lcd "Minuten: " ; Ausschalt_min ; " "
If Taster_uhr_hoch = 0 Then
If Ausschalt_min < 59 Then
Incr Ausschalt_min
Else
Ausschalt_min = 0
End If
Waitms 300
End If
If Taster_uhr_runter = 0 Then
If Ausschalt_min < 59 Then
Decr Ausschalt_min
If Ausschalt_min < 1 And Ausschalt_min > 59 Then
Ausschalt_min = 0
End If
End If
Waitms 300
End If
Loop Until Taster_uhr_stellen = 0
Waitms 80
Bitwait Taster_uhr_stellen , Set
Cls
Return
'##############################################################
Sectic:
Toggle Portd.3
Incr Flag_x
Decr Flag_y
Decr Flag_z
Sec_flag = 0
Incr Flag_auto
Return
'###############################################################
Einschalten:
Portb.3 = 1
Return
'###############################################################
Ausschalten:
Portb.3 = 0
Return