termometr 6xDS


Witam !
Na podstawie" Prostego sterownika CO" próbuje przerobic kod aby po kolei LCD wyswietlał poszczególne temperatury np DS1iDS2 .DS3iDS4 ,DS5iDS6. w symulatorze sprawdziłem rejestracje czujników oraz wyswietlanie pierwszej pary czujników .
Nie moge przejsc do nastepnej pary oraz kolejnej. prosze o sugestie

                           '************* Konfiguracja uC *****************
'***********************************************
$sim
$regfile = "m8def.dat"
$crystal = 8000000
 
 
Config Portb = &B11111000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00011111 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5       'mirley UPT M16
Config Lcd = 16 * 2
 
Cls
Cursor Off Noblink
 
Config 1wire = Pind.2
 
 
Sw_port Alias Pinb                                          'nazwa portu
 
Buzz Alias Portd.1
Light Alias Portd.0
 
'
 
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Stan_sw As Byte , Sw As Byte , Licznik_sw As Byte       'sw
Dim Wyswietlanie As Byte , Poz_wysw As Byte , Wyswietlono As Bit       'Lcd
Dim Mig As Bit , Poz_ust As Byte
Dim Autosave As Byte , Autopowrot As Byte , Autolight As Byte
 
 
Dim Ds1(8) As Byte , Ds2(8) As Byte , Ds3(8) As Byte , Ds4(8) As Byte , Ds5(8) As Byte , Ds6(8) As Byte , Ds(8) As Byte , Ds_adr As Byte , Ds_ok As Bit       'DS18B20
Dim Ktory_ds As Byte , Lsb As Byte , Msb As Byte , Minusy As Byte
Dim T(4) As Word
 
Dim T_min As Word , T_alarm As Word
 
 
Dim Dzielnik(2) As Byte                                     'dzielniki timera
Dim Flaga_4ms As Bit , Flaga_500ms As Bit , Flaga_1s As Bit 'flagi przerwań
Dim Hbyte(2) As Byte , Hword(3) As Word , N As Byte , Hbit As Bit , M As Byte
 
