Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $regfile = "m32def.dat" 'deklaracja procesora
- $crystal = 1000000
- 'konfiguracje-------------------------------------------------------------------
- Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.5 , Rs = Porta.4
- Config Lcd = 16 * 2
- Config Scl = Portc.0
- Config Sda = Portc.1
- Config Portd.7 = Output 'dioda
- Config Portd.0 = Input 'przycisk menu
- Set Portd.0
- Config Portd.1 = Input 'przycisk plus
- Set Portd.1
- 'zmienne------------------------------------------------------------------------
- Dim M As Byte 'deklaracja zmiennej określającej minuty
- Dim S As Byte 'deklaracja zmiennej określającej sekundy
- Dim H As Byte 'deklaracja zmiennej określającej godziny
- Dim Dzien As Byte
- Dim Miesiac As Byte
- Dim Rok As Byte 'rok z pcf (od 0 do 3)
- Dim Rok_2 As Byte 'ostatnie dwie cyfry - rok z ramu minus rok z pcf
- Dim Rok_w As Byte 'rok do bezpośredniego wyświetlania
- Dim Dzien_tygodnia As Byte
- Dim Menu_z As Byte
- Menu_z = 0
- 'procedury----------------------------------------------------------------------
- Declare Sub Menu
- Declare Sub S_plus
- Declare Sub M_plus
- Declare Sub H_plus
- Declare Sub Rok_plus
- Declare Sub Miesiac_plus
- Declare Sub Dzien_plus
- Cursor Off Noblink
- Cls
- '-------------------------------------------------------------------------------
- '-------------------------------------------------------------------------------
- 'główna pętla
- Do
- Debounce Pind.0 , 0 , Menu , Sub 'oczekiwanie na wciśnięcie przycisku menu
- 'gdy zmienna menu_z=0 to wyświetl zwykły zegarek z datą, jeśli jest inaczej wyświtl odpowiednie menu
- If Menu_z = 0 Then
- 'pobranie danych z pcf
- I2cstart 'inicjalizacja magistrali I2C
- I2cwbyte 162 'podanie adresu PCF8583 dla zapisu
- I2cwbyte 2 'wybranie drugiego rejestru
- I2cstart 'powtórna inicjalizacja magistrali I2C
- I2cwbyte 163 'podanie adresu PCF8583 dla odczytu danych
- I2crbyte S , Ack 'odczyt sekund z potwierdzeniem transmisji
- I2crbyte M , Ack 'odczyt minut z potwierdzeniem transmisji
- I2crbyte H , Ack 'odczyt godzin bez potwierdzania transmisji
- I2crbyte Dzien , Ack
- I2crbyte Miesiac , Nack
- I2cstop 'koniec transmisji I2C
- S = Makedec(s) 'po odczycie zamieniamy kod bcd na zwykłe liczby
- M = Makedec(m)
- H = Makedec(h)
- 'pobranie roku z pamięci ram
- I2cstart
- I2cwbyte 162
- I2cwbyte &H10
- I2cstart
- I2cwbyte 163
- I2crbyte Rok_2 , Nack
- I2cstop
- 'przeliczenie danych z pcf na date dziesiętną
- Rok = Dzien
- Shift Rok , Right , 6
- Rok = Makedec(rok)
- Dzien.7 = 0 : Dzien.6 = 0
- Dzien = Makedec(dzien)
- Dzien_tygodnia = Miesiac
- Shift Dzien_tygodnia , Right , 5
- Dzien_tygodnia = Makedec(dzien_tygodnia)
- Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
- Miesiac = Makedec(miesiac)
- Rok_w = Rok_2 + Rok
- End If
- 'wyświetlenie godziny w pierwszej linijce
- Locate 1 , 1
- If H < 10 Then
- Lcd "Godz: 0" ; H ; ":"
- Else
- Lcd "Godz: " ; H ; ":"
- End If
- Locate 1 , 10
- If M < 10 Then
- Lcd "0" ; M ; ":"
- Else
- Lcd M ; ":"
- End If
- Locate 1 , 13
- If S < 10 Then
- Lcd "0" ; S
- Else
- Lcd S
- End If
- 'wyświetlenie daty w 2 linijce
- Locate 2 , 1
- Lcd "Data: "
- If Rok_w < 10 Then
- Lcd "0" ; Rok_w ;
- Else
- Lcd Rok_w
- End If
- If Miesiac < 10 Then
- Lcd "-0" ; Miesiac
- Else
- Lcd "-" ; Miesiac
- End If
- If Dzien < 10 Then
- Lcd "-0" ; Dzien
- Else
- Lcd "-" ; Dzien
- End If
- If S = 0 Then 'dioda migająca co minutę
- Portd.7 = 0
- Else
- Portd.7 = 1
- End If
- 'czesc 1 menu - zmiana godziny
- If Menu_z = 1 Then
- Debounce Pind.1 , 0 , H_plus , Sub
- Locate 2 , 16
- Lcd "G"
- End If
- 'czesc 2 menu - zmiana minut
- If Menu_z = 2 Then
- Debounce Pind.1 , 0 , M_plus , Sub
- Locate 2 , 16
- Lcd "M"
- End If
- 'czesc 3 menu - zmiana sekund
- If Menu_z = 3 Then
- Debounce Pind.1 , 0 , S_plus , Sub
- Locate 2 , 16
- Lcd "S"
- End If
- 'czesc 4 menu - zmiana roku
- If Menu_z = 4 Then
- Debounce Pind.1 , 0 , Rok_plus , Sub
- Locate 2 , 16
- Lcd "R"
- End If
- 'czesc 5 menu - zmiana miesiaca
- If Menu_z = 5 Then
- Debounce Pind.1 , 0 , Miesiac_plus , Sub
- Locate 2 , 16
- Lcd "M"
- End If
- 'czesc 6 menu - zmiana dnia
- If Menu_z = 6 Then
- Debounce Pind.1 , 0 , Dzien_plus , Sub
- Locate 2 , 16
- Lcd "D"
- End If
- Loop
- End
- '-------------------------------------------------------------------------------
- 'procedury----------------------------------------------------------------------
- '-------------------------------------------------------------------------------
- 'procedura obslugi zapisu zmiany czasu gdy wychodzisz z menu
- Sub Menu
- Incr Menu_z
- If Menu_z = 7 Then 'jeśli menu_z = 7 to oznacza ze wychodzisz z menu (wtedy dokonujemy zapisu zmienionej godziny)
- Menu_z = 0 'zresetowanie zmiennej licznika pozycji menu (wyjscie z menu)
- S = Makebcd(s) 'konwersja liczb na kod bcd do zapisu
- M = Makebcd(m)
- H = Makebcd(h)
- Rok = Rok_w Mod 4 'obliczenie roku do zapisu w pcf
- Rok_2 = Rok_w - Rok 'obliczenie roku do zapisu w ram
- Rok = Makebcd(rok) 'przygotowanie danych do zapisu w pcf
- Shift Rok , Left , 6
- Dzien = Makebcd(dzien)
- Dzien = Rok Or Dzien
- Miesiac = Makebcd(miesiac)
- Dzien_tygodnia = Miesiac
- Shift Dzien_tygodnia , Left , 5
- Miesiac = Dzien_tygodnia Or Miesiac
- 'zapis danych do pamieci
- I2cstart 'Uruchomienie I2C
- I2cwbyte 162 'Wybór urządzenia do zapisu
- I2cwbyte &H02 'Wybór 2 rejestru do zapisu (sekundy)
- I2cwbyte S 'Zapisuje sekundy
- I2cwbyte M 'Zapisuje minuty
- I2cwbyte H 'Zapisuje godziny
- I2cwbyte Dzien
- I2cwbyte Miesiac
- I2cstop
- 'zapis rok_2 do wolnej komórki ram
- I2cstart 'rozpoczęcie transmisji
- I2cwbyte 162 'ustawienie adresu układu
- I2cwbyte &H10 'ustawienie adresu komórki (pioerwsza wolna)
- I2cwbyte Rok_2 'zapis zmiennej do pamięci
- I2cstop 'koniec zapisu
- Cls
- End If
- End Sub
- 'procedury inkrementacji zmiennnych po naciskaniu przycisku plus
- Sub H_plus
- Incr H
- If H = 24 Then H = 0
- End Sub
- Sub M_plus
- Incr M
- If M = 60 Then M = 0
- End Sub
- Sub S_plus
- Incr S
- If S = 60 Then S = 0
- End Sub
- Sub Rok_plus
- Incr Rok_w
- If Rok_w = 100 Then Rok_w = 0
- End Sub
- Sub Miesiac_plus
- Incr Miesiac
- If Miesiac = 13 Then Miesiac = 1
- End Sub
- Sub Dzien_plus
- Incr Dzien
- If Dzien = 32 Then Dzien = 1
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement