Code:
$regfile "m8def.dat"
$crystal = 3686400
$baud = 19200
$framesize = 60
$swstack = 20
$hwstack = 64
'Config LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4
Cursor Off
'PWM
Config Portb.1 = Output
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
Enable Timer1
'Eingabe Steuerung
Config Pinc.1 = Input
Taster1 Alias Pinc.1
Config Pinc.2 = Input
Taster2 Alias Pinc.2
Config Pinb.2 = Input
Erschütterung Alias Pinb.2
'Pullup taster 1- 2
Portc.2 = 1
Portc.1 = 1
Portb.2 = 1
'Eingabe Licht
Config Pinc.0 = Input
Licht Alias Pinc.0
'Ausgang
Config Portb.5 = Output
Rot Alias Portb.5
Config Portb.4 = Output
Gelb Alias Portb.4
Config Portb.3 = Output
Grün Alias Portb.3
'Inizalisierung I2C Bus
Config Sda = Portc.4
Config Scl = Portc.5
I2cinit
'variable Bus
Dim Wert1 As Byte
Dim Wert2 As Byte
Dim Wert3 As Byte
Dim Wert4 As Byte
Dim Wert5 As Byte
Dim Wert6 As Byte
Dim Wert7 As Byte
Dim Temp As Byte
Dim Temp1 As Byte
Dim Led As Bit
Dim Wertzeit As Byte
Dim Wertzeitbe As Byte
'Variablen Beleuchtung
Beleuchtung Alias Compare1a
Const Ein = 0
Const Aus = 255
Const 50 = 125
Const 75 = 200
Const 25 = 75
'Inizalisieren Echtzeituhr per I2C Bus
Const Uhrschreiben = &B11010000
Const Uhrlesen = &B11010001
I2cstart
I2cwbyte Uhrschreiben
I2cwbyte &H7 , &B00010011
I2cstop
Waitms 25
'Display Löschen
Cls
'Bus Fehler abfragen und anzeigen ( Echtzeituhr)
Beleuchtung = 25
If Err = 1 Then
Locate 1 , 1
Lcd "Bus fehler"
Locate 2 , 1
Lcd "Echtzeituhr"
Wait 5
Else
Locate 1 , 1
Lcd "kein Fehler"
Locate 2 , 1
Lcd "Echtzeituhr"
Wait 2
End If
Cls
'testen des Temperatursensors
Err = 0
I2cstart
I2cwbyte &H9F
I2cstop
Waitms 25
'Bus Fehler abfragen und anzeigen (Temperatursensor)
If Err = 1 Then
Locate 1 , 1
Lcd "Bus fehler"
Locate 2 , 1
Lcd "Temp.sensor"
Wait 5
Else
Locate 1 , 1
Lcd "kein Fehler"
Locate 2 , 1
Lcd "Temp.sensor"
Wait 2
End If
Cls
'Uhr stellen
Locate 1 , 1
Lcd "Uhreinstellen"
Locate 2 , 1
Lcd "Taste1 drücken"
If Taster1 = 0 Then
Goto Uhreinstellen
End If
Wait 1
'Start Programm
Starte:
'Begrüßung
Beleuchtung = Ein
Cls
Locate 1 , 1
Lcd "Datumsanzeige"
Locate 2 , 1
Lcd "mit Temp.und LED"
Wait 2
Cls
'Haubtprogramm
Beleuchtung = 50
Do
'abfrage Datum
I2cstart
I2cwbyte Uhrschreiben
I2cwbyte &H00
I2cstart
I2cwbyte Uhrlesen
I2crbyte Wert1 , Ack
I2crbyte Wert2 , Ack
I2crbyte Wert3 , Ack
I2crbyte Wert4 , Ack
I2crbyte Wert5 , Ack
I2crbyte Wert6 , Ack
I2crbyte Wert7 , Nack
I2cstop
Waitms 100
'Uhr anzeige Display
Locate 1 , 9
Lcd Hex(wert3) ; ":" ; Hex(wert2) ; ":" ; Hex(wert1)
' Datum Anzeige
Locate 2 , 9
Lcd Hex(wert5) ; "/" ; Hex(wert6) ; "/" ; Hex(wert7)
' temperatur anzeigen
'abfrage temperatur
I2cstart
I2cwbyte &H9F
I2crbyte Temp , Ack
I2crbyte Temp1 , Nack
I2cstop
Waitms 30
Locate 2 , 1
Lcd Temp ; "`C"
Deflcdchar 0 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32
'Abfrage Zeit und Temp
If Temp >= 23 Then
Rot = 1
Else
Rot = 0
End If
If Temp <= 20 Then
Gelb = 1
Else
Gelb = 0
End If
If Wert1 >= 88 Then
Toggle Grün
Else
Grün = 0
End If
Print Wert1 ; " " ; Wertzeitbe ; " " ; Hex(wertzeitbe) ; " = " ; Hex(wert1)
Print Bin(wert1) ; " = " ; Bin(wertzeitbe)
'Abfrage Erschütterungssensor
If Erschütterung = 0 Then
Led = 1
Wertzeitbe = 0
Wertzeitbe = Hex(wert1)
Wertzeitbe = Wertzeitbe + 30
If Wertzeitbe >= 60 Then
Print "ok"
Wertzeitbe = Wertzeitbe - 60
End If
Else
If Hex(wert1) = Hex(wertzeitbe) Then
Led = 0
End If
End If
'abfrage led (erschütterungssensor für hintergrundbeleuchtung
If Led = 1 Then
Beleuchtung = Ein
Else
Beleuchtung = 25
End If
Print "Es ist Uhr " ; Hex(wert3) ; ":" ; Hex(wert2) ; ":" ; Hex(wert1) ; " Temperatur " ; Temp ; "°C"
Loop
Uhreinstellen:
Beleuchtung = Ein
'Variable zum Uhr, Datum einstellen
Dim Hexstu As Byte
Dim Mi As Byte
Dim Stu As Byte
Cls
Stu = 0
Locate 1 , 1
Lcd "Uhr einstellen"
Wait 1
Einstellen:
Waitms 500
Locate 2 , 1
Lcd "Stunde"
Locate 2 , 8
Lcd Stu
If Taster2 = 0 Then
Waitms 250
Stu = Stu + 1
Stu = Hex(stu)
If Stu <= 24 Then
Stu = 0
End If
End If
Waitms 500
Print Hex(stu) ; " " ; Stu
Goto Einstellen
'I2cstart
'I2cwbyte Uhrschreiben
'I2cwbyte &H00 'Adresen anfang
'I2cwbyte &H2 'Secunde
'I2cwbyte &H47 'Minute
'I2cwbyte &H17 'Stunde
'I2cwbyte &H1 'Wochentag Tag (1-7)
'I2cwbyte &H21 'Tag
'I2cwbyte &H2 ' Monat
'I2cwbyte &H10 'Jahr
'I2cstop
'Waitms 24
Cls
Locate 1 , 1
Lcd "Uhr eingestellt"
Wait 5
Lesezeichen