Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '******************************************************************************************
- '!!!!!Nie kasować!!!!!
- 'Autor orginału: Pier
- 'Modyfikacja do wersji z datą i temperaturą: Duch__
- 'email: duszkowski@o2.pl
- 'http://www.elektroda.pl/rtvforum/viewtopic.php?p=8135591#8135591
- 'Program zawiera w obecnej wersji obsługę 1x DS18b20, docelowo mają to być 2 czujniki.
- 'Fusebity:
- 'Internal RC 8MHz
- '!!!!!Nie kasować!!!!!
- '******************************************************************************************
- '----Zegar VFD_IW-18----.'
- 'opis podłączenia wyswietlacza VFD
- 'seg A - portd.0
- 'seg B - portd.1
- 'seg C - portd.2
- 'seg D - portd.3
- 'seg E - portd.4
- 'seg F - portd.5
- 'seg G - portd.6
- 'seg DP - portd.7
- 'Siatki
- 'portb.0 - S8
- 'portb.1 - S9
- 'portb.2 - S7
- 'portb.3 - S6
- 'portb.4 - S5
- 'portb.5 - S4
- 'portb.6 - S3
- 'portb.7 - S2
- $regfile = "M8def.dat"
- $crystal = 8000000
- $lib "mcsbyte.lbx" ' for smaller code
- $lib "ds1307clock.lib" ' modified lib
- Dim I1 As Integer , Ss As String * 6
- Dim Dsid1(8) As Byte
- Config 1wire = Portc.0
- Dim Tempjednosci As Long
- Dim Tempdziesiatki As Long
- Dim Tempsetki As Long
- Dim Temptysiac As Long
- Dim Ktorywysw As Byte
- Dim Sekundy As Byte
- Dim Minuty As Byte
- Dim Godziny As Byte
- Dim Sekundyjed As Byte
- Dim Sekundydzies As Byte
- Dim Minutyjed As Byte
- Dim Minutydzies As Byte
- Dim Godzinyjed As Byte
- Dim Godzinydzies As Byte
- Dim Sekundy1 As Byte
- Dim Minuty1 As Byte
- Dim Godziny1 As Byte
- Dim Weekday As Byte
- Dim Dzien As Byte
- Dim Miesiac As Byte
- Dim Rok As Byte
- Dim Dzienjed As Byte
- Dim Dziendzies As Byte
- Dim Miesiacjed As Byte
- Dim Miesiacdzies As Byte
- Dim Rokjed As Byte
- Dim Rokdzies As Byte
- Dim Rok1 As Byte
- Dim Miesiac1 As Byte
- Dim Dzien1 As Byte
- Dim Czarny_ekran As Byte
- Dim Czekaj As Word
- Dim Ktory_ekran As Byte
- Dim Led As Byte
- Dim Ekran As Word
- Dim Czas_data_temp As Byte
- Dim Licz_ms As Byte
- Dim Ds As Byte
- Dim Ktora_instrukcja_ds As Word
- Declare Sub Getdatetime
- Declare Sub Settime
- Declare Sub Licz_moduly
- Declare Sub Migaj_dioda
- Declare Sub Licz_ekran
- Declare Sub Ds_read_1
- Declare Sub Ds_read_2
- Declare Sub Ds_read_3
- Declare Sub Disable_interrupts
- Declare Sub Enable_interrupts
- Config Debounce = 10
- Config Sda = Portc.4
- Config Scl = Portc.5
- 'address of ds1307
- Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
- Const Ds1307r = &HD1
- Config I2cdelay = 100
- Config Pinc.3 = 0 : Portc.3 = 1
- Config Pinc.2 = 0 : Portc.2 = 1
- Config Portd = 255 : Portd = 11111111 : Config Portb = &B11111111 : Portb = &B11111111
- Call Disable_interrupts
- Dsid1(1) = 1wsearchfirst() 'Znajdź kolejny czujnik podpięty do portu
- Call Enable_interrupts
- S1 Alias Pinc.2
- S2 Alias Pinc.3
- Czas_data_temp = 0
- Config Timer0 = Timer , Prescale = 8
- Call Enable_interrupts
- Enable Timer0
- Load Timer0 = 255
- On Timer0 Multipleksuj
- Poczatek:
- '*******************************Program Główny**********************************
- Do
- Gosub Licz_ekran
- Call Getdatetime
- Gosub Licz_moduly
- Debounce S1 , 0 , Ustaw_godz
- Loop
- End
- '******************************Ustawianie godzin********************************
- Ustaw_godz:
- Do
- Czas_data_temp = 0
- Gosub Licz_moduly
- Debounce S1 , 0 , Incrgodz
- Debounce S2 , 0 , Zatwierdz_godz
- Loop
- Incrgodz:
- Incr Godziny : If Godziny > 23 Then Godziny = 0 'Wzwiększa wartość godzin
- Godziny1 = Godziny
- Minuty1 = Minuty
- Call Settime
- Goto Ustaw_godz
- Zatwierdz_godz:
- Goto Ustaw_min
- '******************************Ustawianie minut*********************************
- Ustaw_min:
- Do
- Czas_data_temp = 0
- Gosub Licz_moduly
- Debounce S1 , 0 , Incrmin
- Debounce S2 , 0 , Zatwierdz_min
- Loop
- Incrmin:
- Incr Minuty : If Minuty > 59 Then Minuty = 0 'Wzwiększa wartość godzin
- Godziny1 = Godziny
- Minuty1 = Minuty
- Call Settime
- Goto Ustaw_min
- Zatwierdz_min:
- Goto Ustaw_dni
- '******************************Ustawianie dni*********************************
- Ustaw_dni:
- Do
- If Dzien < 1 Then Dzien = 1
- Czas_data_temp = 1
- Gosub Licz_moduly
- Debounce S1 , 0 , Incrdni
- Debounce S2 , 0 , Zatwierdz_dni
- Loop
- Incrdni:
- Incr Dzien : If Dzien > 31 Then Dzien = 1 'Wzwiększa wartość godzin
- Godziny1 = Godziny
- Minuty1 = Minuty
- Dzien1 = Dzien
- Miesiac1 = Miesiac
- Rok1 = Rok
- Call Settime
- Goto Ustaw_dni
- Zatwierdz_dni:
- Goto Ustaw_miesiac
- '******************************Ustawianie miesiac*********************************
- Ustaw_miesiac:
- Do
- If Miesiac < 1 Then Miesiac = 1
- Czas_data_temp = 1
- Gosub Licz_moduly
- Debounce S1 , 0 , Incrmiesiac
- Debounce S2 , 0 , Zatwierdz_miesiac
- Loop
- Incrmiesiac:
- Incr Miesiac : If Miesiac > 12 Then Miesiac = 1 'Wzwiększa wartość godzin
- Godziny1 = Godziny
- Minuty1 = Minuty
- Dzien1 = Dzien
- Miesiac1 = Miesiac
- Rok1 = Rok
- Call Settime
- Goto Ustaw_miesiac
- Zatwierdz_miesiac:
- Goto Ustaw_rok
- '******************************Ustawianie rok*********************************
- Ustaw_rok:
- Do
- If Rok < 10 Then Rok = 10
- Czas_data_temp = 1
- Gosub Licz_moduly
- Debounce S1 , 0 , Incrrok
- Debounce S2 , 0 , Zatwierdz_rok
- Loop
- Incrrok:
- Incr Rok : If Rok > 20 Then Rok = 10 'Wzwiększa wartość godzin
- Godziny1 = Godziny
- Minuty1 = Minuty
- Dzien1 = Dzien
- Miesiac1 = Miesiac
- Rok1 = Rok
- Call Settime
- Goto Ustaw_rok
- '******************************Obsługa DS18b20**********************************
- Zatwierdz_rok:
- Goto Poczatek
- Sub Ds_read_1
- Call Disable_interrupts
- 1wreset
- 1wwrite &HCC
- 1wwrite &H44
- Call Enable_interrupts
- End Sub
- Sub Ds_read_2
- Call Disable_interrupts
- 1wreset
- 1wwrite &H55
- 1wverify Dsid1(1)
- Call Enable_interrupts
- End Sub
- Sub Ds_read_3
- Call Disable_interrupts
- 1wwrite &HBE
- I1 = 1wread(2)
- I1 = I1 * 10
- I1 = I1 / 16
- Tempjednosci = I1 Mod 10
- Tempdziesiatki = I1 / 10
- Tempdziesiatki = Tempdziesiatki Mod 10
- Tempsetki = I1 / 100
- Tempsetki = Tempsetki Mod 10
- Temptysiac = I1 / 1000
- Temptysiac = Temptysiac Mod 10
- If I1 < 0 Then
- Tempjednosci = Tempjednosci * -1
- Tempdziesiatki = Tempdziesiatki * -1
- Tempsetki = Tempsetki * -1
- Temptysiac = Temptysiac * -1
- End If
- Call Enable_interrupts
- End Sub
- 'Obliczanie modułów każdej z liczb które mają zostać zaprezentowane na wyświetlaczu
- Sub Licz_moduly
- Sekundyjed = Sekundy Mod 10
- Sekundydzies = Sekundy / 10
- Minutyjed = Minuty Mod 10
- Minutydzies = Minuty / 10
- Godzinyjed = Godziny Mod 10
- Godzinydzies = Godziny / 10
- Rokjed = Rok Mod 10
- Rokdzies = Rok / 10
- Miesiacjed = Miesiac Mod 10
- Miesiacdzies = Miesiac / 10
- Dzienjed = Dzien Mod 10
- Dziendzies = Dzien / 10
- End Sub
- Sub Disable_interrupts
- Disable Interrupts
- End Sub
- Sub Enable_interrupts
- Enable Interrupts
- End Sub
- Sub Licz_ekran
- Ekran = 0
- If Ekran = 255 Then
- Ekran = 0
- Incr Ktory_ekran
- End If
- If Ktory_ekran = 6 Then Ktory_ekran = 0
- Select Case Ktory_ekran
- Case 0:
- Call Disable_interrupts
- Portd = &B111111111 'Zgaszony
- Portb = &B11111111
- Gosub Ds_read_1
- Ktory_ekran = 1
- Case 1:
- Czas_data_temp = 0
- Case 2:
- Call Disable_interrupts
- Portd = &B111111111 'Zgaszony
- Portb = &B11111111
- Gosub Ds_read_2
- Ktory_ekran = 3
- Case 3:
- Czas_data_temp = 1
- Case 4:
- Call Disable_interrupts
- Portd = &B111111111 'Zgaszony
- Portb = &B11111111
- Gosub Ds_read_3
- Ktory_ekran = 5
- Case 5:
- Czas_data_temp = 2
- End Select
- End Sub
- 'called from ds1307clock.lib
- Getdatetime:
- I2cstart ' Generate start code
- I2cwbyte Ds1307w ' send address
- I2cwbyte 0 ' start address in 1307
- I2cstart ' Generate start code
- I2cwbyte Ds1307r ' send address
- I2crbyte Sekundy , Ack
- I2crbyte Minuty , Ack ' MINUTES
- I2crbyte Godziny , Ack ' Hours
- I2crbyte Weekday , Ack ' Day of Week
- I2crbyte Dzien , Ack ' Day of Month
- I2crbyte Miesiac , Ack ' Month of Year
- I2crbyte Rok , Nack
- I2cstop
- Sekundy = Makedec(sekundy)
- Minuty = Makedec(minuty)
- Godziny = Makedec(godziny)
- Dzien = Makedec(dzien)
- Miesiac = Makedec(miesiac)
- Rok = Makedec(rok)
- Return
- Settime:
- Godziny1 = Makebcd(godziny1)
- Minuty1 = Makebcd(minuty1)
- Dzien1 = Makebcd(dzien1)
- Miesiac1 = Makebcd(miesiac1)
- Rok1 = Makebcd(rok1)
- Weekday = Makebcd(weekday)
- I2cstart ' Generate start code
- I2cwbyte Ds1307w ' send address
- I2cwbyte 0 ' starting address in 1307
- I2cwbyte 0 ' Send Data to SECONDS
- I2cwbyte Minuty1 ' MINUTES
- I2cwbyte Godziny1 ' Hours
- I2cwbyte Weekday
- I2cwbyte Dzien1
- I2cwbyte Miesiac1
- I2cwbyte Rok1
- I2cstop
- Return
- Multipleksuj:
- Load Timer0 = 100
- Incr Licz_ms
- If Czas_data_temp = 0 Then
- Portd = &B111111111
- Incr Ktorywysw
- If Ktorywysw = 8 Then
- Ktorywysw = 0
- End If
- Select Case Ktorywysw
- Case 0:
- Portd = Lookup(sekundyjed , Tabela)
- Portb = &B11111101
- Case 1:
- Portd = Lookup(sekundydzies , Tabela)
- Portb = &B11111110
- Case 2:
- If Sekundyjed = 0 Or Sekundyjed = 2 Or Sekundyjed = 4 Or Sekundyjed = 6 Or Sekundyjed = 8 Then
- Portd = &B110111111 'Kreski
- Portb = &B11111011
- Else
- Portd = &B111111111 'Zgaszony
- End If
- Case 3:
- Portd = Lookup(minutyjed , Tabela)
- Portb = &B11110111
- Case 4:
- Portd = Lookup(minutydzies , Tabela)
- Portb = &B11101111
- Case 5:
- If Sekundyjed = 0 Or Sekundyjed = 2 Or Sekundyjed = 4 Or Sekundyjed = 6 Or Sekundyjed = 8 Then
- Portd = &B110111111 'Kreski
- Portb = &B11011111
- Else
- Portd = &B111111111 'Zgaszony
- End If
- Case 6:
- Portd = Lookup(godzinyjed , Tabela)
- Portb = &B10111111
- Case 7:
- If Godzinydzies = 0 Then
- Portd = &B11111111
- Else
- Portd = Lookup(godzinydzies , Tabela)
- Portb = &B01111111
- End If
- End Select
- End If
- If Czas_data_temp = 1 Then
- Portd = &B111111111
- Incr Ktorywysw
- If Ktorywysw = 8 Then Ktorywysw = 0
- Select Case Ktorywysw
- Case 0:
- Portd = Lookup(rokjed , Tabela)
- Portb = &B11111110
- Case 1:
- Portd = Lookup(rokdzies , Tabela)
- Portb = &B11111011
- Case 2:
- Portd = &B101111111
- Portb = &B11110111
- Case 3:
- Portd = Lookup(miesiacjed , Tabela)
- Portb = &B11110111
- Case 4:
- Portd = Lookup(miesiacdzies , Tabela)
- Portb = &B11101111
- Case 5:
- Portd = &B101111111
- Portb = &B11011111
- Case 6:
- Portd = Lookup(dzienjed , Tabela)
- Portb = &B11011111
- Case 7:
- Portd = Lookup(dziendzies , Tabela)
- Portb = &B10111111
- End Select
- End If
- If Czas_data_temp = 2 Then
- Portd = &B111111111
- Incr Ktorywysw
- If Ktorywysw = 8 Then Ktorywysw = 0
- Select Case Ktorywysw
- Case 0:
- Portd = &B11000110 'Znak C
- Portb = &B11111110
- Case 1:
- Portd = &B10011100 'Znak stopnia
- Portb = &B11111011
- Case 2:
- Portd = Lookup(tempjednosci , Tabela)
- Portb = &B11110111
- Case 3:
- Portd = &B101111111 'Przecinek
- Portb = &B11101111
- Case 4:
- Portd = Lookup(tempdziesiatki , Tabela)
- Portb = &B11101111
- Case 5:
- If I1 >= 100 Then
- Portd = Lookup(tempsetki , Tabela)
- Portb = &B11011111
- End If
- If I1 < 100 And I1 >= 0 Then
- Portd = &B11111111
- End If
- If I1 > -100 And I1 < 0 Then
- Portd = &B110111111 'Kreski
- Portb = &B11011111
- End If
- Case 6:
- If I1 >= 1000 Then
- Portd = Lookup(temptysiac , Tabela)
- Portb = &B10111111
- Else
- Portd = &B11111111
- End If
- If I1 >= -550 And I1 =< -100 Then
- Portd = Lookup(tempsetki , Tabela)
- Portb = &B11011111
- End If
- Case 7:
- If I1 >= -550 And I1 =< -100 Then
- Portd = &B110111111 'Kreski
- Portb = &B10111111
- End If
- End Select
- End If
- Return
- Tabela:
- Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement