Duże cyfry na LCD 16x2 i Bascom - proste :)


Witam. Pokaże jak szybko i prosto można użyć dużych "czcionek" na popularnym wyświetlaczu alfanumerycznym. Teraz nietrudno o graficzny, ale może się komuś przyda. Zainteresowałem się tym bo moja mama, z racji wieku, niedowidzi :D
Tak teraz sterownik pokazuje temperature wody w bojlerze po naciśnieciu przycisku (standardowo wyświetla dwie linie z większa ilością danych). Można ładniejsze czcionki ustawić , ale o tym na końcu.

Co ciekawe, do wyświetlenia tych akurat czcionek trzeba tylko trzy znaki użytkownika zadeklarować na początku w programie. Reszta znaków jest już w sterowniku wyświetlacza tylko trzeba się do nich dobrać.
W Bascom możemy zdefiniować do ośmiu znaków własnych na początku programu i nie jest to ograniczenie Bascoma, a sterownika wyświetlacza! Pierwsze osiem miejsc w pamięci pozostawiono użytkownikowi dlatego możemy je w Bascom nazywać od Chr(0) do Chr(7). Na tym jednak funkcja komendy Chr() się nie kończy. W programie możemy wywołać każdy dostępny z przedziału 0 do 255 znak. Ciekawostką jest też to, że wartość może być też zmienną i obliczaną w programie.
Poniżej jest tabela wszystkich dostępnych znaków.

Z lewej strony wierszy i u góry kolumn są wartości bajtów młodszego i starszego w postaci binarnej (L=Low=0 i H=High=1) Możemy odczytać wartośći i korzystając z kalkulatora wbudowanego w Windows przekonwertować je na wartość do naszej Chr() . Przełączamy go tylko do widoku naukowego i zaznaczamy kropke przy Bin. Aktywne pozostają tylko 0 i 1.

Potem przełaczamy kropke z powrotem na Dec i mamy wynik :D
Jak widac możemy wywołac znak "stopnia" np. Celsjusza wpisując Chr(223) lub "pełną kratkę" wpisując Chr(255) Jest tam kilka ciekawych znaków które nieraz widziałem definiowane niepotrzebnie jako specjalne użytkownika.
Okazało się więc, że zeby wyświetlać tak jak teraz u mnie wystarczy trzy znaki stworzyć z poniższego obrazka. Dolną, górnąi podwójną kreskę.

Teraz listing programu:

Config Lcd = 16 * 2
Cursor Off Noblink
Cls
 
'Deflcdchar 0 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            ' strzalka w dol
'Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            ' strzalka w gore
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'kropkaduza to Chr(161)
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
 
Const Liczba = 206
 
 
Dim Pierwsza As Byte , Druga As Byte , Trzecia As Byte
Dim Help As Byte
Dim Linia_g(10) As String * 4 , Linia_d(10) As String * 4
 
 
'Cyfra 0
Linia_g(10) = Chr(255) + Chr(2) + Chr(255) + " "
Linia_d(10) = Chr(255) + Chr(3) + Chr(255) + " "
 
'Cyfra 1
Linia_g(1) = Chr(2) + Chr(255) + "  "
Linia_d(1) = Chr(3) + Chr(255) + Chr(3) + " "
 
'Cyfra 2
Linia_g(2) = Chr(4) + Chr(4) + Chr(255) + " "
Linia_d(2) = Chr(255) + Chr(3) + Chr(3) + " "
 
'Cyfra 3
Linia_g(3) = Chr(2) + Chr(4) + Chr(255) + " "
Linia_d(3) = Chr(3) + Chr(3) + Chr(255) + " "
 
'Cyfra 4
Linia_g(4) = Chr(255) + Chr(3) + Chr(255) + " "
Linia_d(4) = "  " + Chr(255) + " "
 
'Cyfra 5
Linia_g(5) = Chr(255) + Chr(4) + Chr(4) + " "
Linia_d(5) = Chr(3) + Chr(3) + Chr(255) + " "
 
'Cyfra 6
Linia_g(6) = Chr(255) + Chr(4) + Chr(4) + " "
Linia_d(6) = Chr(255) + Chr(3) + Chr(255) + " "
 
'Cyfra 7
Linia_g(7) = Chr(2) + Chr(2) + Chr(255) + " "
Linia_d(7) = "  " + Chr(255) + " "
 
'Cyfra 8
Linia_g(8) = Chr(255) + Chr(4) + Chr(255) + " "
Linia_d(8) = Chr(255) + Chr(3) + Chr(255) + " "
 
'Cyfra 9
Linia_g(9) = Chr(255) + Chr(4) + Chr(255) + " "
Linia_d(9) = Chr(3) + Chr(3) + Chr(255) + " "
 
 
 
 Trzecia = Liczba Mod 10
 If Trzecia = 0 Then Trzecia = 10
 Help = Liczba / 10
 Pierwsza = Help / 10
 If Pierwsza = 0 Then Pierwsza = 10
 Druga = Help Mod 10
 If Druga = 0 Then Druga = 10
 
Cls
 
 Waitms 100
 
 
 Lcd " " ; Linia_g(pierwsza) ; Linia_g(druga) ; " " ; Linia_g(trzecia) ; Chr(223) ; "C"
 Lowerline
 Lcd " " ; Linia_d(pierwsza) ; Linia_d(druga) ; Chr(161) ; Linia_d(trzecia)
 
 End

Wyświetlenie znaku w tej konfiguracji czyli na takim wyświetlaczu kosztuje cztery pola w bok (trzy i odstęp) i oczywiście dwia w dół. Zadeklarowane są więc dwie zmienne typu String z *4 czyli o długości czterech znaków. Dwie, bo dwie linie wyświetlacza.
Zmienne typu String są "tekstowymi" i nie wykonuje się na nich działań więc zapis "1+2" tak się wyświetli a nie doda :D
Patrząc więc na grafikę wyświetlanej liczby składamy sobie kolejne duże cyfry jako sekwencja znaków na górnej i dolnej linii wyświetlacza. Można w ten sposób namalowac różne inne rzeczy.
Na potrzeby testowania i przykładu ustawiłem tam stałą którą można dowolnie sobie zmienić. U mnie miało dzielić zmienną typu Word od wartości temperatury więc jest trzycyfrowa. Zostaje tylko sformatować sobie swoją liczbę do wyświetlenia dzieląc na kolejne , osobne cyfry (tu tylko przykład) po czym odpowiednio wyświetlić, czyli wcisnąć przecinek i znak stopnia.

