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

[mega32][Bascom]LCD 3310 + 24LC32 + Rc5

Ficu 14 Lis 2008 20:42 3442 3
REKLAMA
  • #1 5739121
    Ficu
    Poziom 31  
    Kolejny problem w ostatnim poście.
    Witam,
    zaczynam zabawę z LCD 3310 (LPH7779) w BascomAVR.
    Chciałem odczytywać kod przez Rc5, ale nie potrafię wyświetlić zmiennych Address i Command.
    Dla LCD 2*16 nie było nic w tym trudnego:
    Do
       Getrc5(Address , Command)
       Command = Command And &B01111111
       Cls
       Lcd "Adres: " ; Address
       Lowerline
       Lcd "Komenda:" ; Command
       Waitms 100
    Loop
    End

    Natomiast jeżeli dla LCD 3310 napiszę:
    Do
       Getrc5(Address , Command)
       Command = Command And &B01111111
       Call Lcdinit
       Lcdclear
       Lcdgoxy 1 , 1
       Lcdstr "Adres:" , 1 , 0 ; Address
       Lcdupdate
       Waitms 100
    Loop
    End

    to program się nie kompiluje. Jak wyświetlić zmienną na LCD 3310?
    Poniżej program wyświetlający napis na LCD 3310:
    'Set in Options, Compiler:
    'HW stack=128
    'Soft Stack=128
    'Frame=128
    
    $regfile = "m32def.dat"
    $crystal = 4000000
    
    '------------------------------ LCD ports config -------------------------------
    Config Pinb.4 = Output
    Config Pina.0 = Output
    Config Pinb.0 = Output
    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 1 , Clockrate = 4 , Noss = 1
    Spiinit
    
    Config Rc5 = Pind.2
    
    
    '------------------------------ LCD vars  --------------------------------------
    Dim Lcd_data As Byte
    Dim Updatelcd As Bit                                        '1 = Update
    Dim Lcd_cache(504) As Byte                                  'data to send to LCD RAM
    Dim Lcdcacheidx As Word                                     'pointer
    Dim Ch As Byte
    
    Dim Address As Byte , Command As Byte
    
    '------------------------------ Aliases ----------------------------------------
    Lcd_dc Alias Portb.4                                        'low = command mode, high = data
    Lcd_sce Alias Porta.0                                       'low = enable LCD SPI, high = SPI disable
    Lcd_rst Alias Portb.0                                       'low = reset
    
    
    '------------------------------ LCD constants ----------------------------------
    Const Lcd_inver = &H0D                                      'inverted  screen (after normal command mode)
    Const Lcd_normal = &H0C                                     'normal  screen (after normal command mode)
    Const Test = &H09                                           'All pixels on (after normal command mode)
    Const Normal_command = &H20                                 'normal command mode
    
    '------------------------------ LCD Sub declarations ---------------------------
    Declare Sub Lcdcmd(byval Command As Byte )
    Declare Sub Lcdinit
    Declare Sub Lcdclear
    Declare Sub Lcdupdate
    Declare Sub Lcdgoxy(byval X As Byte , Byval Y As Byte)
    'from 1,1 to 14,6
    Declare Sub Lcdchr(byval Ch As Byte , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)
    'ch=character, Lcdfontsize 1 = high 1, Lcdfontsize 2=high 2, Ch_inv 1=inverse
    Declare Sub Lcdstr(byval Lcdstring As String , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)
    'lcdstring = string to LCD, Lcdfontsize 1 = high 1, Lcdfontsize 2=high 2, Ch_inv 1=inverse
    
    
    
    '------------------------------ LCD Init ---------------------------------------
    Do
       Call Lcdinit
       Lcdclear
       Lcdgoxy 1 , 1
       Lcdstr "Linia 1" , 1 , 0
       Lcdupdate
       Wait 5
    Loop
    End
    
    
    
    
    
    
    '*******************************************************************************
    '*----------------------------- LCD subroutines -------------------------------*
    '*******************************************************************************
    '------------------------------ Lcdcmd (Command) -------------------------------
    Sub Lcdcmd(byval Command As Byte )
       Reset Lcd_sce                                            ' SPI enable
       Reset Lcd_dc                                             ' command mode
       Spiout Command , 1
       Set Lcd_dc                                               ' data mode
       Set Lcd_sce                                              ' data mode
    End Sub
    
    '------------------------------ Lcdinit ----------------------------------------
    Sub Lcdinit
       Waitms 5
       Reset Lcd_rst                                            'RESET LCD
       Waitms 5
       Set Lcd_rst                                              'end of reset
       Set Lcd_sce                                              'in Lcdcmd() will be "L"!
       Call Lcdcmd(&H21)                                        'extended command mode
       Call Lcdcmd(&Hb8)                                        'LCD contrast (mayby you must change)
       Call Lcdcmd(&H06)                                        'temperature compensation
       Call Lcdcmd(&H13)                                        'bias 1:48
       Call Lcdcmd(&H20)                                        'normal command mode
       Call Lcdcmd(&H0c)                                        'normal display
       Call Lcdcmd(&H40)                                        'Y=0
       Call Lcdcmd(&H80)                                        'X=0
       Call Lcdclear
       Call Lcdupdate
    End Sub
    
    '------------------------------ Lcdclear ---------------------------------------
    Sub Lcdclear
       Local I As Word
       For I = 1 To 504
           Lcd_cache(i) = 0
       Next I
    '    Lcdcacheidx = 1
    End Sub
    '------------------------------ Lcdupdate --------------------------------------
    'copy full LCD_cache to LCD RAM
    Sub Lcdupdate
       Local I As Word
       Call Lcdcmd(&H80)                                        'sets 0 X-addr of RAM
       Call Lcdcmd(&H40)                                        'sets 0 Y-addr of RAM
       For I = 1 To 504
         Lcd_data = Lcd_cache(i)
         Reset Lcd_sce                                          'SPI to LCD enable
         Set Lcd_dc                                             'Data
         Spiout Lcd_data , 1
         While Spsr.7 = 1                                       'wait until SPIF = 0
         Wend
         Reset Lcd_dc
         Set Lcd_sce                                            'SPI to LCD disable
       Next I
       Updatelcd = 0
    End Sub
    
    '------------------------------ Lcdgoxy ----------------------------------------
    Sub Lcdgoxy(byval X As Byte , Byval Y As Byte)              'from 1,1 to 14,6
       Local I As Word
       Local J As Word
       X = X - 1
       I = X
       I = I * 6
       Y = Y - 1
       J = Y
       J = Y * 84
       Lcdcacheidx = I + J
       Incr Lcdcacheidx                                         'Lcdchacheidx 1-504!
    End Sub
    
    '------------------------------ Lcdchr -----------------------------------------
    Sub Lcdchr(byval Ch As Byte , Byval Lcdfontsize As Byte , Byval Ch_inv As Byte)       '1 character on LCD
       Local I As Byte
       Local J As Word
       Local K As Byte
       Local Ba As Byte
       Local Bb As Byte
       Local Tmpidx As Word
       Local Tmpidx1 As Word
       If Ch < &H20 Then Ch = 92
       If Ch > &H7B Then Ch = 92
       J = Ch - 32
       J = J * 5
       If Lcdfontsize = 1 Then
          For I = 1 To 6
             K = Lookup(j , Fontlookup)
             If Ch_inv = 1 Then                                 'negative
                If I = 6 Then                                   'black for 6 row
                   K = 255
                Else
                   K = K Xor &HFF
                End If
             Else
                If I = 6 Then                                   'white for 6 row
                   K = 0
                End If
             End If
    
             Lcd_cache(lcdcacheidx) = K
             Incr Lcdcacheidx
             Incr J
          Next I
       Else                                                     'high 2
          Tmpidx = Lcdcacheidx - 84                             'signs go up and can't be at 1,x
          For I = 1 To 6
             If I = 6 Then
                If Ch_inv = 1 Then
                   K = 255
                Else
                   K = 0
                End If
             Else
                K = Lookup(j , Fontlookup)
                If Ch_inv = 1 Then
                   K = K Xor &HFF
                End If
             End If
             Ba.0 = K.0
             Ba.1 = K.0
             Ba.2 = K.1
             Ba.3 = K.1
             Ba.4 = K.2
             Ba.5 = K.2
             Ba.6 = K.3
             Ba.7 = K.3
    
             Bb.0 = K.4
             Bb.1 = K.4
             Bb.2 = K.5
             Bb.3 = K.5
             Bb.4 = K.6
             Bb.5 = K.6
             Bb.6 = K.7
             Bb.7 = K.7
    
             Lcd_cache(tmpidx) = Ba                             'up of character
             Incr Tmpidx
             Lcd_cache(tmpidx) = Ba                             'double wide
             Incr Tmpidx
             Tmpidx1 = Tmpidx + 82
             Lcd_cache(tmpidx1) = Bb                            'down of character
             Incr Tmpidx1
             Lcd_cache(tmpidx1) = Bb                            'double wide
             Incr J
          Next I
          Lcdcacheidx = Lcdcacheidx + 12                        '6+6
      End If
      Kon_lcdchr:
    End Sub
    '------------------------------ Lcdstr -----------------------------------------
    Sub Lcdstr(lcdstring As String , Lcdfontsize As Byte , Ch_inv As Byte)
       Local M As Byte
       Local N As String * 1
       For M = 1 To Len(lcdstring)
          N = Mid(lcdstring , M , 1)
          Ch = Asc(n)
          Call Lcdchr(ch , Lcdfontsize , Ch_inv )
       Next M
    End Sub
    
    
    '                              Character generator
    
    '     This table defines the standard ASCII characters in a 5x7 dot format.
    '------------------------------------------------------------------------------/
    $data
    Fontlookup:
    Data &H00 , &H00 , &H00 , &H00 , &H00 ,                     ' sp
    Data &H00 , &H00 , &H2F , &H00 , &H00 ,                     ' !
    Data &H00 , &H07 , &H00 , &H07 , &H00 , ' "
    Data &H14 , &H7F , &H14 , &H7F , &H14 ,                     ' #
    Data &H24 , &H2A , &H7F , &H2A , &H12 ,                     ' $
    Data &HC4 , &HC8 , &H10 , &H26 , &H46 ,                     ' %
    Data &H36 , &H49 , &H55 , &H22 , &H50 ,                     ' &
    Data &H00 , &H05 , &H03 , &H00 , &H00 ,                     ' '
    Data &H00 , &H1C , &H22 , &H41 , &H00 ,                     ' (
    Data &H00 , &H41 , &H22 , &H1C , &H00 ,                     ' )
    Data &H14 , &H08 , &H3E , &H08 , &H14 ,                     ' -
    Data &H08 , &H08 , &H3E , &H08 , &H08 ,                     ' +
    Data &H00 , &H00 , &H50 , &H30 , &H00 ,                     ' ,
    Data &H10 , &H10 , &H10 , &H10 , &H10 ,                     ' -
    Data &H00 , &H60 , &H60 , &H00 , &H00 ,                     ' .
    Data &H20 , &H10 , &H08 , &H04 , &H02 ,                     ' /
    Data &H3E , &H51 , &H49 , &H45 , &H3E ,                     ' 0
    Data &H00 , &H42 , &H7F , &H40 , &H00 ,                     ' 1
    Data &H42 , &H61 , &H51 , &H49 , &H46 ,                     ' 2
    Data &H21 , &H41 , &H45 , &H4B , &H31 ,                     ' 3
    Data &H18 , &H14 , &H12 , &H7F , &H10 ,                     ' 4
    Data &H27 , &H45 , &H45 , &H45 , &H39 ,                     ' 5
    Data &H3C , &H4A , &H49 , &H49 , &H30 ,                     ' 6
    Data &H01 , &H71 , &H09 , &H05 , &H03 ,                     ' 7
    Data &H36 , &H49 , &H49 , &H49 , &H36 ,                     ' 8
    Data &H06 , &H49 , &H49 , &H29 , &H1E ,                     ' 9
    Data &H00 , &H36 , &H36 , &H00 , &H00 ,                     ' :
    Data &H00 , &H56 , &H36 , &H00 , &H00 ,                     ' ;
    Data &H08 , &H14 , &H22 , &H41 , &H00 ,                     ' <
    Data &H14 , &H14 , &H14 , &H14 , &H14 ,                     ' =
    Data &H00 , &H41 , &H22 , &H14 , &H08 ,                     ' >
    Data &H02 , &H01 , &H51 , &H09 , &H06 ,                     ' ?
    Data &H32 , &H49 , &H59 , &H51 , &H3E ,                     ' @
    Data &H7E , &H11 , &H11 , &H11 , &H7E ,                     ' A
    Data &H7F , &H49 , &H49 , &H49 , &H36 ,                     ' B
    Data &H3E , &H41 , &H41 , &H41 , &H22 ,                     ' C
    Data &H7F , &H41 , &H41 , &H22 , &H1C ,                     ' D
    Data &H7F , &H49 , &H49 , &H49 , &H41 ,                     ' E
    Data &H7F , &H09 , &H09 , &H09 , &H01 ,                     ' F
    Data &H3E , &H41 , &H49 , &H49 , &H7A ,                     ' G
    Data &H7F , &H08 , &H08 , &H08 , &H7F ,                     ' H
    Data &H00 , &H41 , &H7F , &H41 , &H00 ,                     ' I
    Data &H20 , &H40 , &H41 , &H3F , &H01 ,                     ' J
    Data &H7F , &H08 , &H14 , &H22 , &H41 ,                     ' K
    Data &H7F , &H40 , &H40 , &H40 , &H40 ,                     ' L
    Data &H7F , &H02 , &H0C , &H02 , &H7F ,                     ' M
    Data &H7F , &H04 , &H08 , &H10 , &H7F ,                     ' N
    Data &H3E , &H41 , &H41 , &H41 , &H3E ,                     ' O
    Data &H7F , &H09 , &H09 , &H09 , &H06 ,                     ' P
    Data &H3E , &H41 , &H51 , &H21 , &H5E ,                     ' Q
    Data &H7F , &H09 , &H19 , &H29 , &H46 ,                     ' R
    Data &H46 , &H49 , &H49 , &H49 , &H31 ,                     ' S
    Data &H01 , &H01 , &H7F , &H01 , &H01 ,                     ' T
    Data &H3F , &H40 , &H40 , &H40 , &H3F ,                     ' U
    Data &H1F , &H20 , &H40 , &H20 , &H1F ,                     ' V
    Data &H3F , &H40 , &H38 , &H40 , &H3F ,                     ' W
    Data &H63 , &H14 , &H08 , &H14 , &H63 ,                     ' X
    Data &H07 , &H08 , &H70 , &H08 , &H07 ,                     ' Y
    Data &H61 , &H51 , &H49 , &H45 , &H43 ,                     ' Z
    Data &H00 , &H7F , &H41 , &H41 , &H00 ,                     ' [
    Data &H55 , &H2A , &H55 , &H2A , &H55 ,                     ' 55
    Data &H00 , &H41 , &H41 , &H7F , &H00 ,                     ' ]
    Data &H04 , &H02 , &H01 , &H02 , &H04 ,                     ' ^
    Data &H40 , &H40 , &H40 , &H40 , &H40 ,                     ' _
    Data &H00 , &H01 , &H02 , &H04 , &H00 ,                     ' '
    Data &H20 , &H54 , &H54 , &H54 , &H78 ,                     ' a
    Data &H7F , &H48 , &H44 , &H44 , &H38 ,                     ' b
    Data &H38 , &H44 , &H44 , &H44 , &H20 ,                     ' c
    Data &H38 , &H44 , &H44 , &H48 , &H7F ,                     ' d
    Data &H38 , &H54 , &H54 , &H54 , &H18 ,                     ' e
    Data &H08 , &H7E , &H09 , &H01 , &H02 ,                     ' f
    Data &H0C , &H52 , &H52 , &H52 , &H3E ,                     ' g
    Data &H7F , &H08 , &H04 , &H04 , &H78 ,                     ' h
    Data &H00 , &H44 , &H7D , &H40 , &H00 ,                     ' i
    Data &H20 , &H40 , &H44 , &H3D , &H00 ,                     ' j
    Data &H7F , &H10 , &H28 , &H44 , &H00 ,                     ' k
    Data &H00 , &H41 , &H7F , &H40 , &H00 ,                     ' l
    Data &H7C , &H04 , &H18 , &H04 , &H78 ,                     ' m
    Data &H7C , &H08 , &H04 , &H04 , &H78 ,                     ' n
    Data &H38 , &H44 , &H44 , &H44 , &H38 ,                     ' o
    Data &H7C , &H14 , &H14 , &H14 , &H08 ,                     ' p
    Data &H08 , &H14 , &H14 , &H18 , &H7C ,                     ' q
    Data &H7C , &H08 , &H04 , &H04 , &H08 ,                     ' r
    Data &H48 , &H54 , &H54 , &H54 , &H20 ,                     ' s
    Data &H04 , &H3F , &H44 , &H40 , &H20 ,                     ' t
    Data &H3C , &H40 , &H40 , &H20 , &H7C ,                     ' u
    Data &H1C , &H20 , &H40 , &H20 , &H1C ,                     ' v
    Data &H3C , &H40 , &H30 , &H40 , &H3C ,                     ' w
    Data &H44 , &H28 , &H10 , &H28 , &H44 ,                     ' x
    Data &H0C , &H50 , &H50 , &H50 , &H3C ,                     ' y
    Data &H44 , &H64 , &H54 , &H4C , &H44
  • REKLAMA
  • REKLAMA
  • #3 5745474
    Ficu
    Poziom 31  
    Ok, już się uporałem:
    Dim Address As Byte , Command As Byte
    Dim Str_address As String * 3
    Dim Str_command As String * 3
    
    Do
       Disable Int0
       Enable Interrupts
       Getrc5(address , Command)
       Command = Command And &B01111111
       Call Lcdinit
       Str_address = Str(address)
       Str_address = Format(str_address , "" )
       Str_command = Str(command)
       Str_command = Format(str_command , "" )
       Lcdclear
       Lcdgoxy 1 , 1
       Lcdstr Str_address , 1 , 0
       Lcdgoxy 1 , 2
       Lcdstr Str_command , 1 , 0
       Lcdupdate
       Waitms 100
    Loop
    End

    Tylko jeszcze jak dodać przed zmienną Address napis Adres: ?

    Kolejny problem to wyświetlanie zawartości z eeprom 24LC32 na LCD. Aktualnie ciągle wyświetlana jest liczba 70.

    Dim Adr_eep As Word At &H69
    Dim Adr_low As Byte At &H69 Overlay
    Dim Adr_hi As Byte At &H6A Overlay
    Adr_eep = 0                                                 'od 0 do 65535
    Const In_eep = 160                                          'Adresy dla EEPROM
    Const Out_eep = 161
    Const Max_eep = 8160
    
    Zps = 22
    Do
    Call Lcdinit
         Lcdclear
         Lcdgoxy 1 , 1
         Lcdstr "Saving..." , 1 , 0
         Lcdupdate                                              '
    Wait 1
    
    Zps = 22
    
       I2cstart
       I2cwbyte In_eep
       I2cwbyte Adr_hi
       I2cwbyte Adr_low
       I2cwbyte Zps
       I2cstop
    
    Wait 3
    Call Lcdinit
         Lcdclear
         Lcdgoxy 1 , 1
         Lcdstr "Waiting..." , 1 , 0
         Lcdupdate
    Wait 1
    
    I2cstart
          I2cwbyte In_eep
          I2cwbyte Adr_hi
          I2cwbyte Adr_low
          I2cstart
          I2cwbyte Out_eep
          I2crbyte Bufor , Nack
          I2cstop
    
    Waitms 30
    Bufor = Hex(bufor)
    Czytaj = Str(bufor)
    Czytaj = Format(czytaj , "")
    
    Call Lcdinit
         Lcdclear
         Lcdgoxy 1 , 1
         Lcdstr Czytaj , 1 , 0
         Lcdupdate
    Waitms 100
    
    End
    Loop
  • #4 5767052
    M. S.
    Poziom 34  
    Cytat:
    Tylko jeszcze jak dodać przed zmienną Address napis Adres: ?


    Lcdgoxy 1 , 1
       Lcdstr "ADRES = " , 1 , 0
       Lcdstr Str_address , 1 , 0
       Lcdgoxy 1 , 2
       Lcdstr "KOMENDA = " , 1 , 0
       Lcdstr Str_command , 1 , 0
       Lcdupdate





    CO TO JEST!
REKLAMA