Dim Buzz_en As Bit
 
 
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Light = 0
'''''1234567890123456
Lcd "> BUFOR C.O < "
Lowerline
Lcd "  WERSJA 0.1   "
 Cls
Wait 1
 
 
If Sw_port = &B00000100 Then                                'minus
  Ds_adr = 30
  Gosub Ds_reg
  Cls
  Lcd "Ds 1"
End If
 
If Sw_port = &B00000111 Then                                'plus + Menu +minus
  Ds_adr = 40
  Gosub Ds_reg
  Cls
  Lcd "Ds 2"
End If
 
 If Sw_port = &B00000011 Then                               'plus+menu
  Ds_adr = 50
  Gosub Ds_reg
  Cls
  Lcd "Ds 3"
End If
 
If Sw_port = &B00000001 Then                                'plus
  Ds_adr = 60
  Gosub Ds_reg
  Cls
  Lcd "Ds 4"
End If
 
 
If Sw_port = &B00000101 Then                                'plus +minus
  Ds_adr = 70
  Gosub Ds_reg
  Cls
  Lcd "Ds 5"
End If
 
If Sw_port = &B00000110 Then                                'minus+menu
  Ds_adr = 80
  Gosub Ds_reg
  Cls
  Lcd "Ds 6"
End If
 
 
 
 
For N = 1 To 8
  Hbyte(1) = 30 + N
  Readeeprom Ds1(n) , Hbyte(1)
  Hbyte(1) = 40 + N
  Readeeprom Ds2(n) , Hbyte(1)
  Hbyte(1) = 50 + N
  Readeeprom Ds3(n) , Hbyte(1)
  Hbyte(1) = 60 + N
  Readeeprom Ds4(n) , Hbyte(1)
  Hbyte(1) = 70 + N
  Readeeprom Ds5(n) , Hbyte(1)
  Hbyte(1) = 80 + N
  Readeeprom Ds6(n) , Hbyte(1)
Next N
 
Readeeprom T_min , 2
Readeeprom T_alarm , 4
 
 
If T_min < 100 Or T_min > 950 Then T_min = 400
If T_alarm < 100 Or T_alarm > 950 Then T_alarm = 850
 
 
 
Wait 1
 
'start watch dog
 
 
Wyswietlono = 1
Wyswietlanie = 1
Autosave = 5
Autolight = 0
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
  '***********************************************   co 4ms
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
 
    Gosub Przyciski
      If Wyswietlono = 1 Then Gosub Wysw_lcd
 
  End If
  '***********************************************
 
  '***********************************************   co 500ms
  If Flaga_500ms = 1 Then
     Flaga_500ms = 0
 
       Mig = Not Mig
 
 
 
    Wyswietlanie = Poz_wysw
 
  End If
  '***********************************************
 
  '***********************************************   co 1s
  If Flaga_1s = 1 Then
    Flaga_1s = 0
 
    If Light = 0 Then
       Incr Autolight
          If Autolight >= 20 Then Light = 1
            Else
          Autolight = 0
    End If
 
    If Poz_wysw <> 1 Then
        Incr Autopowrot
           If Autopowrot = 6 Then
               Poz_wysw = 1
               Wyswietlanie = 1
               Poz_ust = 0
           End If
       Else
        Autopowrot = 0
    End If
 
 
    If Autosave < 5 Then
       Incr Autosave
            If Autosave = 5 Then                            'tu zapis do eeprom
 
               Writeeeprom T_min , 2                        '2 bajty
               Writeeeprom T_alarm , 4                      '2 bajty
                Hbyte(1) = 0
                                                               '2 bajty
              Poz_ust = 0
             End If
    End If
 
 
    Gosub Temperatura
    Gosub Sterowanie
 
 
  End If
  '***********************************************
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
  Timer0 = 5
     Set Flaga_4ms
       Incr Dzielnik(1)
          If Dzielnik(1) = 125 Then
             Dzielnik(1) = 0
     Set Flaga_500ms
       Incr Dzielnik(2)
          If Dzielnik(2) = 2 Then
             Dzielnik(2) = 0
      Set Flaga_1s
          End If
          End If
Return
'******** Przerwanie timer 0 Koniec ************
 
'***********************************************
'*****************  Przyciski     **************
Przyciski:
Sw = Sw_port And &B00000111                                 'maska na piny nieużywane jako sw
If Sw <> &B00000111 And Stan_sw = Sw Then                   'x4ms
     Incr Licznik_sw
       If Licznik_sw = 68 Then                              '68x4ms=0,22s
          Licznik_sw = 0
 
      Select Case Stan_sw
 
        Case &B00000011:                                    'incr plus+menu
        '***********************************************************
          Select Case Poz_wysw
 
                  Case 4:
                     Select Case Poz_ust
                             Case 0:
                                  Poz_ust = 1
                            Case 1:
                              If T_min < 950 Then T_min = T_min + 10
 
                            Case 2:
                             If T_alarm < 950 Then T_alarm = T_alarm + 10
                    End Select
 
                        Autosave = 0
 
 
 
          End Select
 
          If Buzz = 0 Then Buzz_en = 0
                      Autopowrot = 0
                           Light = 0
                       Autolight = 0
 
        Case &B00000101:                                    'ustaw next menu
        '***********************************************************
 
          If Poz_ust = 0 Then
              Wyswietlanie = Poz_wysw + 1
          If Wyswietlanie = 5 Then Wyswietlanie = 1
 
                Else
 
            Select Case Poz_wysw
                    Case 4:
                      Incr Poz_ust
                       If Poz_ust = 3 Then Poz_ust = 0
             ' Case 5:
                'Incr Poz_ust
               ' If Poz_ust = 2 Then Poz_ust = 0
              'Case 6:
               ' Incr Poz_ust
                'If Poz_ust = 3 Then Poz_ust = 0
 
            End Select
          End If
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
        Case &B00000110:                                    'decr  minus+menu
        '***********************************************************
          Select Case Poz_wysw
            Case 1:
              'Off_licz = 0
              ''Tryb_pracy = 0
             ' Wygaszenie = Not Wygaszenie
            Case 4:
              Select Case Poz_ust
                Case 0:
                  Poz_ust = 1
                Case 1:
                  If T_min > 100 Then T_min = T_min - 10
                Case 2:
                  If T_alarm > 100 Then T_alarm = T_alarm - 10
              End Select
              Autosave = 0
 
 
          End Select
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
      End Select
    End If
  Else
    Stan_sw = Sw
    Licznik_sw = 60
  End If
 
Return
'***********************************************
 
'***********************************************
'**************    LCD     ***********
Wysw_lcd:
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32           'stopien
 If Wyswietlanie <> 0 Then
   Wyswietlono = 0
   Select Case Wyswietlanie
     Case 1:                                                'temp piec bojler
     '**************************************************************
       If Poz_wysw <> 1 Then
         Cls
         Lcd "ds1:"
         Lowerline
         Lcd "ds2:"
       End If
 
       For N = 1 To 2
         Hword(1) = T(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         Locate N , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
     Case 2:                                                'temb banka,dom
     '**************************************************************
        If Poz_wysw <> 2 Then
         Cls
         Lcd "ds3:"
         Lowerline
         Lcd "ds4:"
       End If
 
       For N = 3 To 4
         Hword(1) = T(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         M = N - 2
         Locate M , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
        Case 3:                                             'temb banka,dom
     '**************************************************************
        If Poz_wysw <> 3 Then
         Cls
         Lcd "ds5:"
         Lowerline
         Lcd "ds6:"
       End If
 
       For N = 5 To 6
         Hword(1) = T(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         M = N - 2
         Locate M , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
     Case 4:
     '**************************************************************
       If Poz_wysw <> 4 Then
         Cls
         Lcd "T.Min:"
         Lowerline
         Lcd "T.Alarm:"
       End If
 
       If Poz_ust = 1 And Mig = 1 Then
          Locate 1 , 10
          Lcd "       "
       Else
       't minimalna
         Hword(1) = T_min / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 1 , Hword(2)
         Hword(2) = T_min Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C "
       End If
 
       If Poz_ust = 2 And Mig = 1 Then
          Locate 2 , 10
          Lcd "       "
       Else
       't alarmowa
         Hword(1) = T_alarm / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 2 , Hword(2)
         Hword(2) = T_alarm Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       End If
 
 
      Case 4:
 
     Case 5:
 
 
 
 
 
   End Select
   Poz_wysw = Wyswietlanie
   Wyswietlanie = 0
   Wyswietlono = 1
 End If
Return
'************** LCD Koniec ***********
 
'**********  rejestracja DS *********
Ds_reg:
  Disable Interrupts
  1wreset
  1wwrite &H33
  Ds(1) = 1wread(8):
  Enable Interrupts
  If Ds(1) <> 255 Or Ds(2) <> 255 Or Ds(3) <> 255 Or Ds(4) <> 255 Or Ds(5) <> 255 Or Ds(6) <> 255 Or Ds(7) <> 255 Or Ds(8) <> 255 Then
    Ds_ok = 1
    For N = 1 To 8
      Hbyte(1) = Ds_adr + N
      Writeeeprom Ds(n) , Hbyte(1)
    Next N
  Else
    Ds_ok = 0
  End If
Return
'******  rejestracja DS Koniec ******
 
'*************  Temperatura   ***********
Temperatura:
  Disable Interrupts
  1wreset
  Select Case Ktory_ds
    Case 0:
      1wwrite &HCC
      1wwrite &H44
    Case 1:
      1wwrite &H55
      1wwrite Ds1(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 2:
      1wwrite &H55
      1wwrite Ds2(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 3:
      1wwrite &H55
      1wwrite Ds3(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 4:
      1wwrite &H55
      1wwrite Ds4(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 5:
      1wwrite &H55
      1wwrite Ds5(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
   Case 6:
      1wwrite &H55
      1wwrite Ds6(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
  End Select
 
  Enable Interrupts
 
  If Ktory_ds > 0 Then
    T(ktory_ds) = Msb * 256
    T(ktory_ds) = T(ktory_ds) + Lsb
    Minusy.ktory_ds = Msb.7
 
    If Minusy.ktory_ds = 1 Then
      T(ktory_ds) = Not T(ktory_ds)
      T(ktory_ds) = T(ktory_ds) + 1
    End If
 
    T(ktory_ds) = T(ktory_ds) * 10
    T(ktory_ds) = T(ktory_ds) / 16
   Else
    If Poz_wysw = 1 And Wyswietlono = 1 Then Wyswietlanie = 1
  End If
 
  Incr Ktory_ds
  If Ktory_ds = 7 Then Ktory_ds = 0
 
Return
'**********  Temperatura  Koniec *********
 
 
'************   Sterowanie       ***************
'***********************************************
Sterowanie:
 
 
  'alarm
  If T(1) >= T_alarm Or T(2) >= T_alarm Then
    If Buzz_en = 1 Then Buzz = Not Buzz Else Buzz = 1
  Else
    Buzz = 1
    Hword(1) = T_alarm - 50
    If T(1) <= Hword(1) And T(2) <= Hword(1) Then Buzz_en = 1
  End If
 
 
 
 
Return
'********    Sterowanie      Koniec ************




Portret użytkownika mirley

Re: Czujniki DS

ten kod powinien załatwic sprawę:

          If Poz_ust = 0 Then
              Wyswietlanie = Poz_wysw + 1
              If Wyswietlanie = 5 Then Wyswietlanie = 1
          Else
            Select Case Poz_wysw
                    Case 4:
                      Incr Poz_ust
                       If Poz_ust = 3 Then Poz_ust = 0
            End Select
          End If

Jak uruchomisz układ to wyświetla się pierwszy ekran i zmienna poz_wysw przyjmuje 1, poz_ust określa czy są jakieś ustawialne parametry na danym pokazywanym ekranie. W normalnych warunkach poz_ust jest zawsze 0 więc powinno działać. Za każdym naciśnięciem przycisku menu wyświetlanie zwiększy się o 1 od aktualnej pozycji.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika lok65

ds x6

Witam!
poprawiłem program wg. twoich wskazówek , wszystko działa poprawnie.Jednak chciałbym to zrobić trochę inaczej,doszedłem do wniosku że pierwsze cztery temperatury bedą prezentowane na pierwszej pozycji wyświetlacza(Poz_wysw<>1) ,ds5 i ds 6 na drugiej a temp_min i temp_max na trzeciej . Po zmodyfikowaniu programu wyswietlają sie poszczególne ekrany działa przycisk menu . Problem tkwi w tym że że prz wybieraniu ekranów przyciskiem cd Chr(2 -5) są wyswietlane prawidłowo, natomiast przy autopowrocie
jest ich brak ,nie wyswietlają sie proszę o sugestie

tutaj pierwszy ekran

                             '************* Konfiguracja uC *****************
'***********************************************
 
$sim
$regfile = "m8def.dat"
$crystal = 8000000
 
 
Config Portb = &B11111000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00011111 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5       'mirley UPT M16
Config Lcd = 16 * 2
 
 
 
Cls
Cursor Off Noblink
 
Config 1wire = Pind.2
 
 
Sw_port Alias Pinb                                          'nazwa portu
 
Buzz Alias Portd.1
Light Alias Portd.0
 
'
 
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
 
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'******************  Zmienne *******************
'***********************************************
Dim Stan_sw As Byte , Sw As Byte , Licznik_sw As Byte       'sw
Dim Wyswietlanie As Byte , Poz_wysw As Byte , Wyswietlono As Bit       'Lcd
Dim Mig As Bit , Poz_ust As Byte
Dim Autosave As Byte , Autopowrot As Byte , Autolight As Byte
 
 
Dim Ds1(8) As Byte , Ds2(8) As Byte , Ds3(8) As Byte , Ds4(8) As Byte , Ds5(8) As Byte , Ds6(8) As Byte , Ds(8) As Byte , Ds_adr As Byte , Ds_ok As Bit       'DS18B20
Dim Ktory_ds As Byte , Lsb As Byte , Msb As Byte , Minusy As Byte
Dim T(4) As Word
 
Dim T_min As Word , T_alarm As Word
 
 
Dim Dzielnik(2) As Byte                                     'dzielniki timera
Dim Flaga_4ms As Bit , Flaga_500ms As Bit , Flaga_1s As Bit 'flagi przerwań
Dim Hbyte(2) As Byte , Hword(4) As Word , N As Byte , Hbit As Bit , M As Byte
 
Dim Buzz_en As Bit
 
 
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Light = 0
'''''1234567890123456
Lcd "> BUFOR C.O < "
Lowerline
Lcd "  WERSJA 0.1   "
 Cls
Wait 1
 
 
If Sw_port = &B00000100 Then                                'minus
  Ds_adr = 30
  Gosub Ds_reg
  Cls
  Lcd "Ds 1"
End If
 
If Sw_port = &B00000111 Then                                'plus + Menu +minus
  Ds_adr = 40
  Gosub Ds_reg
  Cls
  Lcd "Ds 2"
End If
 
 If Sw_port = &B00000011 Then                               'plus+menu
  Ds_adr = 50
  Gosub Ds_reg
  Cls
  Lcd "Ds 3"
End If
 
If Sw_port = &B00000001 Then                                'plus
  Ds_adr = 60
  Gosub Ds_reg
  Cls
  Lcd "Ds 4"
End If
 
 
If Sw_port = &B00000101 Then                                'plus +minus
  Ds_adr = 70
  Gosub Ds_reg
  Cls
  Lcd "Ds 5"
End If
 
If Sw_port = &B00000110 Then                                'minus+menu
  Ds_adr = 80
  Gosub Ds_reg
  Cls
  Lcd "Ds 6"
End If
 
 
 
 
For N = 1 To 8
  Hbyte(1) = 30 + N
  Readeeprom Ds1(n) , Hbyte(1)
  Hbyte(1) = 40 + N
  Readeeprom Ds2(n) , Hbyte(1)
  Hbyte(1) = 50 + N
  Readeeprom Ds3(n) , Hbyte(1)
  Hbyte(1) = 60 + N
  Readeeprom Ds4(n) , Hbyte(1)
  Hbyte(1) = 70 + N
  Readeeprom Ds5(n) , Hbyte(1)
  Hbyte(1) = 80 + N
  Readeeprom Ds6(n) , Hbyte(1)
Next N
 
Readeeprom T_min , 2
Readeeprom T_alarm , 4
 
 
If T_min < 100 Or T_min > 950 Then T_min = 400
If T_alarm < 100 Or T_alarm > 950 Then T_alarm = 850
 
 
 
Wait 1
 
'start watch dog
 
 
Wyswietlono = 1
Wyswietlanie = 1
Autosave = 5
Autolight = 0
 
'*******  Warunki Poczatkowe Koniec  ***********
 
'**************  Petla glowna ******************
'***********************************************
Do
  '***********************************************   co 4ms
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
 
    Gosub Przyciski
      If Wyswietlono = 1 Then Gosub Wysw_lcd
 
  End If
  '***********************************************
 
  '***********************************************   co 500ms
  If Flaga_500ms = 1 Then
     Flaga_500ms = 0
 
       Mig = Not Mig
 
 
 
    Wyswietlanie = Poz_wysw
 
  End If
  '***********************************************
 
  '***********************************************   co 1s
  If Flaga_1s = 1 Then
    Flaga_1s = 0
 
    If Light = 0 Then
       Incr Autolight
          If Autolight >= 20 Then Light = 1
            Else
          Autolight = 0
    End If
 
    If Poz_wysw <> 1 Then
        Incr Autopowrot
           If Autopowrot = 4 Then
               Poz_wysw = 1
               Wyswietlanie = 1
               Poz_ust = 0
           End If
       Else
        Autopowrot = 0
    End If
 
 
    If Autosave < 5 Then
       Incr Autosave
            If Autosave = 5 Then                            'tu zapis do eeprom
 
               Writeeeprom T_min , 2                        '2 bajty
               Writeeeprom T_alarm , 4                      '2 bajty
                Hbyte(1) = 0
                                                               '2 bajty
              Poz_ust = 0
             End If
    End If
 
 
    Gosub Temperatura
    Gosub Sterowanie
 
 
  End If
  '***********************************************
 
