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

[BASCOM][LCD 16x1] Problem z napisaniem programu

biglolo94 13 Gru 2009 22:34 2127 6
REKLAMA
  • #1 7385825
    biglolo94
    Poziom 16  
    Witam,

    mam problem z napisaniem programu ktorego zadaniem bedzie przewijanie tekstu gdy np.: przycisk bedzie wcisniety , lecz gdy go poscimy aby tekst nie wracal na sam poczatek no i takze aby mozna bylo ustawic predkosc przewijania.

    Pozdrawiam i za pomoc bede sklonny ofiarowac 15pkt
  • REKLAMA
  • #2 7386613
    Kuniarz
    Moderator Projektowanie
    Pokaż co już dotąd napisałeś.
    Proponuję też zajrzeć do książki M.Wiązani, na stronie 210 masz przykład obsługi 2x16 (1x16 wymaga tylko jednej zmiany).
    W skrócie:
    definiujesz zmienna tekstową a w niej "tekst do wyswietlenia"
    następnie w pętli:

    do
    czekasz na wcisniecie przycisku
    czekasz chwilke
    sprawdzasz czy nadal wcisniety (eleminacja drgan stykow)
    jesli nadal wcisniety to :
    wycinasz ze zmiennej tekstowej 16 znaków
    wyświetlasz je na lcd
    czekasz chwile (ta chwila to predkosc przesuwania)
    zwiekszasz o 1 znacznik poczatku wycinanego tekstu
    jesli znacznik = dlugosc tekstu, to znacznik =1, czyli zaczynasz tekst od poczatku
    loop

    ;-)
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #3 7387098
    manekinen
    Poziom 29  
    Najprościej wysłać do lcd 40 znaków i użyć polecenia Shiftlcd Left do przewijania, to jest najprostrze rozwiązanie. Lub jak pisze Kuniarz, zrób sobie zmienną tekstową i wycinaj z niej 16 znaków i wysyłaj. Patrz w helpie polecenie MID.
  • REKLAMA
  • #4 7388766
    biglolo94
    Poziom 16  
    Funkcja mid nie dziala i wogle jej nie rozumiem.
    Z tym pierwszym sposobem poprubuje w weekend a teraz jak mozecie pomozcie mi z tym:

      $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 1a
    
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    
    Config Rc5 = Pind.3
    Dim Address As Byte , Command As Byte
    Enable Interrupts
    Cursor Off
    
    Do
    Getrc5(address , Command)
    Command = Command And &B01111111
    Cls
    Lcd "Adr: " ; Address
    Lowerline
    Lcd "Com: " ; Command
    
    If Address = 0 And Command = 1 Then
    Cls
    Lcd "Bardzo dłuuuuuuuuuuuuuuugi tekst"
     wait 1
    Shiftlcd Right
    End If
    
    Loop
    End


    Nie stety ale nie dziala powinno przeijac teks ale nic z tego :/
  • REKLAMA
  • #6 7389513
    Kuniarz
    Moderator Projektowanie
    Z pętli do-loop wywal CLSy, do tego masz LCD "Bardzo dluuugi tekst", czekasz sekunde, przewijasz go w prawo... po czym za chwile robisz CLS i znów wyświetlasz tekst - w takim przypadku nie będzie sie przewijał, tylko wciąż będzie "Bardzo dluuuugi tekst" na wyswietlaczu.
    Użyj komendy LCD tylko raz, później tylko przewijaj.
    Pomogłem? Kup mi kawę.
  • #7 7390257
    biglolo94
    Poziom 16  
    Ok fajnie dzieki wszystkim za pomoc juz prawie wszystko gra tylko jeszce mam pproblem z tym:
      $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 1a
    
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    
    Config Rc5 = Pind.3
    Dim Address As Byte , Command As Byte
    Enable Interrupts
    Cursor Off
    Dim S As String * 16
    Dim Stala As String * 60
    Dim I As Byte
    Stala = "          THE BEST OF GAMES          "
    Do
    Getrc5(address , Command)
    Command = Command And &B01111111
    Cls
    Lcd "Adr: " ; Address
    Lowerline
    Lcd "Com: " ; Command
    
    If Address = 0 And Command = 1 Then
    Cls
    For I = 1 To 16
       S = Mid(stala , I , 16)
       Locate 1 , 1
       Lcd S
       Waitms 400
     Next I
    
    End If
    
    Loop
    End


    Mam wyswietlacz 16x1 i gdy tekst dojdzie do 8 to zle wyswietla gdyz tak jak by wyswitlacz byl podzielony na dwie czesi i wyswietla na nich tekst w roznym tempie. (lewa strona jakby byla opozniona)
    I jeszcze jak zmienic aby tekst byl pokazywany kolejno po jednej literce??
REKLAMA