'##### ein servo soll nach zeit ein bestimmten winkel ansteuern
$regfile = "M8def.dat"
$crystal = 8000000
$framesize = 128
$hwstack = 128
$swstack = 128
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Initlcd
Waitms 50
Cursor Off Noblink
Cls
Config Adc = Single , Prescaler = Auto , Reference = Avcc '##### interen 5V
Cursor Off
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Debounce = 200
Config Portd = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portc.5 = Output
Config Portd.0 = Input
Config Portd.1 = Input
Config Portc.4 = Input
Config Portb.0 = Output
Portd.0 = 1 '##### Taster1, Zeit/Datum stellen, PullUp ein, schaltet gegen Minus
Portd.1 = 1 '##### Taster2, Zahl hochzählen, PullUp ein, schaltet gegen Minus
Portc.4 = 1 '##### Eingang für '' schaltet gegen Minus
Portc.0 = 0 '##### AD Eingang
Portc.3 = 0 '##### AD Eingang
Portb.1 = 1 '##### Ausgang für
Portb.2 = 1 '##### Ausgang für
Portc.5 = 0 '##### Ausgang für
Portb.0 = 0
Tast1 Alias Pind.0 '##### Taster1
Tast2 Alias Pind.1 '##### Taster2
Const Grad = 0.25 ' ##### 12 Stunden = 720 Minuten = 180° = 0 , 25° Pro Minute.
Dim Uhrzeit As Word
Dim Minuten As Single
Dim Stunden As Single
Dim Winkel As Byte
Dim Uhrzeit_in_minuten As Word
Dim Differenzzeit As Word
Servo(1) = Winkel
'Const An = 150
'Const Aus = 40
Config Timer1 = Timer , Prescale = 256
Const Timerwert = 34286
On Timer1 ' ##### Timer1_sprung
Enable Timer1
Enable Interrupts
Timer1 = Timerwert
Config Clock = Soft
Time$ = "07:59:00"
Start Adc
Do '##### Anfang der Hauptschleife
Locate 1 , 1
Lcd Time$
Debounce Pind.0 , 0 , Zeit , Sub '##### Sprung in Subroutine -Zeit/Analog-
Servo(1) = Winkel
' _hour = Stunden
'_min = Minuten
If _hour > 6 And _hour < 18 Then
'Beginnst 6 Uhr bis 18 : 00 Uhr Osten Ist 0 Grad , Westen Ist 180°
'Bedeutet 12 Stunden = 720 Minuten = 180° = 0 , 25° Pro Minute.
Uhrzeit_in_minuten = Stunden * 60 '##### Uhrzeit Umrechnen Auf Minuten
Uhrzeit_in_minuten = Uhrzeit_in_minuten + Minuten
Uhrzeit = Uhrzeit - 360
Uhrzeit = Uhrzeit * Grad
Differenzzeit = Uhrzeit - 360 '##### Differenzzeit sind 6 h Uhrzeit Abziehen : 6 * 60 = 360 Minuten
Winkel = Differenzzeit * Grad
'##### "Grad" 12 Stunden = 720 Minuten = 180° = 0 , 25° Pro Minute.
End If
'Servo(1) = Winkel
'Waitms 10
Loop
End
'Stunde#########################################################################
Zeit:
Cls '##### Einsprungpunkt der Subroutine -Time/Analog-
Waitms 200
Cls '##### lösche Zeilen
Do
Locate 1 , 1
Lcd "Set Hour:" '##### Stunden setzen
Locate 2 , 1
Lcd _hour
If Tast2 = 0 Then '##### Mit Taster 2
Incr _hour '##### hochzählen
Locate 2 , 1
Lcd _hour
Waitms 100
End If
If _hour > 23 Then
Cls
_hour = 00
End If '##### solange, bis Taster 1 gedrückt
Loop Until Tast1 = 0
Waitms 200
'Minute#########################################################################
Cls
Do
Locate 1 , 1
Lcd "Set Minute:"
Locate 2 , 1
Lcd _min
If Tast2 = 0 Then
Incr _min
Locate 2 , 1
Lcd _min
Waitms 100
End If
If _min > 59 Then
Cls
_min = 00
End If
Loop Until Tast1 = 0
Waitms 200
Cls
Return