Loop
End
'************ Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
  Timer0 = 5
     Set Flaga_4ms
       Incr Dzielnik(1)
          If Dzielnik(1) = 125 Then
             Dzielnik(1) = 0
     Set Flaga_500ms
       Incr Dzielnik(2)
          If Dzielnik(2) = 2 Then
             Dzielnik(2) = 0
      Set Flaga_1s
          End If
          End If
Return
'******** Przerwanie timer 0 Koniec ************
 
'***********************************************
'*****************  Przyciski     **************
Przyciski:
Sw = Sw_port And &B00000111                                 'maska na piny nieużywane jako sw
If Sw <> &B00000111 And Stan_sw = Sw Then                   'x4ms
     Incr Licznik_sw
       If Licznik_sw = 68 Then                              '68x4ms=0,22s
          Licznik_sw = 0
 
      Select Case Stan_sw
 
        Case &B00000011:                                    'incr plus+menu
        '***********************************************************
          Select Case Poz_wysw
 
                  Case 3:
                     Select Case Poz_ust
                             Case 0:
                                  Poz_ust = 1
                            Case 1:
                              If T_min < 950 Then T_min = T_min + 10
 
                            Case 2:
                             If T_alarm < 950 Then T_alarm = T_alarm + 10
                    End Select
 
                        Autosave = 0
 
 
 
          End Select
 
          If Buzz = 0 Then Buzz_en = 0
                      Autopowrot = 0
                           Light = 0
                       Autolight = 0
 
        Case &B00000101:                                    'ustaw next menu
        '***********************************************************
                If Poz_ust = 0 Then
              Wyswietlanie = Poz_wysw + 1
              If Wyswietlanie = 4 Then Wyswietlanie = 1
          Else
            Select Case Poz_wysw
                    Case 3:
                      Incr Poz_ust
                       If Poz_ust = 3 Then Poz_ust = 0
            End Select
          End If
 
 
 
         ' If Poz_ust = 0 Then
             ' Wyswietlanie = Poz_wysw + 1
         ' If Wyswietlanie = 5 Then Wyswietlanie = 1
 
                'Else
 
           ' Select Case Poz_wysw
                    'Case 4:
                     ' Incr Poz_ust
                       'If Poz_ust = 3 Then Poz_ust = 0
             ' Case 5:
                'Incr Poz_ust
               ' If Poz_ust = 2 Then Poz_ust = 0
              'Case 6:
               ' Incr Poz_ust
                'If Poz_ust = 3 Then Poz_ust = 0
 
            'End Select
         ' End If
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
        Case &B00000110:                                    'decr  minus+menu
        '***********************************************************
          Select Case Poz_wysw
            Case 1:
              'Off_licz = 0
              ''Tryb_pracy = 0
             ' Wygaszenie = Not Wygaszenie
            Case 3:
              Select Case Poz_ust
                Case 0:
                  Poz_ust = 1
                Case 1:
                  If T_min > 100 Then T_min = T_min - 10
                Case 2:
                  If T_alarm > 100 Then T_alarm = T_alarm - 10
              End Select
              Autosave = 0
 
 
          End Select
          If Buzz = 0 Then Buzz_en = 0
          Autopowrot = 0
          Light = 0
          Autolight = 0
 
      End Select
    End If
  Else
    Stan_sw = Sw
    Licznik_sw = 60
  End If
 
