$regfile = "m16def.dat" $crystal = 14745600 $baud = 9600 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0 Config Lcd = 16 * 4 Config Timer1 = Timer , Prescale = 256 Enable Timer1 On Timer1 Isr_von_timer1 Enable Interrupts Timer1 = 51135 Config Porta.0 = Output Config Pina.3 = Output Config Pina.6 = Input Config Pinc.7 = Input Config Pind.4 = Input Config Pind.7 = Input Config Pinc.4 = Input Config Pind.4 = Input Config Pinc.3 = Input Config Pinc.2 = Input Config Pinc.1 = Input Config Pinc.0 = Input Config Pinb.6 = Input Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portb.3 = Output Config Portb.4 = Output Config Portb.5 = Output Dim S As Byte , M As Byte , H As Byte Dim U As Byte , I As Byte , Ue As Byte , Wl As Byte Dim Temp As Byte , Licht As Byte , Ausw As Byte Dim N1 As Byte , N2 As Byte , N3 As Byte , N4 As Byte , N5 As Byte , N6 As Byte Dim Filter As Byte , Heizstab As Byte Dim Scrollzaehler As Byte , Auswahl As Byte , Auswahl_max As Byte Dim Zehour As Byte , Zemin As Byte , Zesec As Byte Dim Fuzehour1 As Byte , Fuzemin1 As Byte , Fuzesec1 As Byte Dim Fuzehour2 As Byte , Fuzemin2 As Byte , Fuzesec2 As Byte Dim Fuez As Byte , Fuem As Byte , Fuem2 As Byte Dim Bl As Byte , Zaehlerrunter_ok As Byte , Zaehlerrauf_ok As Byte Dim Zhour As Byte , Zmin As Byte , Zsec As Byte Dim Abbrechen As Byte , Rauf As Byte , Zaehler_raufrunter As Byte , Runter As Byte Dim Wortlauf(28) As String * 1 , Wlzaehler As Byte Dim Wortlaufvar As Byte , Wl1 As Byte , Wl2 As Byte , Wortlaufzahl As Byte Porta.0 = 1 Porta.3 = 0 Wl1 = 0 Zaehlerrauf_ok = 0 Zaehlerrunter_ok = 0 Fuzehour1 = 0 Fuzehour2 = 0 Fuzemin1 = 0 Fuzemin2 = 0 Fuzesec1 = 0 Fuzesec2 = 0 Fuem = 2 S = 0 H = 0 M = 0 U = 0 I = 0 Ue = 0 Temp = 0 Licht = 0 Auswahl = 0 Filter = 0 Heizstab = 0 Scrollzaehler = 0 Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 Deflcdchar 1 , 32 , 4 , 14 , 31 , 31 , 14 , 4 , 32 Deflcdchar 2 , 4 , 14 , 31 , 32 , 32 , 32 , 32 , 32 Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 31 , 14 , 4 Cls Cursor Off Noblink Hauptmenue: Auswahl = 0 Scrollzaehler = 0 Auswahl_max = 5 Wortlaufzahl = 24 Wortlauf(1) = "F" Wortlauf(2) = "u" Wortlauf(3) = "e" Wortlauf(4) = "t" Wortlauf(5) = "t" Wortlauf(6) = "e" Wortlauf(7) = "r" Wortlauf(8) = "u" Wortlauf(9) = "n" Wortlauf(10) = "g" Wortlauf(11) = " " Wortlauf(12) = "u" Wortlauf(13) = "m" Wortlauf(14) = " " Wortlauf(15) = "2" Wortlauf(16) = "0" Wortlauf(17) = ":" Wortlauf(18) = "1" Wortlauf(19) = "5" Wortlauf(20) = ":" Wortlauf(21) = "0" Wortlauf(22) = "0" Wortlauf(23) = " " Cls Do Gosub Scrollen Gosub Scrollpfeile Locate 1 , 9 Gosub Uhrzeit If N1 > 0 Then Locate N1 , 2 Lcd "Temp.: " ; Temp ; Chr(0) ; "C" End If If N2 > 0 Then Locate N2 , 2 Gosub Wortlauf End If If N3 > 0 Then Locate N3 , 2 Lcd "Licht: " ; Licht ; "%" End If If N4 > 0 Then Locate N4 , 2 Lcd "Filter: " ; Filter ; "%" If N1 > 0 Thenend If If N5 > 0 Then Locate N5 , 2 Lcd "Heizstab: " ; Heizstab ; "%" End If If N6 > 0 Then Locate N6 , 2 Lcd "Einstellungen" End If If Pinc.1 = 1 Then Gosub Bestaetigen Select Case Auswahl Case 0 : Gosub Temp Case 1 : Gosub Fuetterung Case 2 : Gosub Licht Case 3 : Gosub Filter Case 4 : Gosub Heizung Case 5 : Gosub Einstellungen End Select End If Loop End Temp: Return Fuetterung: Auswahl = 0 Scrollzaehler = 0 Wl = 0 Auswahl_max = 2 Cls Do Gosub Scrollen Locate 1 , 4 Lcd "Fuetterung" If N1 > 0 Then Locate N1 , 2 Lcd "Zeiten" End If If N2 > 0 Then Locate N2 , 2 Lcd "Menge" End If If N3 > 0 Then Locate N3 , 2 Lcd "Jetzt Fuettern" End If If Pinc.1 = 1 Then Gosub Bestaetigen Select Case Auswahl Case 0 : Gosub Fuetterungszeiten Case 1 : Gosub Fuetterungsmenge Case 2 : Gosub Fuettern End Select End If If Pinc.0 = 1 Then Gosub Abbrechen Auswahl = 0 Scrollzaehler = 0 Gosub Hauptmenue End If Loop Fuetterungszeiten: Auswahl = 0 Scrollzaehler = 0 Wl = 0 Auswahl_max = 1 Cls Do Gosub Scrollen Locate 1 , 1 Lcd "Fuetterungszeit" Locate 2 , 2 Lcd "1: " Zhour = Fuzehour1 Zmin = Fuzemin1 Zsec = Fuzesec1 Gosub Zeit Locate 3 , 2 Lcd "2: " Zhour = Fuzehour2 Zmin = Fuzemin2 Zsec = Fuzesec2 Gosub Zeit If Pinc.1 = 1 Then Gosub Bestaetigen Select Case Auswahl Case 0 : Gosub Fuetterungszeit1 Case 1 : Gosub Fuetterungszeit2 End Select End If If Pinc.0 = 1 Then Gosub Abbrechen Gosub Fuetterung End If Loop Fuetterungszeit1: Ue = 0 Zehour = Fuzehour1 Zemin = Fuzemin1 Zesec = Fuzesec1 Cls Do Locate 1 , 6 Lcd "Zeit 1" Gosub Zeiteinstellung If Pinc.1 = 1 Then Gosub Bestaetigen Cls Fuzehour1 = Zehour Fuzemin1 = Zemin Fuzesec1 = Zesec Gosub Fuetterungszeiten End If If Ue = 3 Then Cls Fuzehour1 = Zehour Fuzemin1 = Zemin Fuzesec1 = Zesec Gosub Fuetterungszeiten End If If Pinc.0 = 1 Then Gosub Abbrechen Cls Gosub Fuetterungszeiten End If Loop Return Fuetterungszeit2: Ue = 0 Zehour = Fuzehour2 Zemin = Fuzemin2 Zesec = Fuzesec2 Cls Do Locate 1 , 6 Lcd "Zeit 2" Gosub Zeiteinstellung If Pinc.1 = 1 Then Gosub Bestaetigen Cls Fuzehour2 = Zehour Fuzemin2 = Zemin Fuzesec2 = Zesec Gosub Fuetterungszeiten End If If Ue = 3 Then Cls Fuzehour2 = Zehour Fuzemin2 = Zemin Fuzesec2 = Zesec Gosub Fuetterungszeiten End If If Pinc.0 = 1 Then Gosub Abbrechen Cls Gosub Fuetterungszeiten End If Loop Return Fuetterungsmenge: Fuem2 = Fuem Cls Do Locate 1 , 1 Lcd "Fuetterungsmenge" Locate 3 , 4 Lcd "Menge: " If Fuem2 < 10 Then Lcd " " ; Fuem2 Else Lcd Fuem2 End If If Pinc.4 = 1 Then Gosub Runterzaehlen If Fuem2 > 1 Then Fuem2 = Fuem2 - 1 End If Else Zaehlerrunter_ok = 0 End If If Pinc.3 = 1 Then Gosub Raufzaehlen If Fuem2 < 10 Then Fuem2 = Fuem2 + 1 End If Else Zaehlerrauf_ok = 0 End If If Pinc.1 = 1 Then Gosub Bestaetigen Fuem = Fuem2 Gosub Fuetterung End If If Pinc.0 = 1 Then Gosub Abbrechen Gosub Fuetterung End If Loop Fuetterungueber: If Fuzehour1 = H And Fuzemin1 = M And Fuzesec1 = S And H > 0 And M > 0 And S > 0 Then Gosub Fuettern End If If Fuzehour2 = H And Fuzemin2 = M And Fuzesec2 = S And H > 0 And M > 0 And S > 0 Then Gosub Fuettern End If Return Fuettern: Fuez = 0 Porta.0 = 0 While Fuem > Fuez Porta.3 = 1 If Pinc.7 = 1 Then While Pinc.7 = 1 Wend Fuez = Fuez + 1 End If Wend If Fuem >= Fuez Then Porta.3 = 0 Porta.0 = 1 End If Return Licht: Return Filter: Return Heizung: Return Einstellungen: Auswahl = 0 Scrollzaehler = 0 Wl = 0 Auswahl_max = 3 Wortlaufzahl = 19 Wortlauf(1) = "B" Wortlauf(2) = "i" Wortlauf(3) = "l" Wortlauf(4) = "d" Wortlauf(5) = "s" Wortlauf(6) = "c" Wortlauf(7) = "h" Wortlauf(8) = "i" Wortlauf(9) = "r" Wortlauf(10) = "m" Wortlauf(11) = "s" Wortlauf(12) = "c" Wortlauf(13) = "h" Wortlauf(14) = "o" Wortlauf(15) = "n" Wortlauf(16) = "e" Wortlauf(17) = "r" Wortlauf(18) = " " Wortlauf(19) = " " Wortlauf(20) = " " Wortlauf(21) = " " Wortlauf(22) = " " Cls Do Gosub Scrollen Gosub Scrollpfeile Locate 1 , 2 Lcd "Einstellungen" If N1 > 0 Then Locate N1 , 2 Lcd "Uhrzeit" End If If N2 > 0 Then Locate N2 , 2 Gosub Wortlauf End If If N3 > 0 Then Locate N3 , 2 Lcd "Display" End If If N4 > 0 Then Locate N4 , 2 Lcd "Standby" End If If Pinc.1 = 1 Then Gosub Bestaetigen Select Case Auswahl Case 0 : Gosub Uhrzeiteinstellung Case 1 : Gosub Bildschirmschonereinstellung Case 2 : Gosub Displayeinstellung Case 3 : Gosub Standbyeinstellung End Select End If If Pinc.0 = 1 Then Gosub Abbrechen Cls Auswahl = 0 Scrollzaehler = 0 Gosub Hauptmenue End If Loop Uhrzeiteinstellung: Ue = 0 Zehour = H Zemin = M Zesec = S Cls Do Locate 1 , 5 Lcd "Uhrzeit" Gosub Zeiteinstellung If Pinc.1 = 1 Then Gosub Bestaetigen Cls H = Zehour M = Zemin S = Zesec Gosub Einstellungen End If If Ue = 3 Then Cls H = Zehour M = Zemin S = Zesec Gosub Einstellungen End If If Pinc.0 = 1 Then Gosub Abbrechen Cls Gosub Einstellungen End If Loop Bildschirmschonereinstellung: Return Displayeinstellung: Return Standbyeinstellung: Return Zeiteinstellung: If Pinc.2 = 1 Then While Pinc.2 = 1 Wend If Ue < 3 Then Ue = Ue + 1 End If End If If Pinb.6 = 1 Then While Pinb.6 = 1 Wend If Ue > 0 Then Ue = Ue - 1 End If End If Locate 3 , 5 If Bl = 0 Then If Zehour < 10 Then Lcd "0" ; Zehour Else Lcd Zehour End If Lcd ":" If Zemin < 10 Then Lcd "0" ; Zemin Else Lcd Zemin End If Lcd ":" If Zesec < 10 Then Lcd "0" ; Zesec Else Lcd Zesec End If Lcd " " End If If Bl = 1 And Ue = 0 Then Lcd " " Lcd ":" If Zemin < 10 Then Lcd "0" ; Zemin Else Lcd Zemin End If Lcd ":" If Zesec < 10 Then Lcd "0" ; Zesec Else Lcd Zesec End If End If If Bl = 1 And Ue = 1 Then If Zehour < 10 Then Lcd "0" ; Zehour Else Lcd Zehour End If Lcd ":" Lcd " " Lcd ":" If Zesec < 10 Then Lcd "0" ; Zesec Else Lcd Zesec End If Lcd " " End If If Bl = 1 And Ue = 2 Then If Zehour < 10 Then Lcd "0" ; Zehour Else Lcd Zehour End If Lcd ":" If Zemin < 10 Then Lcd "0" ; Zemin Else Lcd Zemin End If Lcd ":" Lcd " " End If If Ue = 0 Then If Pinc.4 = 1 Then Gosub Runterzaehlen Bl = 0 If Zehour = 0 Then Zehour = 24 End If Zehour = Zehour - 1 Else Zaehlerrunter_ok = 0 End If If Pinc.3 = 1 Then Gosub Raufzaehlen Bl = 0 If Zehour = 23 Then Zehour = 255 End If Zehour = Zehour + 1 Else Zaehlerrauf_ok = 0 End If End If If Ue = 1 Then If Pinc.4 = 1 Then Gosub Runterzaehlen If Zemin = 0 Then Zemin = 60 End If Zemin = Zemin - 1 Else Zaehlerrunter_ok = 0 End If If Pinc.3 = 1 Then Gosub Raufzaehlen If Zemin = 59 Then Zemin = 255 End If Zemin = Zemin + 1 Else Zaehlerrauf_ok = 0 End If End If If Ue = 2 Then If Pinc.4 = 1 Then Gosub Runterzaehlen If Zesec = 0 Then Zesec = 60 End If Zesec = Zesec - 1 Else Zaehlerrunter_ok = 0 End If If Pinc.3 = 1 Then Gosub Raufzaehlen If Zesec = 59 Then Zesec = 255 End If Zesec = Zesec + 1 Else Zaehlerrauf_ok = 0 End If End If Return Runterzaehlen: Runter = 0 If Zaehlerrunter_ok = 0 Then While Runter < 100 Waitms 10 If Pinc.4 = 0 Then Return End If Runter = Runter + 1 Wend End If While Pinc.4 = 1 Zaehlerrunter_ok = 1 While Zaehler_raufrunter < 50 Waitms 10 Zaehler_raufrunter = Zaehler_raufrunter + 1 Wend Zaehler_raufrunter = 0 Return Wend Return Raufzaehlen: Rauf = 0 If Zaehlerrauf_ok = 0 Then While Rauf < 100 Waitms 10 If Pinc.3 = 0 Then Return End If Rauf = Rauf + 1 Wend End If While Pinc.3 = 1 Zaehlerrauf_ok = 1 While Zaehler_raufrunter < 50 Waitms 10 Zaehler_raufrunter = Zaehler_raufrunter + 1 Wend Zaehler_raufrunter = 0 Return Wend Return Bestaetigen: While Pinc.1 = 1 Wend Return Abbrechen: Abbrechen = 0 While Abbrechen < 100 Waitms 10 If Pinc.0 = 0 Then Return End If Abbrechen = Abbrechen + 1 Wend Cls Gosub Hauptmenue Uhrzeit: Zhour = H Zmin = M Zsec = S Gosub Zeit Zhour = 0 Zmin = 0 Zsec = 0 Return Zeit: If Zhour < 10 Then Lcd "0" ; Zhour Else Lcd Zhour End If Lcd ":" If Zmin < 10 Then Lcd "0" ; Zmin Else Lcd Zmin End If Lcd ":" If Zsec < 10 Then Lcd "0" ; Zsec Else Lcd Zsec End If Return Scrollen: If Pinc.4 = 1 Then Gosub Runterzaehlen Cls If Auswahl < Auswahl_max Then Auswahl = Auswahl + 1 End If If Scrollzaehler < 2 Then Scrollzaehler = Scrollzaehler + 1 End If Else Zaehlerrunter_ok = 0 End If If Pinc.3 = 1 Then Gosub Raufzaehlen Cls If Auswahl > 0 Then Auswahl = Auswahl - 1 End If If Scrollzaehler > 0 Then Scrollzaehler = Scrollzaehler - 1 End If Else Zaehlerrauf_ok = 0 End If If Scrollzaehler = 0 Then Locate 2 , 1 Lcd Chr(1) Locate 3 , 1 Lcd " " Locate 4 , 1 Lcd " " End If If Scrollzaehler = 1 Then Locate 2 , 1 Lcd " " Locate 3 , 1 Lcd Chr(1) Locate 4 , 1 Lcd " " End If If Scrollzaehler = 2 Then Locate 2 , 1 Lcd " " Locate 3 , 1 Lcd " " Locate 4 , 1 Lcd Chr(1) End If If Scrollzaehler = 2 Then If Auswahl < 3 Then N1 = 2 N2 = 3 N3 = 4 N4 = 0 N5 = 0 N6 = 0 End If If Auswahl = 3 Then N1 = 0 N2 = 2 N3 = 3 N4 = 4 N5 = 0 N6 = 0 End If If Auswahl = 4 Then N1 = 0 N2 = 0 N3 = 2 N4 = 3 N5 = 4 N6 = 0 End If If Auswahl = 5 Then N1 = 0 N2 = 0 N3 = 0 N4 = 2 N5 = 3 N6 = 4 End If End If If Scrollzaehler = 0 Then If Auswahl < 1 Then N1 = 2 N2 = 3 N3 = 4 N4 = 0 N5 = 0 N6 = 0 End If If Auswahl = 1 Then N1 = 0 N2 = 2 N3 = 3 N4 = 4 N5 = 0 N6 = 0 End If If Auswahl = 2 Then N1 = 0 N2 = 0 N3 = 2 N4 = 3 N5 = 4 N6 = 0 End If If Auswahl > 2 Then N1 = 0 N2 = 0 N3 = 0 N4 = 2 N5 = 3 N6 = 4 End If End If Return Wortlauf: If Wl = 0 Then Wl1 = 1 End If If Wl1 = 1 Then If Wl = 1 Then Wl1 = 0 Wlzaehler = Wlzaehler + 1 If Wlzaehler = Wortlaufzahl Then Wlzaehler = 0 End If Wortlaufvar = Wlzaehler Wl2 = 0 While Wl2 < 14 Lcd Wortlauf(wortlaufvar) Wortlaufvar = Wortlaufvar + 1 Wl2 = Wl2 + 1 Wend End If End If Return Scrollpfeile: If Auswahl > 0 Then Locate 2 , 16 Lcd Chr(2) End If If Auswahl < Auswahl_max Then Locate 4 , 16 Lcd Chr(3) End If Return Isr_von_timer1: Timer1 = 51135 Wl = Wl + 1 If Wl > 1 Then Wl = 0 Bl = Bl + 1 If Bl > 1 Then Bl = 0 End If U = U + 1 Gosub Fuetterungueber If U > 1 Then U = 0 If I = 0 Then S = S + 1 End If End If End If If S = 60 Then M = M + 1 S = 0 End If If M = 60 Then H = H + 1 M = 0 End If If H = 24 Then H = 0 M = 0 S = 0 End If Return