Próbuję napisać program zegara ale mam problem z ustawianiem czasu, pominąwszy to, że menu działa jak działa to nie mogę ustawić minut i godzin większych niż 10 bo wyskakuje mi liczba 161, jeżeli wgrywam sam kod menu bez obsługi układu pcf wszystko jest ok. Proszę o pomoc.
$regfile = "m32def.dat"
$crystal = 16000000
Enable Interrupts
Enable Int0
On Int0 Menu
Dim Sekunda As Byte , Minuta As Byte , Godzina As Byte
Dim Pozycja_menu As Byte
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Cursor Off
Config Sda = Portc.1
Config Scl = Portc.0
Config Int0 = Low Level
Config Rc5 = Pind.2
Config Pina.0 = Input : Set Porta.0 ' ustawienie portu do przycisków
Config Pina.1 = Input : Set Porta.1
Przyc1 Alias Pina.0 ' ustawienie aliasów przycisków
Przyc2 Alias Pina.1
Cls
Do
I2cinit
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cstart
I2cwbyte 163
I2crbyte Sekunda , Ack
I2crbyte Minuta , Ack
I2crbyte Godzina , Nack
I2cstop
Locate 1 , 1
Lcd Bcd(godzina) ; ":" ; Bcd(minuta) ; ":" ; Bcd(sekunda)
Loop
Menu:
'Disable Int0
'Enable Interrupts
Do
Godzina = Makebcd(godzina)
Minuta = Makebcd(minuta)
Sekunda = Makebcd(sekunda)
If Przyc1 = 0 Then
Waitms 25
If Przyc1 = 0 Then
Cls
Incr Pozycja_menu
Waitms 200
If Pozycja_menu = 5 Then
Pozycja_menu = 0
End If
End If
End If 'jeśli nacisniesz przycisk to zwiększ wartość zmiennej pozycja_menu
Select Case Pozycja_menu
Case 1:
If Przyc2 = 0 Then
Waitms 25
If Przyc2 = 0 Then
Incr Godzina
If Godzina = 24 Then
Cls
Godzina = 0
End If
Waitms 300
End If
End If
Locate 1 , 1
Lcd "Ustaw godziny"
Locate 2 , 1
Lcd Godzina
Case 2:
If Przyc2 = 0 Then
Waitms 25
If Przyc2 = 0 Then
Incr Minuta
If Minuta = 60 Then
Cls
Minuta = 0
End If
Waitms 150
End If
End If
Locate 1 , 1
Lcd "Ustaw minuty" 'pierwsza linia ustaw godzine
Locate 2 , 1
Lcd Minuta
Case 3:
Godzina = Makebcd(godzina)
Minuta = Makebcd(minuta)
Sekunda = Makebcd(sekunda)
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cwbyte Sekunda
I2cwbyte Minuta
I2cwbyte Godzina
I2cstop
Cls
Lcd " Zapisano "
Wait 1
Cls
End Select
Loop Until Pozycja_menu = 4
Return
Kod: text
$crystal = 16000000
Enable Interrupts
Enable Int0
On Int0 Menu
Dim Sekunda As Byte , Minuta As Byte , Godzina As Byte
Dim Pozycja_menu As Byte
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Cursor Off
Config Sda = Portc.1
Config Scl = Portc.0
Config Int0 = Low Level
Config Rc5 = Pind.2
Config Pina.0 = Input : Set Porta.0 ' ustawienie portu do przycisków
Config Pina.1 = Input : Set Porta.1
Przyc1 Alias Pina.0 ' ustawienie aliasów przycisków
Przyc2 Alias Pina.1
Cls
Do
I2cinit
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cstart
I2cwbyte 163
I2crbyte Sekunda , Ack
I2crbyte Minuta , Ack
I2crbyte Godzina , Nack
I2cstop
Locate 1 , 1
Lcd Bcd(godzina) ; ":" ; Bcd(minuta) ; ":" ; Bcd(sekunda)
Loop
Menu:
'Disable Int0
'Enable Interrupts
Do
Godzina = Makebcd(godzina)
Minuta = Makebcd(minuta)
Sekunda = Makebcd(sekunda)
If Przyc1 = 0 Then
Waitms 25
If Przyc1 = 0 Then
Cls
Incr Pozycja_menu
Waitms 200
If Pozycja_menu = 5 Then
Pozycja_menu = 0
End If
End If
End If 'jeśli nacisniesz przycisk to zwiększ wartość zmiennej pozycja_menu
Select Case Pozycja_menu
Case 1:
If Przyc2 = 0 Then
Waitms 25
If Przyc2 = 0 Then
Incr Godzina
If Godzina = 24 Then
Cls
Godzina = 0
End If
Waitms 300
End If
End If
Locate 1 , 1
Lcd "Ustaw godziny"
Locate 2 , 1
Lcd Godzina
Case 2:
If Przyc2 = 0 Then
Waitms 25
If Przyc2 = 0 Then
Incr Minuta
If Minuta = 60 Then
Cls
Minuta = 0
End If
Waitms 150
End If
End If
Locate 1 , 1
Lcd "Ustaw minuty" 'pierwsza linia ustaw godzine
Locate 2 , 1
Lcd Minuta
Case 3:
Godzina = Makebcd(godzina)
Minuta = Makebcd(minuta)
Sekunda = Makebcd(sekunda)
I2cstart
I2cwbyte 162
I2cwbyte 2
I2cwbyte Sekunda
I2cwbyte Minuta
I2cwbyte Godzina
I2cstop
Cls
Lcd " Zapisano "
Wait 1
Cls
End Select
Loop Until Pozycja_menu = 4
Return
Kod: text
Kod: text