f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - prosty zegar +termostat gdzie błąd

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
prosty zegar +termostat gdzie błąd
Autor Wiadomość
zeos

Dołączył: 12 Sie 2009
Posty: 11
Wysłany: Czw Gru 30, 2010 11:10 pm   prosty zegar +termostat gdzie błąd

odczyt temperatury i zegarek wyświetla się na przemian godzina i temperatura lcd miga gdzie zrobiłem błąd (nie licząc kiepskiej całości )
Kod:

$regfile = "m32def.dat"                                     'deklaracja procesora, w tym wypadku Atmega32
$crystal = 16000000                                         'deklaracja cześtotlwiości pracy
                                 'Deklaracja portów od wyświetlacza LCD


Config Lcdpin = Pin , Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7

Config Lcd = 16 * 2
Config Portc = &B1000011
Config 1wire = Portc.5

         'dim definuje zmiennom (np temp)

Dim Temp As Integer , Ss As String * 6                      'String * 6 tekst może mieć do 6 znaków (textu cyfr ?)  przecinek to nic inego jak kontynuacja dim
Dim Tzad As Integer , Tzadana As String * 6                 ' as (rozmiar) np as Byte
Dim Dsid As Byte                                            'bajt 0-255
Dim Hist As Integer                                         'integer może mieć wartość -32767 - +32768
Dim Sekundy As Byte                                         '''''''''''
Dim Minuty As Byte                                          '''''''''
Dim Godziny As Byte                                         ''''
Dim Nowa_w As Byte                                          ''''''
Dim Wart_bcd As Byte






Declare Sub Pomiar                                          'Definiuje nagłówek procedury użytkownika.
Declare Sub Ustaw_t
 Declare Sub Wysw_czas



Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             'znak stopnia Celcjusza
Deflcdchar 1 , 28 , 8 , 8 , 8 , 5 , 5 , 5 , 7               'ikonka ustawionej temperatury
Deflcdchar 2 , 33 , 33 , 33 , 32 , 32 , 32 , 31 , 32        ' część ikonki przekaźnika

'Podciągnięcie portów do 1 dla obsługi klawitury
 'podciągniecie portu C.0 dla przekażnika



Portd.3 = 1 : S1 Alias Pind.3                               'przycisk nastawienia zegara zwany dalej s1  s2
Portd.2 = 1 : S2 Alias Pind.2


Portc.2 = 1 : K1 Alias Pinc.2
Portc.3 = 1 : K2 Alias Pinc.3                               'Pozwala na zdefiniowanie przyjaznej nazwy zmiennej
                                                              ' nowa_nazwa ALIAS stara_nazwa
Portc.4 = 1 : K3 Alias Pinc.4

Pk Alias Portc.0

Tzad = 250

Writeeeprom Tzad , 1                                        ' Zapisuje dane do wbudowanej pamięci EEPROM.
 Config Timer1 = Timer , Prescale = 256

 On Timer1 Odmierz_1s



Enable Interrupts       'włączamy system przerwań
Enable Timer1             'włączamy przerwanie przepełniania licznika TIMER1



  Counter1 = 68572



 Set Nowa_w
Set Portd.3
Set Portd.2






Cursor Off                                                  'schowaj kursor
Cls                                                         'Usuwa znaki z ekranu wyświetlacza LCD.
Pomiar:

Do








                                                        '  początek petli
Hist = Temp + 10                                            '+10 znaczy histereza na 1 stopien
   1wreset
   1wwrite &H55
   1wverify Dsid
   1wwrite &HBE

 Temp = 1wread(2)
   1wreset
   1wwrite &HCC
   1wwrite &H44
Waitms 100



    Temp = Temp * 10
   Temp = Temp / 16
   Ss = Str(temp)
   Ss = Format(ss , "0.0")
   Tzadana = Str(tzad)
   Tzadana = Format(tzadana , "0.0")
   Cls
   Readeeprom Tzad , 1
   If Tzad >= Hist Then
    Set Pk
    Locate 2 , 10
    Lcd "CZEKAM"
   End If

   If Tzad < Temp Then
    Reset Pk
   End If
   Locate 1 , 1
   Lcd "T:"
   Locate 1 , 4
   Lcd ; Ss ; Chr(0) ;
   Locate 2 , 1
   Lcd ; Chr(1) ; ":"
   Locate 2 , 4
   Lcd ; Tzadana ; Chr(0)

   Wait 2
   If K1 = 0 Then
    Waitms 30
    If K1 = 0 Then
     Readeeprom Tzad , 1
     Reset Pk
     Call Ustaw_t
    End If
   End If

      'koniec pomiaru temperatury



     Call Wysw_czas

If S1 = 0 Then
Waitms 25
If S1 = 0 Then

Incr Minuty
Sekundy = 0
If Minuty = 60 Then
Minuty = 0
End If
Set Nowa_w

Call Wysw_czas

Waitms 200
End If
End If

If S2 = 0 Then
Waitms 25
If S2 = 0 Then

Incr Godziny
If Godziny = 24 Then
Godziny = 0
End If
Set Nowa_w
Call Wysw_czas

Waitms 200
End If
End If



 Loop         'koniec pętli Pętla (koniec programu)

 End



 Sub Wysw_czas
If Nowa_w = 1 Then
Cls
Wart_bcd = Makebcd(godziny)
Locate 1 , 9
Lcd Bcd(wart_bcd) ; ":"
Wart_bcd = Makebcd(minuty)
Locate 1 , 12
Lcd Bcd(wart_bcd) ; ":"
Wart_bcd = Makebcd(sekundy)
Locate 1 , 15
Lcd Bcd(wart_bcd);
Reset Nowa_w
End If
End Sub


 Odmierz_1s:

Counter1 = Counter1 + 68572                                 ''''''''''

