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] + LCD3310 + 24C64 - chr z eeprom.

Ficu 12 Kwi 2009 23:21 2422 7
REKLAMA
  • #1 6407705
    Ficu
    Poziom 31  
    Witam,
    nie poddaje się ;D Znowu próbuje coś zdziałać z bascomem. Aktualnie problem polega na zmienienie wartości string odczytanej z eeprom na zwykły tekst.
    Dla alfanumerycznego lcd było prosto: LCD Chr(dana).

    Aktualnie na lcd wyświetlają się cyfry.
    W eeprom zapisany jest tekst i chcę go wyświetlić na lcd.
    Program:
    
    $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
    Config Sda = Portc.1
    Config Scl = Portc.0
    
    '------------------------------ LCD vars  --------------------------------------
    Dim Adr_eep As Word At &H8F                                 'Taka nietypowa zmienna
    Dim Adr_low As Byte At &H8F Overlay                         'jest jedna?, mimo iż
    Dim Adr_hi As Byte At &H90 Overlay
    
    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 Address2 As Byte , Command2 As Byte
    Dim A As Word
    
    Dim Tekst_eep As Byte
    Dim Czytaj As Byte
    Dim Czytaj_str As String * 100
    
    '------------------------------ 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
    
    Const In_eep = 160                                          'Adresy dla EEPROM
    Const Out_eep = 161
    Const Max_eep = 65536                                 '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
    Declare Sub Show(byval Xx As Byte , Byval Yy As Byte)
    'show bitmap from program memory. XX 1 to (84-_width), YY 1 to 6 (n*8)
    Declare Sub Clearshow(byval Xx As Byte , Byval Yy As Byte)
    'clear window last show
    
    Declare Sub Odczyt
    
    '------------------------------ LCD Init ---------------------------------------
    
    
    
    
    
    
    Sub Odczyt
    Home Upper
    Call Lcdinit
       I2cstart
       I2cwbyte In_eep
       I2cwbyte Adr_hi
       I2cwbyte Adr_low
       I2cstart
       I2cwbyte Out_eep
       For A = 1 To 32
          I2crbyte Tekst_eep , Ack
          If Tekst_eep < 128 Then
             Czytaj_str = Str(tekst_eep)
             Czytaj_str = Chr(czytaj_str)
             Lcdclear
             Lcdgoxy 1 , 1
             Lcdstr Czytaj_str , 1 , 0
             Lcdupdate
          End If
       Next A
       I2crbyte Tekst_eep , Nack
       If Tekst_eep < 128 Then
          Czytaj_str = Str(tekst_eep)
          Czytaj_str = Chr(czytaj_str)
          Lcdclear
          Lcdgoxy 1 , 1
          Lcdstr Czytaj_str , 1 , 0
          Lcdupdate
       End If
       I2cstop
    End Sub
    
    
    
    
    
    
    
    
    '*******************************************************************************
    '*----------------------------- 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
    
    '--------------------- Show ----------------------
     'XX 1 to (84-_width), YY 1 to 6 (n*8)
     'must be RESTORE "data to show" before CALL it subrotine
    Sub Show(xx As Byte , Yy As Byte)
       Local Swidth As Byte
       Local Shigh As Byte
       Local Cacheidx As Word
       Local I As Byte
       Local J As Byte
       Local K As Byte
       Local L As Byte
       Read Swidth
       Read Shigh
       K = Yy + Shigh
       K = K - 1
       L = Xx + Swidth
       L = L - 1
       If K > 6 Then Goto End_show
       If L > 84 Then Goto End_show
    
       For I = Yy To K
       Cacheidx = I - 1
          Cacheidx = Cacheidx * 84
          Cacheidx = Cacheidx + Xx
          For J = Xx To L
             Read Ch
             Lcd_cache(cacheidx) = Ch
             Incr Cacheidx
          Next J
       Next I
       Updatelcd = 1
       End_show:
    End Sub
    
    '--------------------- ClearShow ----------------------
    'XX 1 to (84-_width), YY 1 to 6 (n*8)
    'must be RESTORE "data to show" before CALL it subrotine
    Sub Clearshow(xx As Byte , Yy As Byte)
       Local Swidth As Byte
       Local Shigh As Byte
       Local Cacheidx As Word
       Local I As Byte
       Local J As Byte
       Local K As Byte
       Local L As Byte
       Read Swidth
       Read Shigh
       K = Yy + Shigh
       K = K - 1
       L = Xx + Swidth
       L = L - 1
       For I = Yy To K
       Cacheidx = I - 1
          Cacheidx = Cacheidx * 84
          Cacheidx = Cacheidx + Xx
          For J = Xx To L
             Lcd_cache(cacheidx) = 0
             Incr Cacheidx
          Next J
       Next I
       Updatelcd = 1
    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 6408025
    wader_669
    Poziom 28  
    Caly kod masz jakos dziwnie napisany. Ja mam obsluge w bascomie ktora zajmuje polwe twojego kodu plus przyciski, termometr i eeproam na i2c.
    Nie rozumiem w czym masz problem, po prostu zmienne z eeprom zapisujesz do stringa (w sram w procku) i to wyswietlasz.
  • REKLAMA
  • #4 6408161
    Ficu
    Poziom 31  
    dawid512 napisał:
    Może tak?
    
    Dim A As String * 1
    Dim B As String * 1
    
    A = "z"
    B = Chr(a)
    
    Cls
    Locate 1 , 1
    Lcd B


    Zrobiłem tak:
    Sub Odczyt
    Home Upper
    Call Lcdinit
       I2cstart
       I2cwbyte In_eep
       I2cwbyte Adr_hi
       I2cwbyte Adr_low
       I2cstart
       I2cwbyte Out_eep
       For A = 1 To 32
          I2crbyte Tekst_eep , Ack
          If Tekst_eep < 128 Then
             Czytaj_str = Str(tekst_eep)
             Czytaj_str_chr = Chr(czytaj_str)
             Lcdclear
             Lcdgoxy 1 , 1
             Lcdstr Czytaj_str_chr , 1 , 0
             Lcdupdate
          End If
       Next A
       I2crbyte Tekst_eep , Nack
       If Tekst_eep < 128 Then
          Czytaj_str = Str(tekst_eep)
          Czytaj_str_chr = Chr(czytaj_str)
          Lcdclear
          Lcdgoxy 1 , 1
          Lcdstr Czytaj_str_chr , 1 , 0
          Lcdupdate
       End If
       I2cstop
    End Sub

    I wyświetla się to samo na lcd - pojedyncze cyfry.

    wader_669 napisał:
    Caly kod masz jakos dziwnie napisany. Ja mam obsluge w bascomie ktora zajmuje polwe twojego kodu plus przyciski, termometr i eeproam na i2c.
    Nie rozumiem w czym masz problem, po prostu zmienne z eeprom zapisujesz do stringa (w sram w procku) i to wyswietlasz.


    Dziwnie - trudno, to są początki. Ciesze się, że potrafisz programować, ale nie wiem czy od początku od razu potrafiłeś pisać super programy.
    Niby łatwo: odczytam z eeprom, zapisuje w stringa, zmieniam stringa (chr) i wyświetlam na LCD. Teoretycznie powinno działać, ale nie działa ;/
  • REKLAMA
  • Pomocny post
    #5 6408947
    miskrzys
    Poziom 13  
    Witam
    Jeśli dobrze rozumiem zdanie:
    "na zmienienie wartości string odczytanej z eeprom na zwykły tekst"
    masz na myśli zamianę liczby (zapisanej w kodzie ASCII ?) na jej odpowiednik znakowy.
    Program, który wykorzystałeś bazuje na kodach ASCII znaków, (komentarz przed tabelą znaków Fontlookop), dlatego też po mojemu niepotrzebnie stosujesz zapis:
    Czytaj_str = Str(tekst_eep)
    Czytaj_str = Chr(czytaj_str)
    zamień go może na:
    Czytaj_str = Chr(tekst_eep)
    Po wtóre rozumiem, że kod procedury "odczyt", wynika z chwilowej potrzeby przetestowania jej działania do odczytu pojedynczego znaku.

    pozdrawiam serdecznie
    Krzysztof Miś
  • #6 6409150
    Ficu
    Poziom 31  
    miskrzys,
    właśnie kilka chwil temu doszedłem, że wystarczy tylko string = Chr(bufor), dodatkowo jeszcze kilka poprawek i ruszyło.
    Do
    Call Lcdinit
    Lcdclear
    Lcdgoxy 1 , 1
    Home Upper
       I2cstart
       I2cwbyte In_eep
       I2cwbyte Adr_hi
       I2cwbyte Adr_low
       I2cstart
       I2cwbyte Out_eep
       For A = 1 To 96
          I2crbyte Txt , Ack
          If Txt < 128 Then
             Czytaj = Chr(txt)
             Lcdstr Czytaj , 1 , 0
             Lcdupdate
          Else
             Lcdstr " " , 1 , 0
             Lcdupdate
          End If
       Next A
       I2crbyte Txt , Nack
       If Txt < 128 Then
          Czytaj = Chr(txt)
             Lcdstr Czytaj , 1 , 0
             Lcdupdate
          Else
             Lcdstr " " , 1 , 0
             Lcdupdate
       End If
       I2cstop
    Waitms 1000
    Loop

    Może jeszcze coś zmienić w procedurze odczytu?
    Docelowo ma to działać z przyciskami/pilotem; jak nacisnę S1 to wyświetl kolejne 96 znaków na lcd.
  • #7 6409268
    wader_669
    Poziom 28  
    zle to robisz, najlepiej odrazu ladowac zmnienne z eepromu do stringa a nie kombinowac tak jak ty (po co niepotrzebnie marnowac miejsce na 2 zmienne).

    
    dim txt as string*1
    Do
    Call Lcdinit
    Lcdclear
    Lcdgoxy 1 , 1
    Home Upper
       I2cstart
       I2cwbyte In_eep
       I2cwbyte Adr_hi
       I2cwbyte Adr_low
       I2cstart
       I2cwbyte Out_eep
       For A = 1 To 96
          I2crbyte Txt , Ack
          If Txt < 128 Then
             Lcdstr txt , 1 , 0
             Lcdupdate
          Else
             Lcdstr " " , 1 , 0
             Lcdupdate
          End If
       Next A
       I2crbyte Txt , Nack
       If Txt < 128 Then
          Czytaj = Chr(txt)
             Lcdstr Czytaj , 1 , 0
             Lcdupdate
          Else
             Lcdstr " " , 1 , 0
             Lcdupdate
       End If
       I2cstop
    Waitms 1000
    Loop
    


    2 napewno nie ma sie przesuwac co 96 znakow tylko 84 (14*6 tyle mozesz wyswietlic znakow na lcd)

    Radze ci poczytac helpa i zrozumiec jak dziala kod z ktorego korzystasz
  • Pomocny post
    #8 6409298
    miskrzys
    Poziom 13  
    Witam ponownie
    Zastanawiałem się, czemu ma służyć deklaracja dość dużej zmiennej tekstowej:
    Dim Czytaj_str As String * 100
    Przy zastosowaniu wcześniej omawianego programu obsługi LCD, na ekranie zmieścisz 14 znaków w 6 liniach, co daje 84 znaki.
    Po drugie, według zamieszczonego kodu do ww. zmiennej wpisujesz tylko jeden znak więc:
    Dim Czytaj_str As String * 1
    w zupełności wystarczy.

    Poza powyższymi uwagami, jeśli cały program ma służyć tylko i wyłącznie odczytywaniu zapisanej "gdzieś tam" pamięci w sposób przez Ciebie zaprezentowany, to możesz zrezygnować z dość znacznej części kodu obsługi wyświetlacza LCD (podwójna wielkość liter, inwersja koloru znaku, procedura show, clearshow itp., itd.)

    pozdrawiam
    Krzysztof Miś
REKLAMA