Teraz smaczki :D
Tak można to zrobić tą samą metodą jednak większa jest ilość znaków użytkownika.

Idąc dalej można korzystając z Locate wyświetlać np.jeden lub dwia duże znaki a reszta może być dwuwierszowa , mała.

Na koniec jeszcze jedna ładna czcionka.

Zdaje sobie sprawe że to nie nowość ale jeszcze przedwczoraj tego nie wiedziałem i nigdzie nie było to tak opisane by można było od razu skorzystać. Życzę miłego dnia :D




Portret użytkownika EDC

Cd. Duże cyfry na LCD 2x16

Witam. W wolnej chwili zrobiłem upgrade :D Te czcionki są, nie dośc że ładniejsze, to węższe. Nie potrzebują więc odstępu między sobą. W programie zmienne String można przez to skrócić z czterech do trzech znaków.
Tak teraz wyglądają i pomieszane sa duże z małymi. Pod zdjęciem listing przykładu z wpisanymi wartościami dla czcionek.

Config Lcd = 16 * 2
Cursor Off Noblink
Cls
 
'Deflcdchar 0 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            'strzalka w dol
'Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            'strzalka w gore
 
Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'duza kropka to Chr(161)
'up to Chr(162)
'down to Chr(163)
'strzalka w prawo to Chr(126)
'strzalka w lewo to Chr(127)
Dim Pierwsza As Byte , Druga As Byte
Dim Test As Byte , Linia_g(10) As String * 3 , Linia_d(10) As String * 3
 
Test = 28
Flaga_menu = 1                                              'by wyswietlic tylko raz
 
 
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
 
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
 
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
 
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
 
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
 
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
 
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
 
Do
 
If Flaga_menu = 1 Then
            Cls
              Pierwsza = Test / 10
              If Pierwsza = 0 Then Pierwsza = 10
              Druga = Test Mod 10
              If Druga = 0 Then Druga = 10
             Lcd "PIEC:" ; "55" ; Chr(223)
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(219)
             Lowerline
             Lcd Chr(0) ; " BOJLER" ; Chr(126)
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
      Flaga_menu = 0
           End If
 
 
 
Loop
End

-

BARTek
Moja strona

Portret użytkownika kaktus

