logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Gdyby ktoś chciał użyć LCD od S65 LPH88 w Bascomie.

M. S. 08 Lut 2011 20:50 2313 8
  • #1 9123220
    M. S.
    Poziom 34  
    'Program  sterujący LCD Siemens S65 ze sterownikiem LPH88
    'Lcd obrócony o 90st. (dłuższy bok LCD w poziomie)
    'Współrzędne pozycjonowania tekstu - w pionie y = 0 do 116, w poziomie x = 0 do 160
    'Współrzędne dla Window_locate w oryginalnym układzie jak dla pozycji pionowej.
    'Czcionka 16x16 cyfry i duże litery.
    'Kodowanie kolorów 16 bitów &Bbbbbbggggggrrrrr
    'Czcionka kodowana w 14 słowach 16 bitowych linia po lini od góry z lewej strony najmniej znaczący bit.
    'Odstępy między wierszami (2 pixele) wstawiane przez S65 automatycznie
    'Końcówka RS wyświetlacza nie wymaga podłączenia do uC - program końcówki RS nie obsługuje.
    'Spację wstawiamy przez "/"
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 128
    $swstack = 128
    $framesize = 128
    
    
    Config Portc.2 = 1 : Rst Alias Portc.2
    Config Portc.3 = 1 : Cs Alias Portc.3
    'Clk Alias Portb.5                                           'CLK = SCK
    'Dat Alias Portb.3                                           'DAT = MOSI
    
    Const White = &HFFFF                                        'white
    Const Black = &H0000                                        'black
    Const Red = &HF800                                          'red
    Const Green = &H7C0                                         'green
    Const Blue = &H1F                                           'blue
    Const Whiblu = &H7FF                                        'whiblu
    Const Yellow = &B1111111111100000
    
    Dim Temp As Byte
    Dim A As Word , N As Byte , X As Byte
    Dim Licznik As Byte , Color As Word
    
    Declare Sub S65(byval Txt As String , Byval Cl As Word , Byval Ct As Word , Byval Ystart As Byte , Byval Xstart As Byte )
    Declare Sub Clear_screen(byval Clear_color As Word)
    Declare Sub Wordout()
    Declare Sub Byteout()
    Declare Sub S65_init()
    Declare Sub Window_locate(byval X_start As Byte , Byval Y_start As Byte , Byval X_end As Byte , Byval Y_end As Byte)
    Declare Sub Cspulse()
    Declare Sub Command_send(byval Nn As Byte)
    Declare Sub Data_send(byval Aa As Word)
    
    
    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
    Spiinit
    Call S65_init
    
    Call Clear_screen(black)
    
    Do
       Incr X
       Select Case X
        Case 1 : Color = White
        Case 2 : Color = Red
        Case 3 : Color = Green
        Case 4 : Color = Blue
        Case 5 : Color = Whiblu
        Case 6
        Color = Yellow
        X = 0
      End Select
    
    
       For Licznik = 0 To 116
          Call S65( "SIEMENS/S65" , Color , Black , Licznik , 0)       ' / = spacja
       Next Licznik
    
    Loop
    
    End
    
    
    Sub S65(txt , Cl , Ct , Ystart , Xstart)                    'Ystart <= 116 Xstart <= 160
      Local _lit As String * 1
      Local _kod As Byte
      Local _x As Byte
      Local _y As Byte
      Local _dane As Word
      Local _wiersz As Word
      Local _xend As Byte
      Local _yend As Byte
      Local _xstart As Byte
      Local _ystart As Byte
      Local _dlugosc As Byte
      Local _numer_znaku As Byte
    
      _xstart = Xstart
      _ystart = 116 - Ystart                                    ': If _xstart > 116 Then _xstart = 116
      _yend = _ystart + 15
      _xend = _xstart + 15
    
      _dlugosc = Len(txt) : If _dlugosc > 11 Then _dlugosc = 11
    
      For _numer_znaku = 1 To _dlugosc
        Set Cs
        _lit = Mid(txt , _numer_znaku , 1)
        _kod = Asc(_lit)
        If _kod < 58 Then _kod = _kod - 45      'Przesunięcie  ASCII dla cyfr
        If _kod > 64 Then _kod = _kod - 52                      'Przesunięcie  ASCII dla dużych liter
        _wiersz = _kod * 14
    
        Call Window_locate(_ystart , _xstart , _yend , _xend)   'x_start , Y_start , X_end , Y_end
    
          For _y = 0 To 15
                _dane = Lookup(_wiersz , _alfabet)
    
                If _y < 2 Then
                  _dane = 0
                Else
                  _dane = Lookup(_wiersz , _alfabet)
                  Incr _wiersz
                End If
    
             For _x = 0 To 15
                   If _dane._x = 1 Then A = Cl Else A = Ct
                Call Wordout()
             Next _x
          Next _y
          _xstart = _xstart + 16 : _xend = _xstart + 15
      Next _numer_znaku
      Set Cs
    
    End Sub
    
    '--------------------Krótki impuls CS ----------------------
    
    Sub Cspulse
    
      Set Cs
      nop
      Reset Cs
    
    End Sub
    
    '------------Wyślij adres i komendę---------------------------
    Sub Command_send(nn)
    
      N = &H74
      Call Byteout()
      N = 0
      Call Byteout()
      N = Nn
      Call Byteout()
      Call Cspulse
    
    End Sub
    '----------Wyślij adres i dane------------------------------
    Sub Data_send(aa)
    
      N = &H76
      Call Byteout()
      A = Aa
      Call Wordout()
      Call Cspulse
    
    End Sub
    '----------------Wyślij WORD-------------------------------
    Sub Wordout()
    
          lds r23, {a+1}
          !out spdr, r23
          lds r23, {a}
        Wait_trh:
          sbis spsr, spif
          rjmp wait_trh
          !out spdr, r23
       Wait_trl:
          sbis spsr, spif
          rjmp wait_trl
    
    End Sub
    
    '-------------Wyślij BYTE---------------------------------
    Sub Byteout
    
          lds r23, {n}
          !out spdr, r23
       Waitresult:
          sbis spsr, spif
          rjmp waitresult
    
    End Sub
    
    '-------------------------------------------------------------------------------
    Sub S65_init
    
       Reset Rst
       Set Cs
       Waitms 1
       Set Rst
       Waitms 10
       Reset Cs
       Restore Ini_code
       For Temp = 0 To 33
         Read N
         Call Command_send(n)
         Read A
         Call Data_send(a)
       Next Temp
       Waitms 300
       Set Cs
    
    End Sub
    '-------------------------------------------------------------------------------
    Sub Clear_screen(clear_color)
    
       Local Temp2 As Word
       Reset Cs
       Call Window_locate(0 , 0 , 131 , 175)                    'x_start , Y_start , X_end , Y_end
       A = Clear_color
       For Temp2 = 1 To 23232
          Call Wordout()
       Next Temp2
       Set Cs
    
    End Sub
    
    '-------------------------------------------------------------------------------
    Sub Window_locate(x_start , Y_start , X_end , Y_end )
    
      Local Razem As Word
      Reset Cs                                                  'Poziomy adres start i stop okna
      Call Command_send(&H16)
      Razem = Makeint(x_start , X_end)
      Call Data_send(razem)
    
      Call Command_send(&H17)                                   'Pionowy adres start i stop okna
      Razem = Makeint(y_start , Y_end)
      Call Data_send(razem)
    
      Call Command_send(&H21)                                   'Licznik adresu pamięci start X, Y
      Razem = Makeint(x_start , Y_start)
      Call Data_send(razem)
    
      Call Command_send(&H22)                                   ' Zapis okna do pamięci
      N = &H76
      Call Byteout()
    
    End Sub
    
    
    _alfabet:
    
    
    Data 0% , 0% , 0% , 0% , 0% , 0% , 8184% , 8184% , 0% , 0% , 0% , 0% , 0% , 0%       '-  Minus
    Data 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 112% , 112% , 112%       '.  Kropka
    Data 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0% , 0%       '"/" Wstawia spację
    
    Data 4080% , 8184% , 14364% , 12300% , 12300% , 12300% , 12300% , 12300% , 12300% , 12300% , 12300% , 14364% , 8184% , 4080%       ' 0
    Data 768% , 896% , 960% , 992% , 880% , 816% , 768% , 768% , 768% , 768% , 768% , 768% , 1920% , 1920%       ' 1
    Data 4080% , 8184% , 14364% , 12300% , 12288% , 14336% , 7680% , 1920% , 480% , 120% , 28% , 12% , 16380% , 16380%       ' 2
    Data 4080% , 8184% , 14364% , 12300% , 14336% , 7168% , 3840% , 3840% , 7168% , 14336% , 12300% , 14364% , 8184% , 4080%       ' 3
    Data 7168% , 7680% , 7936% , 7040% , 6592% , 6368% , 6256% , 6200% , 16380% , 16380% , 6144% , 6144% , 6144% , 6144%       ' 4
    Data 16380% , 16380% , 12% , 12% , 4092% , 8188% , 14348% , 12288% , 12288% , 12288% , 12300% , 14364% , 8184% , 4080%       ' 5
    Data 8176% , 16376% , 12316% , 12% , 12% , 4076% , 8188% , 14364% , 12300% , 12300% , 12300% , 14364% , 8184% , 4080%       ' 6
    Data 16380% , 16380% , 12288% , 14336% , 7168% , 3584% , 1792% , 896% , 448% , 192% , 192% , 192% , 192% , 192%       ' 7
    Data 4080% , 8184% , 14364% , 12300% , 12300% , 14364% , 8184% , 8184% , 14364% , 12300% , 12300% , 14364% , 8184% , 4080%       ' 8
    Data 4080% , 8184% , 14364% , 12300% , 12300% , 12300% , 14364% , 16376% , 14320% , 12288% , 12288% , 14348% , 8188% , 4088%       ' 9
    
    Data 384% , 960% , 960% , 1632% , 1632% , 3120% , 3120% , 7224% , 6168% , 16380% , 16380% , 28686% , 24582% , 24582%       ' A
    Data 4094% , 8190% , 14342% , 12294% , 12294% , 14342% , 8190% , 16382% , 28678% , 24582% , 24582% , 28678% , 16382% , 8190%       ' B
    Data 4080% , 8184% , 14364% , 12302% , 6% , 6% , 6% , 6% , 6% , 24582% , 28686% , 14364% , 8184% , 4080%       ' C
    Data 4094% , 8190% , 14342% , 12294% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 12294% , 14342% , 8190% , 4094%       ' D
    Data 32766% , 32766% , 6% , 6% , 6% , 6% , 8190% , 8190% , 6% , 6% , 6% , 6% , 32766% , 32766%,       ' E
    Data 32766% , 32766% , 6% , 6% , 6% , 6% , 8190% , 8190% , 6% , 6% , 6% , 6% , 6% , 6%       ' F
    Data 4080% , 8184% , 14364% , 12302% , 6% , 6% , 32262% , 32262% , 24582% , 24582% , 28686% , 30748% , 32760% , 28656%,       ' G
    Data 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 32766% , 32766% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582%       ' H
    Data 2016% , 2016% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 2016% , 2016%       ' I
    Data 8184% , 8184% , 6144% , 6144% , 6144% , 6144% , 6144% , 6144% , 6144% , 7168% , 3072% , 3840% , 1984% , 448%       ' J
    Data 14342% , 15366% , 3590% , 1798% , 902% , 454% , 230% , 502% , 958% , 1822% , 3598% , 7174% , 30726% , 28678%       ' K
    Data 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 6% , 32766% , 32766%       ' L
    Data 24582% , 28686% , 30750% , 30750% , 31806% , 27702% , 26214% , 26214% , 25542% , 25542% , 24966% , 24582% , 24582% , 24582%       ' M
    Data 24582% , 24590% , 24606% , 24638% , 24694% , 24806% , 25030% , 25478% , 26374% , 28166% , 31750% , 30726% , 28678% , 24582%,
           ' N
    Data 4080% , 8184% , 14364% , 28686% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 28686% , 14364% , 8184% , 4080%       ' O
    Data 8190% , 16382% , 28678% , 24582% , 24582% , 24582% , 28678% , 16382% , 8190% , 6% , 6% , 6% , 6% , 6%       ' P
    Data 4080% , 8184% , 14364% , 28686% , 24582% , 24582% , 24582% , 24582% , 26118% , 28166% , 15374% , 14364% , 32760% , 26608%       ' Q
    Data 8190% , 16382% , 28678% , 24582% , 24582% , 24582% , 28678% , 16382% , 8190% , 1798% , 3590% , 7174% , 30726% , 28678%       ' R
    Data 8184% , 16380% , 28686% , 24582% , 6% , 14% , 8188% , 16376% , 28672% , 24576% , 24582% , 28686% , 16380% , 8184%       ' S
    Data 32766% , 32766% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384% , 384%       ' T
    Data 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 24582% , 28686% , 14364% , 8184% , 4080%       ' U
    Data 24582% , 24582% , 28686% , 12300% , 14364% , 6168% , 7224% , 3120% , 3696% , 1632% , 2016% , 960% , 960% , 384%       ' V
    Data 24582% , 24582% , 24582% , 24582% , 24966% , 24966% , 25542% , 25542% , 26598% , 26214% , 32382% , 31806% , 15420% , 6168%       ' W
    Data 24582% , 28686% , 14364% , 7224% , 3696% , 2016% , 960% , 960% , 2016% , 3696% , 7224% , 30750% , 28686% , 24582%       ' X
    Data 24582% , 24582% , 24582% , 28686% , 14364% , 7224% , 3696% , 2016% , 960% , 384% , 384% , 384% , 384% , 384%       ' Y
    Data 32766% , 32766% , 14336% , 7168% , 3584% , 1792% , 896% , 448% , 224% , 112% , 56% , 28% , 32766% , 32766%       ' Z
    
    
    Ini_code:
    Data &H07 , &H0000% , &H02 , &H0400% , &H04 , &H0000% , &H0C , &H0001% , &H0D , &H0616% , &H0E , &H1010%
    Data &H03 , &B11111100% , &H0E , &H2D1F% , &H0D , &H0616% , &H01 , &H0215% , &H0F , &H0000% , &H0B , &H0000%
    Data &H11 , &H0000% , &H06 , &H0000% , &H05 , &H0028% , &H14 , &HAF00% , &H15 , &H0000% , &H16 , &H8300%
    Data &H17 , &HAF00% , &H20 , &H0000% , &H30 , &H0000% , &H31 , &H0400%
    Data &H32 , &H0207% , &H33 , &H0700% , &H34 , &H0005% , &H35 , &H0703% , &H36 , &H0707% , &H37 , &H0007%
    Data &H3A , &H1200% , &H3B , &H0009% , &H07 , &H0005% , &H07 , &H0025% , &H07 , &H0027% , &H07 , &H0037%
    
  • #2 9190496
    Freddy
    Poziom 43  
    Witaj, próbowałem zastosować ten przykład, ale mnie niestety nie działa.
    Mam ATMega16 i połączenie do LCD na sztywno ustawione na porcie B i nic nie poradzę. CS=4, RS=2, Clock=7, Data=5, Reset=3. Próbowałem zmian, ale niestety nic z tego. Mógłbyś coś podpowiedzieć.
  • #3 9193141
    M. S.
    Poziom 34  
    Czy to na pewno LPH88? Wyświetlacze w S65 miały 3 różne sterowniki!!!
    Niektórzy koledzy twierdzą, że nowsze wyświetlacze pobierają więcej prądu i zwykłe dzielniki rezystorowe nie zapewniają odpowiedniego sterowania pinami LCD.
    Nie próbowałem tego programu na M16.
  • #4 9193274
    Freddy
    Poziom 43  
    M. S. napisał:
    Czy to na pewno LPH88? Wyświetlacze w S65 miały 3 różne sterowniki!!!
    Niektórzy koledzy twierdzą, że nowsze wyświetlacze pobierają więcej prądu i zwykłe dzielniki rezystorowe nie zapewniają odpowiedniego sterowania pinami LCD.
    Nie próbowałem tego programu na M16.

    A dyć cytoć umiem. :)
    Tak napewno LPH, wiem, że były trzy różne:LS020, L2F50 i LPH8836.
  • #5 9194214
    M. S.
    Poziom 34  
    Sprawdziłem zamieszczony program. Skompilował się, wgrał do M8, działa.
    P. S.
    Program ściągnąłem z ruskiej strony - obsługiwał kamerę z S65 i był napisany prawdopodobnie na M16. Dodałem funkcję wyświetlającą tekst, przerobiłem inicjację, aby wyświetlał w poziomie, dorobiłem czcionkę, przekompilowałem na M8.
  • #6 9194374
    Freddy
    Poziom 43  
    Pamiętasz może link do tej strony ?
    Wgrywałem to do Mega16 i tak jak napisałem mam inne porty i niestety nie chce działać. W tym programie gość wykorzystuje harware'owe SPI, a ja nie za bardzo mogę. Dlatego szukam czegoś "lepszego".
  • #8 9196039
    Freddy
    Poziom 43  
    A no właśnie, ten przykład znam. Dzięki, szukam czegoś innego. Tak a propos, jak szybko chodzi ten wyświetlacz na sprzętowym SPI ?
REKLAMA