Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Jak wstawic wybrany znak do kodu? (BASCOM)

zgf1 13 Mar 2008 11:24 2341 7
  • #1
    zgf1
    Level 23  
    Zobaczcie w linku jest komputer samochodowy na wyświetlaczu LCD 4*20.
    Tam przy temperaturach są znaczniki: "t1" i "t2".
    http://pl.youtube.com/watch?v=yJMelf8jW18

    Zajmuja one jedno pole wyswietlacza.
    Jak wprowadzic te znaczniki do tego kodu, potrzebowalbym: t1, t2, t3, t4


    Code:

    $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
    Config 1wire = Portd.5                                      'deklaracja portu na którym będą podpięte DS18b20

    Dim I1 As Integer , Ss As String * 6
    Dim I2 As Integer
    Dim I3 As Integer
    Dim I4 As Integer

    Dim Dsid1(8) As Byte
    Dim Dsid2(8) As Byte
    Dim Dsid3(8) As Byte
    Dim Dsid4(8) As Byte
    Dim B As Byte                                               'deklaracja zmiennej do odczytu kodów ID
    Dim W As Byte                                               'deklaracja zmiennej do odczytu ilośc czujników

    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             'znak stopnia Celsjusza
    Deflcdchar 1 , 4 , 21 , 14 , 27 , 14 , 21 , 4 , 32          'znak zewnętrzna
    Deflcdchar 2 , 16 , 0 , 23 , 21 , 21 , 21 , 21 , 32         'znak wewnętrzna

    Cursor Off                                                  'Wyłącza kursor
    Cls                                                         'Funkcja CLS czyści ekran
    Lcd "   Termometr    " ;                                    'ekran startowy (pojawia się tylko podczas włączania urządzenia)
    Lowerline
    Lcd "      2007      "
    Wait 5
    Cls
    W = 1wirecount()
    Lcd "Ilosc czujnikow:"                                      'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
    Waitms 500
    Lcd W
    Wait 3
    Cls                                                         'Znajdź pierwszy czujnik podpięty do portu
    Dsid1(1) = 1wsearchfirst()                                  'Znajdź kolejny czujnik podpięty do portu
    Dsid2(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
    Dsid3(1) = 1wsearchnext()                                   'Znajdź kolejny czujnik podpięty do portu
    Dsid4(1) = 1wsearchnext()

    '*******************Odczyt numerów ID czujników temperatury*********************

    If Dsid1(8) = Crc8(dsid1(1) , 7) Then                       'ta opcja pojawia się tylko przy włączaniu urządzenia
     Locate 1 , 1
     Lcd "CRC OK Termo1 ID"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If
    Wait 2



    If Dsid2(8) = Crc8(dsid2(1) , 7) Then
     Locate 2 , 1
     Lcd "CRC OK Termo2 ID"
     Wait 1
     Locate 2 , 1
     For B = 1 To 8
     Lcd Hex(dsid2(b))
     Next
    End If
    Wait 2

    If Dsid3(8) = Crc8(dsid3(1) , 7) Then
     Locate 1 , 1
     Lcd "CRC OK Termo3 ID"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid3(b))
     Next
    End If
    Wait 2

    If Dsid4(8) = Crc8(dsid4(1) , 7) Then
     Locate 2 , 1
     Lcd "CRC OK Termo4 ID"
     Wait 1
     Locate 2 , 1
     For B = 1 To 8
     Lcd Hex(dsid4(b))
     Next
    End If
    Wait 2
    Cls

    '*******************koniec odczytu ID czujników temperatury*********************

    Do
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)                                        'wysyłamy adres pierwszego czujnika
       1wwrite &HBE
       I1 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid2(1)                                        'wysylam adres drugiego czujnika
       1wwrite &HBE
       I2 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid3(1)                                        'wysylam adres trzeciego czujnika
       1wwrite &HBE
       I3 = 1wread(2)
    '---------------------------------
       1wreset
       1wwrite &H55
       1wverify Dsid4(1)                                        'wysylam adres czwartego czujnika
       1wwrite &HBE
       I4 = 1wread(2)
    '--------konwersja temp dla wszystkich dsow
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Wait 1

    '****Jeśli pracujesz z wyświetlaczem innym niż 2x20 to tutaj trzeba wprowadzić zmiany w LOCATE********

       I1 = I1 * 10
       I1 = I1 / 16
       If I1 > 0 Then                                           'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
       Ss = Str(i1)
       Ss = Format(ss , "  0.0")
       Locate 1 , 1                                             'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
       Lcd Chr(1) ; Ss ; Chr(0) ;
       Else
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1                                             'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
       Lcd Chr(1) ; Ss ; Chr(0) ;
       End If

       I2 = I2 * 10
       I2 = I2 / 16
       If I2 > 0 Then
       Ss = Str(i2)
       Ss = Format(ss , "  0.0")
       Locate 1 , 10
       Lcd Chr(2) ; Ss ; Chr(0) ;
       Else
       Ss = Str(i2)
       Ss = Format(ss , " 0.0")
       Locate 1 , 10
       Lcd Chr(2) ; Ss ; Chr(0)
       End If

       I3 = I3 * 10
       I3 = I3 / 16
       If I3 > 0 Then
       Ss = Str(i3)
       Ss = Format(ss , "  0.0")
       Locate 2 , 1
       Lcd Chr(1) ; Ss ; Chr(0) ;
       Else
       Ss = Str(i3)
       Ss = Format(ss , " 0.0")
       Locate 2 , 1
       Lcd Chr(1) ; Ss ; Chr(0) ;
       End If

       I4 = I4 * 10
       I4 = I4 / 16
       If I4 > 0 Then
       Ss = Str(i4)
       Ss = Format(ss , "  0.0")
       Locate 2 , 10
       Lcd Chr(2) ; Ss ; Chr(0) ;
       Else
       Ss = Str(i4)
       Ss = Format(ss , " 0.0")
       Locate 2 , 10
       Lcd Chr(2) ; Ss ; Chr(0) ;
       End If

       Loop




    Bardzo proszę o pomoc :)
  • #3
    zgf1
    Level 23  
    A przepraszam, zapomnialem linku do filmiku:
    http://pl.youtube.com/watch?v=yJMelf8jW18


    Czytalem post ale mi umknelo to...
    Na dole wyswietlacza, kolo temperatur sa takie male znaczniki czujnikow, w postaci t1 i t2. Wlasnie nie wiem jak to mozliwe, ale chyba jakos udalo sie to osiagnac, pytanie tylko jak? :)
  • Helpful post
    #4
    mirekk36
    Level 42  
    Wciskasz sobie w Bascomie CTRL-L i pojawia ci się okienko w którym możesz sobie sam zaprojektować to jak ci się żywnie spodoba. Gdy klikniesz OK to Bascom sam zamieni ci to na odpowiednią linijkę, trzeba tylko uzupełnić jej początek o nr kodu znaku i później w swoim programie posługiwać się tym kodem przy wyświetlaniu
  • #5
    zgf1
    Level 23  
    Ogromne dzieki, dziala :)
  • #6
    JmL(TM)
    Level 24  
    Wiem ze juz zrobiles ale jakby cos to miales to w kodzie ;)

    Code:
    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32             'znak stopnia Celsjusza
    
    Deflcdchar 1 , 4 , 21 , 14 , 27 , 14 , 21 , 4 , 32          'znak zewnętrzna
    Deflcdchar 2 , 16 , 0 , 23 , 21 , 21 , 21 , 21 , 32         'znak wewnętrzna


    Wystarczylo dodac wlasne i zmienic w kodzie nr znaku...
  • #7
    zgf1
    Level 23  
    Tak wiem zauwazylem to, jednak nie znam tego jezyka programowania, na szybko cos chcialem zrobic tylko :)