Incr Sekundy                                                '
Set Nowa_w                                                  ''''''''

If Sekundy = 60 Then
Sekundy = 0
Incr Minuty                                                 '
If Minuty = 60 Then
Minuty = 0
Incr Godziny

If Godziny = 24 Then                                        '
Godziny = 0

End If
End If                                                      '
End If


 Return








Ustaw_t:
   Waitms 150
   Cls
   Locate 1 , 1
   Lcd "Ustawienie ."
   Locate 2 , 1
   Lcd "zadanej"

   Tzadana = Str(tzad)
   Tzadana = Format(tzadana , "0.0")

   Locate 2 , 9
   Lcd Tzadana ; Chr(0)

   If K2 = 0 Then
    Waitms 150
    If K2 = 0 Then
    Tzad = Tzad + 5
     If Tzad = 500 Then
      Tzad = 0
     End If
    End If
   End If

   If K3 = 0 Then
    Waitms 150
    If K3 = 0 Then
    Tzad = Tzad - 5
     If Tzad = 0 Then
      Tzad = 500
     End If
    End If
   End If

   If K1 = 0 Then
    Waitms 600
    If K1 = 0 Then
    Writeeeprom Tzad , 1
        Waitms 150
        Cls
    Locate 1 , 1
    Lcd "Temperatura"
    Locate 2 , 1
    Lcd "ustawiona"
    Wait 1
    Call Pomiar
    End If
   End If

Goto Ustaw_t                                                'Wykonuje skok do określonej etykiety.
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Pią Gru 31, 2010 9:54 am   

Wyświetlacz Ci miga, bo masz w kodzie pełno instrukcji Cls.
Powinieneś ich używać tylko wtedy, gdy trzeba skasować CAŁY wyświetlacz.
W przeciwnym wypadku powinieneś nadpisywać niechciane treści spacjami przy okazji wyświetlania danych (np. czasu)
_________________
http://www.piotr94.net21.pl/
 
     
zeos

Dołączył: 12 Sie 2009
Posty: 11
Wysłany: Pią Gru 31, 2010 2:54 pm   

:smile: dzięki !! już załapałem teraz mogę posprzątać kod i składać dalej kombinowałem nad tym 3 godziny wychodzi 1 godzina na 1 literkę (cls)
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group