Return
'***********************************************
 
'***********************************************
'**************    LCD     ***********
Wysw_lcd:
            Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32       'stopien
            Deflcdchar 2 , 31 , 27 , 19 , 27 , 27 , 17 , 31 , 32       'pozycja 1
            Deflcdchar 3 , 31 , 17 , 29 , 17 , 23 , 17 , 31 , 32       'pozycja 2
            Deflcdchar 4 , 31 , 17 , 29 , 17 , 29 , 17 , 31 , 32       'pozycja 3
            Deflcdchar 5 , 31 , 21 , 21 , 17 , 29 , 29 , 31 , 32       'pozycja 4
 
 If Wyswietlanie <> 0 Then
   Wyswietlono = 0
   Select Case Wyswietlanie
     Case 1:                                                'temp piec bojler
     '**************************************************************
 
       If Poz_wysw <> 1 Then
         Cls
 
         Locate 1 , 8 : Lcd Chr(2)
         Locate 2 , 8 : Lcd Chr(3)
         Locate 1 , 9 : Lcd Chr(4)
         Locate 2 , 9 : Lcd Chr(5)
         'Lcd "ds1:"
        ' Lowerline
        ' Lcd "ds2:"
       End If
 
       For N = 1 To 2
         Hword(1) = T(n) / 10
         Hword(2) = 2
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         Locate N , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
     'Case 2:                                                'temb banka,dom
     '**************************************************************
        'If Poz_wysw <> 2 Then
        ' Cls
         'Lcd "ds3:"
         'Lowerline
         'Lcd "ds4:"
       'End If
 
       For N = 3 To 4
         Hword(1) = T(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         M = N - 2
         Locate M , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
        Case 2:                                             'temb banka,dom
     '**************************************************************
        If Poz_wysw <> 2 Then
         Cls
         Lcd "ds5:"
         Lowerline
         Lcd "ds6:"
       End If
 
       For N = 5 To 6
         Hword(1) = T(n) / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         If Minusy.n = 1 Then Decr Hword(2)
         M = N - 4
         Locate M , Hword(2)
         Hword(2) = T(n) Mod 10
         If Minusy.n = 1 Then Lcd "-"
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       Next N
 
     Case 3:
     '**************************************************************
       If Poz_wysw <> 3 Then
         Cls
         Lcd "T.Min:"
         Lowerline
         Lcd "T.Alarm:"
       End If
 
       If Poz_ust = 1 And Mig = 1 Then
          Locate 1 , 10
          Lcd "       "
       Else
       't minimalna
         Hword(1) = T_min / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 1 , Hword(2)
         Hword(2) = T_min Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C "
       End If
 
       If Poz_ust = 2 And Mig = 1 Then
          Locate 2 , 10
          Lcd "       "
       Else
       't alarmowa
         Hword(1) = T_alarm / 10
         Hword(2) = 12
         If Hword(1) >= 10 Then Decr Hword(2)
         If Hword(1) >= 100 Then Decr Hword(2)
         Locate 2 , Hword(2)
         Hword(2) = T_alarm Mod 10
         Lcd Hword(1) ; "." ; Hword(2) ; Chr(0) ; "C"
       End If
 
 
 
 
 
   End Select
   Poz_wysw = Wyswietlanie
   Wyswietlanie = 0
   Wyswietlono = 1
 End If
Return
'************** LCD Koniec ***********
 
'**********  rejestracja DS *********
Ds_reg:
  Disable Interrupts
  1wreset
  1wwrite &H33
  Ds(1) = 1wread(8):
  Enable Interrupts
  If Ds(1) <> 255 Or Ds(2) <> 255 Or Ds(3) <> 255 Or Ds(4) <> 255 Or Ds(5) <> 255 Or Ds(6) <> 255 Or Ds(7) <> 255 Or Ds(8) <> 255 Then
    Ds_ok = 1
    For N = 1 To 8
      Hbyte(1) = Ds_adr + N
      Writeeeprom Ds(n) , Hbyte(1)
    Next N
  Else
    Ds_ok = 0
  End If
Return
'******  rejestracja DS Koniec ******
 
'*************  Temperatura   ***********
Temperatura:
  Disable Interrupts
  1wreset
  Select Case Ktory_ds
    Case 0:
      1wwrite &HCC
      1wwrite &H44
    Case 1:
      1wwrite &H55
      1wwrite Ds1(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 2:
      1wwrite &H55
      1wwrite Ds2(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 3:
      1wwrite &H55
      1wwrite Ds3(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 4:
      1wwrite &H55
      1wwrite Ds4(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
    Case 5:
      1wwrite &H55
      1wwrite Ds5(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
   Case 6:
      1wwrite &H55
      1wwrite Ds6(1) , 8
      1wwrite &HBE
      Lsb = 1wread():
      Msb = 1wread():
  End Select
 
  Enable Interrupts
 
  If Ktory_ds > 0 Then
    T(ktory_ds) = Msb * 256
    T(ktory_ds) = T(ktory_ds) + Lsb
    Minusy.ktory_ds = Msb.7
 
    If Minusy.ktory_ds = 1 Then
      T(ktory_ds) = Not T(ktory_ds)
      T(ktory_ds) = T(ktory_ds) + 1
    End If
 
    T(ktory_ds) = T(ktory_ds) * 10
    T(ktory_ds) = T(ktory_ds) / 16
   Else
    If Poz_wysw = 1 And Wyswietlono = 1 Then Wyswietlanie = 1
  End If
 
  Incr Ktory_ds
  If Ktory_ds = 7 Then Ktory_ds = 0
 
Return
'**********  Temperatura  Koniec *********
 
 
'************   Sterowanie       ***************
'***********************************************
Sterowanie:
 
 
  'alarm
  If T(1) >= T_alarm Or T(2) >= T_alarm Then
    If Buzz_en = 1 Then Buzz = Not Buzz Else Buzz = 1
  Else
    Buzz = 1
    Hword(1) = T_alarm - 50
    If T(1) <= Hword(1) And T(2) <= Hword(1) Then Buzz_en = 1
  End If
 
 
 
 
Return
'********    Sterowanie      Koniec ************

-

lok56