(-;

Nie pozostaje nic innego jak tylko powinszować pomysłu ;-D

-

"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".

Portret użytkownika EDC

MENU dla LCD

Mam dziś taki "mały smaczek" :D
W wielu budowanych urządzeniach potrzebna jest interakcja z użytkownikiem czyli Menu.
Czasem parametrów ustawianych jest wiele i jest dużo pisaniny :P
Gdyby ktos potrzebował poprzez kontekstowe (np.rozwijane) menu ustawić Dzień,Miesiąc,itd do tego czasy nadmuchu pieca, różne przełaczniki Czas letni /zimowy do tego różne parametry można ustawiać z "bargrafem" (taka linijka :P)
To właśnie wyszła nowa wersja programu który to za nas "odwala"
Można nawet znaki wpisywać co daje możliwość np. wpisania nazwy serwisu lub nr.telefonu
Wszystko klika sie w Windowsie z parametrami min/max i skokiem :> co jest ważne..np. naciśniecie spowoduje dodanie 10
Po menu "chodzi"się MultiJog`iem (impulsatorek czy tam enkoder) albo trzema przyciskami.
Strona z programem, FAQ i prezentacją video jest TUTAJ :)
Życzę miłej lektury. Jakby trza było to może jakiegoś Tutoriala sie zrobi :P
Jak zamówie nowy wyświetlacz to klikne jakieś foty ;)

PS.Tylko proszę nie pisać że okupione to jest jakimś większym kodem. Jak ktoś nie potrafi coś krótkiego napisać sam to weźmie zamiast ATmega8 ATmege328 i śmiga ;)

-

BARTek
Moja strona

Portret użytkownika EDC

Ciasno we Flash? Zobacz co można przenieść do Eeprom

Witam. Miałem znów trochę czasu i dopracowałem rozwiązanie przeniesienia "najwięcej ważących" danych do Eepromu który najczęściej jest używany w małym stopniu.
Definicje znaków użytkownika, wartości stałe i nawet słowa z Menu mozna tam śmiało przenieść co widac na załaczonym obrazku. Listing to tylko przykład bo załadować można dużo więcej. To przykładowa pamięć ATmega8 wykorzystana dopiero w połowie a sam początek (te zera) to miejsce na dane (adresy DS18B20 w tym przypadku i kilka zmiennych). Druga połowe można sobie zapisać budując Menu. Zachęcam do przetestowania w symulatorze bo się ruszają :D

Poniżej listing który po skasowania dyrektywy $sim generuje też plik EEP który należy wgrać do procesora przy programowaniu. Dopisując jakieś słowo trzeba dodać osiem do ostatniego adresu, a do następnego jego długość + 1, bo Stringi mają o jeden Bajt większa długość w pamięci.

 '*************************************************************
 '*           Duże czcionki i Text Strings z EEproma          *
 '*            BARTek EDC niveasoft tlen pl                   *
 '*************************************************************
 $sim                                                       ' For the Bascom simulator only
'$regfile = "m328pdef.dat"
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 128
$swstack = 256
$framesize = 256
 
Const Atmega328 = 0
 
#if Atmega328 = 1
'Config Timer2 = Timer , Async = Off , Prescale = 256 , Compare_a = Disconnect , Compare_b = Disconnect , Clear Timer = 1
'Enable Compare2a : On Compare2a Timer2_isr : Compare2a = 124
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portc.0
Config Lcd = 20 * 4
#else
'Config Timer2 = Timer , Prescale = 256 , Compare = Disconnect , Clear Timer = 1
'Enable Compare2 : On Compare2 Timer2_isr : Compare2 = 124
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
#endif
Cursor Off Noblink
 
Dim Pierwsza As Byte , Druga As Byte
Dim Linia_g(10) As String * 3 , Linia_d(10) As String * 3
Dim Hword(2) As Word , T(2) As Word
Dim N As Byte , L(3) As Byte , My_temp As Byte , Address As Word
Dim Temp_text As String * 7
 
T(1) = 100
T(2) = 100
 
Const Piec = 204                      'adres pierwszego bajtu stringa
Const Bojler = 212
 
Gosub Set_characters
Gosub Get_big
Gosub Draw_main
 
Wait 1
 
Do
T(1) = T(1) + 10
T(2) = T(2) + 10
If T(1) > 990 Then T(1) = 100
If T(2) > 990 Then T(2) = 100
Gosub Update_main
 
Waitms 400
Loop
End
'********************* END *****************************
Draw_main: 'rysuje glówną planszę
  Cls
   Readeeprom Temp_text , Piec
  Lcd Temp_text
  Lowerline
   Readeeprom Temp_text , Bojler
  Lcd Chr(0) ; Temp_text ; Chr(126)
Return
 
Update_main: 'uaktualnia wartosci na bieżąco
  Locate 1 , 6
   Hword(1) = T(1) / 10
   Lcd Hword(1) ; Chr(223)                                  'pokaz temp. pieca
 
   Hword(2) = T(2) / 10
   Pierwsza = Hword(2) / 10
    If Pierwsza = 0 Then Pierwsza = 10
   Druga = Hword(2) Mod 10
    If Druga = 0 Then Druga = 10
 
       Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(219)       'pokaz temp bojlera
       Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)         'pokaz temp bojlera
Return
 
Set_characters:                'wrzuca do wyswietlacza znaki użytkownika
My_temp = &H40
!LDS _temp1,{My_temp}
!Rcall _Lcd_control
For Address = 80 To 143
Readeeprom My_temp , Address
!LDS _temp1, {My_temp}
!Rcall _Write_lcd
Next Address
Return
 
Get_big:   'ładuje wartości kolejnych znaków potrzebnych do dużych czcionek 
Address = 144
For My_temp = 1 To 20
 For N = 1 To 3
  Readeeprom L(n) , Address
  Incr Address
 Next N
  If My_temp <= 10 Then
   Linia_g(my_temp) = Chr(l(1)) + Chr(l(2)) + Chr(l(3))
  Else
   N = My_temp - 10
   Linia_d(n) = Chr(l(1)) + Chr(l(2)) + Chr(l(3))
  End If
Next My_temp
Cls
Return
 
$eeprom
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0  'miejsce dedykowane, specjalnie wolne
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32                   ' kranik
Data 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28                  ' prawy naroznik
Data 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32                  ' gorna kreseczka
Data 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31                  ' dolna kreseczka
Data 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31                  ' dwie kreseczki
Data 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28                  ' prawa belka
Data 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7                    ' lewa belka
Data 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7                      ' lewy naroznik
Data 254 , 254 , 5 , 7 , 4 , 5 , 254 , 4 , 5 , 6 , 3 , 5 , 6 , 4 , 1
Data 6 , 4 , 1 , 6 , 2 , 5 , 6 , 4 , 5 , 6 , 4 , 5 , 6 , 2 , 5       'linia_g(1-10)
Data 254 , 254 , 5 , 6 , 3 , 3 , 254 , 3 , 5 , 254 , 254 , 5 , 3 , 3 , 5
Data 6 , 3 , 5 , 254 , 254 , 5 , 6 , 3 , 5 , 3 , 3 , 5 , 6 , 3 , 5       'linia_d(1-10)
Data "PIEC:--"
Data " BOJLER"
$data    '** TU ZOSTAŁO MIEJSCA NA 20 SŁÓW **

Ja zakupiłem dwa moduły RFM12B i od dziś będe się bawił w budowę przenośnego pilota z wyswietlaczem i dwukierunkowa transmisją :D

Życzę miłego dnia

-

BARTek
Moja strona

Portret użytkownika gosc

Witam jak uporałeś się z

Witam jak uporałeś się z migotaniem dolnej linijki w wyświetlaczu ??

Portret użytkownika gosc

Witam jak uporałeś się z

Witam jak uporałeś się z migotaniem dolnej linijki w wyświetlaczu ???

Portret użytkownika EDC

Odp. Duże cyfry na wyświetlaczu 2x16

Mi nic nie migocze. Może używasz innego procesora i usunąłeś zmienione względem domyślnych Bascoma wpisy dotyczące Hwstack, Swstack i Framesize? Operacje na zmiennych typu String wymagają dłuższej ramki. Wpisz przynajmniej HW 128, SW 64, FR 64 jeśli używasz ustawień z IDE.

-

BARTek
Moja strona

Portret użytkownika gosc

Mam taki o to kod i problem

Mam taki o to kod i problem bo migocze nadal dolna linijka przy odświeżaniu "czyszczeniu LCD "
i tak na marginesie bawiłeś się może modułami 433MHz
jakis nawet prymitywny kod szukam by to uruchomic i sie pobawic

http://naforum.zapodaj.net/b9cdff1acdfa.jpg.html

$hwstack = 128
$swstack = 64
$framesize = 64
 
$regfile = "m8def.dat"
$crystal = 8000000
 
 
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5
  Deflcdchar 0 , 24 , 24 , 32 , 3 , 4 , 4 , 4 , 3           ' ZNAK Stopni
Cursor Off
  Config Lcd = 16 * 2
Cursor Off Noblink
Cls
 
'Deflcdchar 0 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            'strzalka w dol
'Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            'strzalka w gore
 
Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'duza kropka to Chr(161)
'up to Chr(162)
'down to Chr(163)
'strzalka w prawo to Chr(126)
'strzalka w lewo to Chr(127)
Dim Pierwsza As Byte , Druga As Byte
Dim Test As Byte , Linia_g(10) As String * 3 , Linia_d(10) As String * 3
  Dim Flaga_menu As Byte
Test = 28
Flaga_menu = 1                                              'by wyswietlic tylko raz
 Config 1wire = Portb.2
Dim Piec As Integer
Dim B As Byte
Dim C As Byte
Dim Ter As Byte
Dim Bd(9) As Byte
Dim Ulamek As Integer
 
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
 
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
 
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
 
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
 
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
 
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
 
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
 
Do
 
      Gosub Ds18b20
 
If Flaga_menu = 1 Then
            Cls
              Pierwsza = Test / 10
              If Pierwsza = 0 Then Pierwsza = 10
              Druga = Test Mod 10
              If Druga = 0 Then Druga = 10
             Lcd "PIEC:" ; "55" ; Chr(223)
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(219)
             Lowerline
             Lcd Chr(0) ; " BOJLER" ; Chr(126)
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
      Flaga_menu = 0
           End If
 
 
 
Loop
 
Ds18b20:
1wreset
 
1wwrite &HCC
 
1wwrite &H44
Waitms 750
 
1wreset
1wwrite &HCC
'numeru)
1wwrite &HBE
Bd(1) = 1wread()
'do 1 elementu tablicy T
Bd(2) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec = Makeint(bd(1) , Bd(2))
Piec = Piec * 10
Piec = Piec / 16
Ulamek = Piec Mod 10
Piec = Piec / 10
Test = Piec                  ''''''   <------------   TEST  ===  PIEC
 Flaga_menu = 1
Return
 
End

Portret użytkownika EDC

Odp. Duże cyfry na wyświetlaczu 2x16

Proszę, łap. Powinno działać.

$hwstack = 128
$swstack = 64
$framesize = 64
 
$regfile = "m8def.dat"
$crystal = 8000000
 
 
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5
  Deflcdchar 0 , 24 , 24 , 32 , 3 , 4 , 4 , 4 , 3           ' ZNAK Stopni
 
Cursor Off Noblink
Cls
 
'Deflcdchar 0 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            'strzalka w dol
'Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            'strzalka w gore
 
Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'duza kropka to Chr(161)
'up to Chr(162)
'down to Chr(163)
'strzalka w prawo to Chr(126)
'strzalka w lewo to Chr(127)
Dim Pierwsza As Byte , Druga As Byte
Dim Test As Byte , Linia_g(10) As String * 3 , Linia_d(10) As String * 3
  Dim Flaga_menu As Byte
Test = 28
Flaga_menu = 1                                              'by wyswietlic tylko raz
 Config 1wire = Portb.2
Dim Piec As Integer
Dim B As Byte
Dim C As Byte
Dim Ter As Byte
Dim Bd(9) As Byte
Dim Ulamek As Integer
 
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
 
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
 
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
 
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
 
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
 
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
 
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &HBE
'czekasz tylko raz
 Waitms 500
 
Lcd "PIEC:" ; "55" ; Chr(223)
Lowerline
Lcd Chr(0) ; " BOJLER" ; Chr(126)
 
'*** START ***
Do
 
      Gosub Ds18b20
 
 If Flaga_menu = 1 Then
 
   Pierwsza = Test / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(219)
 
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
 
      Flaga_menu = 0
 End If
 
 Wait 1
Loop
End
'*** KONIEC ***
 
Ds18b20:
 
1wreset
 1wwrite &HCC
 1wwrite &HBE
Bd(1) = 1wread()
'do 1 elementu tablicy T
Bd(2) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec = Makeint(bd(1) , Bd(2))
Piec = Piec * 10
Piec = Piec / 16
Ulamek = Piec Mod 10
Piec = Piec / 10
Test = Piec                                                 ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &H44
 
Return

Instrukcja Cls powoduje czyszczenie wszystkich danych danych w wyświetlaczu i używa się jej tylko na początku programu do inicjalizacji wyświetlacza lub potem sporadycznie w programie na przykład gdy przechodzisz do innej planszy Menu gdzie prędkość nie ma takiego znaczenia. Wyświetlacz LCD ma linię WR najczęściej zwartą do masy. To linia służąca do sprawdzania czy LCD jest gotowy na następne dane. Jeśli jest niewykorzystywana to dane sa specjalnie wysyłane powoli by wyświetlacz napewno zdążył. Nie używa się więc Instrukcji Cls w pętlach. Jeśli potrzebujesz odświeżyć dane na LCD to używasz Locate.
Z tym DS18B20 tez pozmieniałem żebyś nie musiał tam czekać na wynik.

Co do modułów. Te tanie nie lubią "krótkich danych" Na początku zawsze są śmieci. Trzeba budować dłuższe ramki z "dummy bytes", albo je powtarzać i analizować w odbiorniku dopiero kolejne.

-

BARTek
Moja strona

Portret użytkownika gosc

WSZYSTKO działa idealnie

WSZYSTKO działa idealnie dzięki za pomoc !

Mam prośbę jak możesz odezwij się do mnie na E-maila mam kilka pytań w sprawie 433 oraz zwykłej transmisji kablowej może będziesz w stanie mi pomóc .

Portret użytkownika gosc

Quote:Życzę miłej lektury.

Quote:
Życzę miłej lektury. Jakby trza było to może jakiegoś Tutoriala sie zrobi :P

Dałoby radę zrobić jakiegoś tutoriala?
Pozdrawiam

Portret użytkownika gosc

Prosze o pomoc ujemne temperatury

Witam prosze o pomoc od razu mówię jestem samoukiem program posklejałem z kilku projektów wiec nie pytajcie czemu tak bo i tak nie wiem, projekt jest ok jak dla mnie tylko potrzebuje ujemnych temperatur, poniżej kod z góry dziękuje

$hwstack = 128
$swstack = 64
$framesize = 64
$regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
 
Config Lcd = 16 * 2                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)
 
'*************************************WAŻNE**********************************************
'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
Deflcdchar 0 , 24 , 24 , 32 , 3 , 4 , 4 , 4 , 3             ' ZNAK Stopni
 
Cursor Off Noblink
Cls
 
'Deflcdchar 0 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            'strzalka w dol
'Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            'strzalka w gore
 
Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
 
 
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'duza kropka to Chr(161)
'up to Chr(162)
'down to Chr(163)
'strzalka w prawo to Chr(126)
'strzalka w lewo to Chr(127)
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Pierwsza As Byte , Druga As Byte
Dim Test As Byte , Linia_g(10) As String * 3 , Linia_d(10) As String * 3
Dim Test2 As Byte
 
  Dim Flaga_menu As Byte
Test = 28
Flaga_menu = 1                                              'by wyswietlic tylko raz
 Config 1wire = Portd.5
 
Dim Piec As Integer
Dim Piec1 As Integer
Dim B As Byte
Dim C As Byte
Dim Ter As Byte
Dim Bd(9) As Byte
Dim Ulamek As Integer
Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext()
 
 
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
 
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
 
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
 
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
 
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
 
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
 
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &HBE
'czekasz tylko raz
 Waitms 500
 
'*** START ***
Do
 
      Gosub Ds18b20
 
 If Flaga_menu = 1 Then
 
   Pierwsza = Test / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 2
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(219)
 
             Locate 2 , 2
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
 
 
 
      Pierwsza = Test2 / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test2 Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(219)
 
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
 
               Flaga_menu = 0
 
 
 End If
 
 Wait 1
Loop
End
'*** KONIEC ***
 
Ds18b20:
 
1wreset
 1wwrite &HCC
   1wverify Dsid1(1)
 1wwrite &HBE
Bd(1) = 1wread()
'do 1 elementu tablicy T
Bd(2) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec = Makeint(bd(1) , Bd(2))
Piec = Piec * 10
Piec = Piec / 16
 
 
Piec = Piec / 10
Test = Piec                                                 ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
 
 1wreset
 1wwrite &HCC
   1wverify Dsid2(1)
 1wwrite &HBE
Bd(3) = 1wread()
'do 1 elementu tablicy T
Bd(4) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec1 = Makeint(bd(3) , Bd(4))
Piec1 = Piec1 * 10
Piec1 = Piec1 / 16
 
Piec1 = Piec1 / 10
Test2 = Piec1                                               ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
 
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &H44
 
Return

Portret użytkownika EDC

Odp. Prosze o pomoc ujemne temperatury

Się zastanawiałem jak Ci tu odpowiedzieć bo trochę trudno wywnioskować czy chcesz mieć dwa czujniki czy jeden.
Napisz najlepiej ile masz/chcesz mieć czujników. Czy minus ma się pokazywać na wyświetlaczu (potrzebne miejsce i przesunięte wszystkie cyfry).

-

BARTek
Moja strona

Portret użytkownika gosc

wiec tak ostatecznie ma to

wiec tak ostatecznie ma to wyglądać tak jak w tym kodzie ma na przemiennie pokazywać się temperatura in out wraz ze znakiem - dla obu temperatur, ewentualnie jeśli się da to i dziesiętne temperatur np 23.5 stopnia i -23.5 stopnia oba czujniki by działały w temp minusowej, chciałem taki termometr zamontować do samochodu. Z góry dziękuję.

$hwstack = 128
$swstack = 64
$framesize = 64
$regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
 
Config Lcd = 16 * 2                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)
 
'*************************************WAŻNE**********************************************
'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
Deflcdchar 0 , 24 , 24 , 32 , 3 , 4 , 4 , 4 , 3             ' ZNAK Stopni
 
Cursor Off Noblink
Cls
 
'Deflcdchar 0 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            'strzalka w dol
'Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            'strzalka w gore
 
Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
 
 
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'duza kropka to Chr(161)
'up to Chr(162)
'down to Chr(163)
'strzalka w prawo to Chr(126)
'strzalka w lewo to Chr(127)
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Pierwsza As Byte , Druga As Byte
Dim Test As Byte , Linia_g(10) As String * 3 , Linia_d(10) As String * 3
Dim Test2 As Byte
 
  Dim Flaga_menu As Byte
Test = 28
Flaga_menu = 1                                              'by wyswietlic tylko raz
 Config 1wire = Portd.5
 
Dim Piec As Integer
Dim Piec1 As Integer
Dim B As Byte
Dim C As Byte
Dim Ter As Byte
Dim Bd(9) As Byte
Dim Ulamek As Integer
Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext()
 
 
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
 
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
 
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
 
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
 
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
 
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
 
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &HBE
'czekasz tylko raz
 Waitms 500
 
 
 
'*** START ***
Do
 
      Gosub Ds18b20
 
 If Flaga_menu = 1 Then
 
   Pierwsza = Test / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(223)
 
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
 
             Locate 2 , 1
   Lcd "IN:" ;
 
    Wait 2
    Cls
 
 
 
      Pierwsza = Test2 / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test2 Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(223)
 
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
                          Locate 2 , 1
   Lcd "OUT: " ;
 
               Flaga_menu = 0
 
                Wait 2
    Cls
 
 
 End If
 
 
Loop
End
'*** KONIEC ***
 
Ds18b20:
 
1wreset
 1wwrite &HCC
   1wverify Dsid1(1)
 1wwrite &HBE
Bd(1) = 1wread()
'do 1 elementu tablicy T
Bd(2) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec = Makeint(bd(1) , Bd(2))
Piec = Piec * 10
Piec = Piec / 16
 
 
Piec = Piec / 10
Test = Piec                                                 ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
 
 1wreset
 1wwrite &HCC
   1wverify Dsid2(1)
 1wwrite &HBE
Bd(3) = 1wread()
'do 1 elementu tablicy T
Bd(4) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec1 = Makeint(bd(3) , Bd(4))
Piec1 = Piec1 * 10
Piec1 = Piec1 / 16
 
Piec1 = Piec1 / 10
Test2 = Piec1                                               ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
 
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &H44
 
Return

Portret użytkownika gosc

Prosze o pomoc ujemne temperatury

Ostatecznie ma to wyglądać tak ja w tym kodzie, Temperatura in i out ma pokazywać się naprzemiennie, ale jeśli by się dało to bardzo bym prosił by termometr pokazywał ujemne temperatury na obu czujnikach oraz był w formacie np 23.5 stopnia i -23.5 stopnia z góry dziękuje. Nie wiem czemu ale po kliknięciu zachowaj wiadomość nie pokazuje się ona na tym forum

$hwstack = 128
$swstack = 64
$framesize = 64
$regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
 
Config Lcd = 16 * 2                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)
 
'*************************************WAŻNE**********************************************
'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
Deflcdchar 0 , 24 , 24 , 32 , 3 , 4 , 4 , 4 , 3             ' ZNAK Stopni
 
Cursor Off Noblink
Cls
 
'Deflcdchar 0 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            'strzalka w dol
'Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            'strzalka w gore
 
Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
 
 
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'duza kropka to Chr(161)
'up to Chr(162)
'down to Chr(163)
'strzalka w prawo to Chr(126)
'strzalka w lewo to Chr(127)
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Pierwsza As Byte , Druga As Byte
Dim Test As Byte , Linia_g(10) As String * 3 , Linia_d(10) As String * 3
Dim Test2 As Byte
 
  Dim Flaga_menu As Byte
Test = 28
Flaga_menu = 1                                              'by wyswietlic tylko raz
 Config 1wire = Portd.5
 
Dim Piec As Integer
Dim Piec1 As Integer
Dim B As Byte
Dim C As Byte
Dim Ter As Byte
Dim Bd(9) As Byte
Dim Ulamek As Integer
Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext()
 
 
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
 
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
 
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
 
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
 
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
 
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
 
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &HBE
'czekasz tylko raz
 Waitms 500
 
 
 
'*** START ***
Do
 
      Gosub Ds18b20
 
 If Flaga_menu = 1 Then
 
   Pierwsza = Test / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(223)
 
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
 
             Locate 2 , 1
   Lcd "IN:" ;
 
    Wait 2
    Cls
 
 
 
      Pierwsza = Test2 / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test2 Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(223)
 
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
                          Locate 2 , 1
   Lcd "OUT: " ;
 
               Flaga_menu = 0
 
                Wait 2
    Cls
 
 
 End If
 
 
Loop
End
'*** KONIEC ***
 
Ds18b20:
 
1wreset
 1wwrite &HCC
   1wverify Dsid1(1)
 1wwrite &HBE
Bd(1) = 1wread()
'do 1 elementu tablicy T
Bd(2) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec = Makeint(bd(1) , Bd(2))
Piec = Piec * 10
Piec = Piec / 16
 
 
Piec = Piec / 10
Test = Piec                                                 ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
 
 1wreset
 1wwrite &HCC
   1wverify Dsid2(1)
 1wwrite &HBE
Bd(3) = 1wread()
'do 1 elementu tablicy T
Bd(4) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec1 = Makeint(bd(3) , Bd(4))
Piec1 = Piec1 * 10
Piec1 = Piec1 / 16
 
Piec1 = Piec1 / 10
Test2 = Piec1                                               ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
 
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &H44
 
Return

Portret użytkownika gosc

Wiec tak docelowo ma to

Wiec tak docelowo ma to wyglądać tak jak w tym kodzie, temperatura ma się pokazywać naprzemiennie in out
z tym, żeby oba czujniki działały w minusowej temperaturze, i najlepiej pokazywały sie w formacie np 23.5stopnia i -23.5stopnia, taki termometr chciałem zastosować do samochodu. Z góry dziękuję. Nie wiem czemu ale pisze już 3 raz i wypowiedź moja się nie chce pokazac

$hwstack = 128
$swstack = 64
$framesize = 64
$regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
$crystal = 1000000                                          'deklaracja cześtotlwiości pracy (wew oscylator 1MHz w zupełności wystarcza)
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
 
Config Lcd = 16 * 2                                         'ustawiamy typ wyświetlacza (soft jest dostosowany do pracy z wyświetlaczem 2x20, przy pracy z innym wyświetlaczem trzeba będzie skorygować wyświetlanie znaków)
 
'*************************************WAŻNE**********************************************
'Pamiętać o podłączeniu rezystora podciągającego o wartości 4.7kohm między linią DQ a VCC
Deflcdchar 0 , 24 , 24 , 32 , 3 , 4 , 4 , 4 , 3             ' ZNAK Stopni
 
Cursor Off Noblink
Cls
 
'Deflcdchar 0 , 32 , 4 , 4 , 4 , 21 , 14 , 4 , 32            'strzalka w dol
'Deflcdchar 1 , 32 , 4 , 14 , 21 , 4 , 4 , 4 , 32            'strzalka w gore
 
Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
 
 
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'duza kropka to Chr(161)
'up to Chr(162)
'down to Chr(163)
'strzalka w prawo to Chr(126)
'strzalka w lewo to Chr(127)
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Pierwsza As Byte , Druga As Byte
Dim Test As Byte , Linia_g(10) As String * 3 , Linia_d(10) As String * 3
Dim Test2 As Byte
 
  Dim Flaga_menu As Byte
Test = 28
Flaga_menu = 1                                              'by wyswietlic tylko raz
 Config 1wire = Portd.5
 
Dim Piec As Integer
Dim Piec1 As Integer
Dim B As Byte
Dim C As Byte
Dim Ter As Byte
Dim Bd(9) As Byte
Dim Ulamek As Integer
Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext()
 
 
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
 
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
 
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
 
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
 
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
 
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
 
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &HBE
'czekasz tylko raz
 Waitms 500
 
 
 
'*** START ***
Do
 
      Gosub Ds18b20
 
 If Flaga_menu = 1 Then
 
   Pierwsza = Test / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(223)
 
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
 
             Locate 2 , 1
   Lcd "IN:" ;
 
    Wait 2
    Cls
 
 
 
      Pierwsza = Test2 / 10
    If Pierwsza = 0 Then Pierwsza = 10
     Druga = Test2 Mod 10
    If Druga = 0 Then Druga = 10
 
             Locate 1 , 10
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; Chr(223)
 
             Locate 2 , 10
             Lcd Linia_d(pierwsza) ; Linia_d(druga)
                          Locate 2 , 1
   Lcd "OUT: " ;
 
               Flaga_menu = 0
 
                Wait 2
    Cls
 
 
 End If
 
 
Loop
End
'*** KONIEC ***
 
Ds18b20:
 
1wreset
 1wwrite &HCC
   1wverify Dsid1(1)
 1wwrite &HBE
Bd(1) = 1wread()
'do 1 elementu tablicy T
Bd(2) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec = Makeint(bd(1) , Bd(2))
Piec = Piec * 10
Piec = Piec / 16
 
 
Piec = Piec / 10
Test = Piec                                                 ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
 
 1wreset
 1wwrite &HCC
   1wverify Dsid2(1)
 1wwrite &HBE
Bd(3) = 1wread()
'do 1 elementu tablicy T
Bd(4) = 1wread()
'do 2 elementu tablicy T
1wreset
Piec1 = Makeint(bd(3) , Bd(4))
Piec1 = Piec1 * 10
Piec1 = Piec1 / 16
 
Piec1 = Piec1 / 10
Test2 = Piec1                                               ''''''   <------------   TEST  ===  PIEC
 
 Flaga_menu = 1
 
 
'niech DS przygotuje odczyt
1wreset
 1wwrite &HCC
 1wwrite &H44
 
Return

Portret użytkownika gosc

haha teraz to się pokazały 3

haha teraz to się pokazały 3 na raz proszę administratora o usunięcie

Portret użytkownika EDC

Podwójny termometr z dużymi cyframi

Proszę kolego. Możesz oczywiście dopracować szczegóły. Nie wyświetlać wiodącego zera, albo uzależnić wybór czujnika od przycisku (wystarczy obrócić bit In_out).
Wyświetla temperaturę z dokładnością jednej cyfry po przecinku :) Temperatury ujemne przetestowane na kostce lodu.
Procesor dowolny, wyświetlacz też.

'### PODWÓJNY TERMOMETR Z DUŻYMI CYFRAMI ###
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 128
$swstack = 64
$framesize = 64
 
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0       ', Wr = Portc.3
Config Lcd = 20 * 4
 
'Deflcdchar 0 , 32 , 14 , 4 , 20 , 30 , 17 , 16 , 32         ' kranik
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
 
Cursor Off
Cls
 
'stopien to Chr(223)
'caly kursor to Chr(255)
'duzy stopien to Chr(219)
'duza kropka to Chr(161)
'up to Chr(162)
'down to Chr(163)
'strzalka w prawo to Chr(126)
'strzalka w lewo to Chr(127)
 
Config 1wire = Portc.5
 
Dim Pierwsza As Word , Druga As Word , Trzecia As Word
Dim Linia_g(10) As String * 3 , Linia_d(10) As String * 3
Dim Dsid1(8) As Byte , Dsid2(8) As Byte
Dim N As Byte
Dim T As Integer
Dim Minus As Bit , In_out As Bit
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
 
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
 
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
 
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
 
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
 
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
 
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
 
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
 
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
 
'to wyświetla na 3sec wykryte czujniki
'For N = 1 To 8
' Lcd Hex(dsid1(n))
'Next
 
'Lowerline
 
'For N = 1 To 8
' Lcd Hex(dsid2(n))
'Next
 
'przygotuj odczyt
1wreset
   1wwrite &HCC
   1wwrite &H44
     Waitms 200                                             'poczekaj na konwersje
'czysci jesli wyswietlalo czujniki
'Wait 3
'Cls
 
Do
 
 
 1wreset
  1wwrite &H55
  If In_out = 0 Then                                        'czujnik 1 albo 0
   1wwrite Dsid1(1) , 8
  Else
   1wwrite Dsid2(1) , 8
  End If
   1wwrite &HBE
   T = 1wread(2)
   Minus = T.15
   T = Abs(t)
   T = T * 10
   T = T / 16
  1wreset
   1wwrite &HCC                                             'obydwa czujniki przygotuja odczyt
   1wwrite &H44
 
  Locate 1 , 1
 If In_out = 0 Then Lcd "IN " Else Lcd "OUT"
 
  Locate 2 , 2
 If Minus = 1 Then Lcd "-" Else Lcd "+"
 
  Trzecia = T Mod 10
   If Trzecia = 0 Then Trzecia = 10
  Pierwsza = T / 10
  Druga = Pierwsza Mod 10
   If Druga = 0 Then Druga = 10
  Pierwsza = Pierwsza / 10
   If Pierwsza = 0 Then Pierwsza = 10
 
            Locate 1 , 4
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; " " ; Linia_g(trzecia) ; Chr(219)
 
            Locate 2 , 4
             Lcd Linia_d(pierwsza) ; Linia_d(druga) ; Chr(161) ; Linia_d(trzecia)
 
 
  Wait 10
  Toggle In_out
 
Loop
End

Miłego dnia :)

-

BARTek
Moja strona

Portret użytkownika gosc

oo super o to mi chodziło

oo super o to mi chodziło tylko jest mały problem, temp powyżej 25stopni pokazuje głupoty np 00.8 co tu poprawić czy to wina Dsów??

Portret użytkownika EDC

Odp.Podwójny termometr z dużymi cyframi

No bo to w nocy było i myślenie nie te :) Zmieniłem na Word w Pierwsza, Druga i Trzecia (zmieniłem tu na stronie też) i przetestowałem na wylocie chłodzenia laptopa :D Już pokazuje 37,3

Miłego użytkowania.

-

BARTek
Moja strona

Portret użytkownika gosc

ok Lux wszystko już działa

ok Lux wszystko już działa tak jak powinno, wielkie dzięki, pozdrawiam i wesołych świąt!

Portret użytkownika gosc

Witam serdecznie...Mam pytanie jak nie wyświetlac zera wiodącego

Witam serdecznie...Mam pytanie jak nie wyświetlac zera wiodącego w tym programie?

Portret użytkownika EDC

Odp. Zero wiodące

Można to zrobić na wiele sposobów ale poniższe powinno załatwić sprawę. Sprowadza się do dodania pustych znaków zdefiniowanych jako jedenasta cyfra. Tak by by wynik "stał w miejscu" gdy zmienia się długość napisu. Wszystko zależy od założeń i tego co kto lubi. Trzeba mieć miejsce na inne cyfry z przodu. Ja uważam że to denerwujące kiedy wynik się przesuwa (krótszy - dłuższy jeśli temp na zewnątrz jednocyfrowa). Dlatego proponuje to:

'#### Krok pierwszy ####
'  te linie:
Dim Linia_g(10) As String * 3 , Linia_d(10) As String * 3
'  zamienić na:
Dim Linia_g(11) As String * 3 , Linia_d(11) As String * 3
 
'#### Krok drugi ####
' pod tymi liniami
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
'dopisać
 
'Cyfra pusta
Linia_g(11) = "   "                                         ' trzy spacje
Linia_d(11) = "   "                                         ' trzy spacje
 
' 3 #### Krok trzeci ####
'  te linie:
If Pierwsza = 0 Then Pierwsza = 10
 
'zamienić na:
If Pierwsza = 0 Then Pierwsza = 11

Możesz odpalić też poniższą symulację i zobaczyć jak to będzie wyglądało na symulatorze
(Wszystkie cyferki się zmieniają)

$sim
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 64
$swstack = 16
$framesize = 48
 
Gosub Znaki
Gosub Tablica
Cursor Off : Cls
 
Dim Convert As Word , Pierwsza As Word , Druga As Word , Trzecia As Word
Dim Linia_g(11) As String * 3 , Linia_d(11) As String * 3
 
Lcd "OUT"
Lowerline
Lcd " +"
Do
 
  Trzecia = Convert Mod 10
   If Trzecia = 0 Then Trzecia = 10
  Pierwsza = Convert / 10
  Druga = Pierwsza Mod 10
   If Druga = 0 Then Druga = 10
  Pierwsza = Pierwsza / 10
   If Pierwsza = 0 Then Pierwsza = 11
 
            Locate 1 , 4
             Lcd Linia_g(pierwsza) ; Linia_g(druga) ; " " ; Linia_g(trzecia)
 
            Locate 2 , 4
             Lcd Linia_d(pierwsza) ; Linia_d(druga) ; Chr(161) ; Linia_d(trzecia)
 
    Convert = Convert + 3                                   ' szybciej dodaje niż INCR
    If Convert > 996 Then Convert = 0
Loop
End
'*** KONIEC ***
 
Znaki:
Deflcdchar 1 , 28 , 24 , 32 , 32 , 32 , 32 , 24 , 28        ' prawy naroznik
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' gorna kreseczka
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' dolna kreseczka
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' dwie kreseczki
Deflcdchar 5 , 28 , 30 , 30 , 30 , 30 , 30 , 30 , 28        ' prawa belka
Deflcdchar 6 , 7 , 15 , 15 , 15 , 15 , 15 , 15 , 7          ' lewa belka
Deflcdchar 7 , 7 , 3 , 32 , 32 , 32 , 32 , 3 , 7            ' lewy naroznik
Return
 
Tablica:
'=========TABLICA na DUŻE CYFRY===========
'Cyfra 0
Linia_g(10) = Chr(6) + Chr(2) + Chr(5)
Linia_d(10) = Chr(6) + Chr(3) + Chr(5)
'Cyfra 1
Linia_g(1) = "  " + Chr(5)
Linia_d(1) = "  " + Chr(5)
'Cyfra 2
Linia_g(2) = Chr(7) + Chr(4) + Chr(5)
Linia_d(2) = Chr(6) + Chr(3) + Chr(3)
'Cyfra 3
Linia_g(3) = " " + Chr(4) + Chr(5)
Linia_d(3) = " " + Chr(3) + Chr(5)
'Cyfra 4
Linia_g(4) = Chr(6) + Chr(3) + Chr(5)
Linia_d(4) = "  " + Chr(5)
'Cyfra 5
Linia_g(5) = Chr(6) + Chr(4) + Chr(1)
Linia_d(5) = Chr(3) + Chr(3) + Chr(5)
'Cyfra 6
Linia_g(6) = Chr(6) + Chr(4) + Chr(1)
Linia_d(6) = Chr(6) + Chr(3) + Chr(5)
'Cyfra 7
Linia_g(7) = Chr(6) + Chr(2) + Chr(5)
Linia_d(7) = "  " + Chr(5)
'Cyfra 8
Linia_g(8) = Chr(6) + Chr(4) + Chr(5)
Linia_d(8) = Chr(6) + Chr(3) + Chr(5)
'Cyfra 9
Linia_g(9) = Chr(6) + Chr(4) + Chr(5)
Linia_d(9) = Chr(3) + Chr(3) + Chr(5)
'Cyfra pusta
Linia_g(11) = "   "
Linia_d(11) = "   "
Return

Jak będziesz chciał "tańczący" wynik to daj znać ;)

-

BARTek
Moja strona

Portret użytkownika gosc

Zero wiodące

Dziękuję za odpowiedż...Pozdrawiam serdecznie życząc Wesołych Świąt

Portret użytkownika gosc

Zero wiodące

Dziękuję za odpowiedż...Pozdrawiam serdecznie życząc Wesołych Świąt

Portret użytkownika gosc

Zero wiodące

Dziękuję serdecznie za odpowiedż...Pozdrawiam serdecznie zycząc Wesołych Świąt

Portret użytkownika matrix

Pytanie do tego tematu

Jak działa znajdowanie następnego miejsca do wyświetlenia kolejnej cyfry ?

Chciałem też powiedzieć że w zestawieniu z innymi Chr(x) nie działa mi wyświetlanie Chr(0), wiecie może ocb ?

Nie działa Chr(0) tylko Chr(8).
Znaczy definicje nie są przeprowadzane od Chr(0) do Chr(7) tylko od Chr(1) do Chr(8) lae wywala dziwnie czasem błąd jedengo znaku, właśnie tego zadeklarowanego jako Chr(8).