Accenter
10.10.2007, 22:55
Mein erstes Programm mit dem DS1307 läuft soweit ganz gut. Die Anzeige bei einstelligen Uhrzeiten sieht aber nicht wirklich nach Uhr aus.
z.B. Uhrzeit "13:03:09" wird mir so dargestellt "13:3:9"
Wie kann ich die 0 vor einstelligen Zahlen erzwingen?
Dieses Uhrenprogramm möchte ich dann später (sobald alles einwandfrei läuft) in meine Haussteuerung integrieren. Es sollten dann z.B. alle verpassten Türklingelversuche protokolliert werden... oder halt zumindest die letzten 10. Allerdings weiß ich noch nicht so ganz wie ich das bewerkstelligen soll. Bin für jeden Tip dankbar.
Hier mein Code:
$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 400000
Config Lcd = 20 * 4
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcdbus = 4
Waitms 20
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
' Uhrdemo für DS1307 1007
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Cls
Config Sda = Portd.1
Config Scl = Portd.0
Dim _weekday As Byte
Dim _day As Byte
Dim _month As Byte
Dim _year As Byte
Dim _sec As Byte
Dim _min As Byte
Dim _hour As Byte
Dim Monat As String * 3
Dim Ds1307w As Byte
Dim Ds1307r As Byte
Ds1307w = &B11010000
Ds1307r = &B11010001
_day = 10
_month = 10
_year = 07
_sec = 30
_min = 13
_hour = 15
_sec = Makebcd(_sec)
_min = Makebcd(_min)
_hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
_day = Makebcd(_day)
_month = Makebcd(_month)
_year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 3
I2cwbyte _weekday
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Losgehts:
Do
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte _weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
If _month = 1 Then
Monat = "Jan"
End If
If _month = 2 Then
Monat = "Feb"
End If
If _month = 3 Then
Monat = "Mar"
End If
If _month = 4 Then
Monat = "Apr"
End If
If _month = 5 Then
Monat = "Mai"
End If
If _month = 6 Then
Monat = "Jun"
End If
If _month = 7 Then
Monat = "Jul"
End If
If _month = 8 Then
Monat = "Aug"
End If
If _month = 9 Then
Monat = "Sep"
End If
If _month = 10 Then
Monat = "Okt"
End If
If _month = 11 Then
Monat = "Nov"
End If
If _month = 12 Then
Monat = "Dez"
End If
Cls
Locate 1 , 2
Lcd _hour ; ":" ; _min ; ":" ; _sec ; " " ; _day ; "-" ; Monat ; "-" ; _year
Cursor Off
Waitms 500
Loop
z.B. Uhrzeit "13:03:09" wird mir so dargestellt "13:3:9"
Wie kann ich die 0 vor einstelligen Zahlen erzwingen?
Dieses Uhrenprogramm möchte ich dann später (sobald alles einwandfrei läuft) in meine Haussteuerung integrieren. Es sollten dann z.B. alle verpassten Türklingelversuche protokolliert werden... oder halt zumindest die letzten 10. Allerdings weiß ich noch nicht so ganz wie ich das bewerkstelligen soll. Bin für jeden Tip dankbar.
Hier mein Code:
$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 400000
Config Lcd = 20 * 4
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcdbus = 4
Waitms 20
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
' Uhrdemo für DS1307 1007
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Cls
Config Sda = Portd.1
Config Scl = Portd.0
Dim _weekday As Byte
Dim _day As Byte
Dim _month As Byte
Dim _year As Byte
Dim _sec As Byte
Dim _min As Byte
Dim _hour As Byte
Dim Monat As String * 3
Dim Ds1307w As Byte
Dim Ds1307r As Byte
Ds1307w = &B11010000
Ds1307r = &B11010001
_day = 10
_month = 10
_year = 07
_sec = 30
_min = 13
_hour = 15
_sec = Makebcd(_sec)
_min = Makebcd(_min)
_hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
_day = Makebcd(_day)
_month = Makebcd(_month)
_year = Makebcd(_year)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 3
I2cwbyte _weekday
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Losgehts:
Do
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte _weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
If _month = 1 Then
Monat = "Jan"
End If
If _month = 2 Then
Monat = "Feb"
End If
If _month = 3 Then
Monat = "Mar"
End If
If _month = 4 Then
Monat = "Apr"
End If
If _month = 5 Then
Monat = "Mai"
End If
If _month = 6 Then
Monat = "Jun"
End If
If _month = 7 Then
Monat = "Jul"
End If
If _month = 8 Then
Monat = "Aug"
End If
If _month = 9 Then
Monat = "Sep"
End If
If _month = 10 Then
Monat = "Okt"
End If
If _month = 11 Then
Monat = "Nov"
End If
If _month = 12 Then
Monat = "Dez"
End If
Cls
Locate 1 , 2
Lcd _hour ; ":" ; _min ; ":" ; _sec ; " " ; _day ; "-" ; Monat ; "-" ; _year
Cursor Off
Waitms 500
Loop