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 x51 - usuwanie zbędnych zer i kreski na LCD przy zmianie liczby

jaroslawk 22 Sie 2005 19:00 1022 4
REKLAMA
  • #1 1755366
    jaroslawk
    Poziom 21  
    Posty: 634
    Pomógł: 30
    Ocena: 13
    Jak można w Bascom x51 zmieniać (przesuwać) długość liczby wyświetlanej na LCD. Przykładowy program przedstawia problem. Jak przechodzę z liczby 100 na 99 to pozostaje nie potrzebne zero na wyświetlaczu , a jak przechodzi z 10 na 9 to pozostają dwa zera. Kolejny problem którego chcę się pozbyć to kreska za wyświetlaną liczbą „_”.

    Dim I As Integer
    Dim Licz As Integer
    Licz = 140
    Cls
    Lcd "X="
    For I = Licz To 0 Step -1
    Locate 1 , 4
    Lcd I
    Waitms 500
    Next I
    Cls
    Lcd "Koniec"
  • REKLAMA
  • Pomocny post
    #2 1755422
    KwoiteK
    Poziom 16  
    Posty: 112
    Pomógł: 14
    Ocena: 10
    zera zostaja bo ich nie kasujesz wcesniej tylko nadpisujesz. powyzej 99 liczba zajmuje 3 pozycje ponizej 100 juz tylko 2. jezeli nie usuniesz 3 to bedzie sie wyswietlac az nie nadpiszesz lub nie wyczyscisz wyswietlacza.

    For I = Licz To 0 Step -1
    Locate 1 , 4
    lcd " "
    Locate 1 , 4
    Lcd I
    Waitms 5
    Next I

    wyswietla 3 spacje, dziala szybciej niz cls bo nie czysci wszystkiego.
    jesli chodzi o kursor to dodaj na poczatku programu

    cursor off

    Pozdrawiam
  • REKLAMA
  • #3 1755844
    jaroslawk
    Poziom 21  
    Posty: 634
    Pomógł: 30
    Ocena: 13
    Jeden problem rozwiązany

    Jak zrobić zmienny waitms. Chodzi mi o możliwość zamiany szybkości wykonywania tej pętli. Napisałem cos takiego ale nie bardzo chce działać
    For I = Suma To 0 Step -1
    
    Lcd " "
    Locate 1 , 1
    Lcd "l=" ; I ; "c=" ; Czas
    Set P3.0
    
    Debounce Poz , 0 , Czasplus , Sub
    Debounce Zmien , 0 , Czasminus , Sub
    
    Waitms Czas
    
    Reset P3.0
    Next I
    Cls
    Lcd "Koniec"
    
    Wait 2
    Return
    
    Czasplus:
    If Czas = 1000 Then
    Czas = 1000
    Else
    Czas = Czas + 10
    End If
    
    Return
    
    
    Czasminus:
    If Czas = 10 Then
    Czas = 10
    Else
    Czas = Czas - 10
    End If
    Return
  • REKLAMA
  • Pomocny post
    #4 1757962
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    jaroslawk napisał:
    Jeden problem rozwiązany

    Jak zrobić zmienny waitms...

    Zerknąć do Help-a i tam przeczytać , że argumentem funkcji Waitms jest Byte , czyli maksymalna wartość to 255.
    Jeśli dokładność odmierzanego czasu może być PI * OKO , to skorzystać z dobrodziejstwa , jakim jest Subroutine(Arg) lub Gosub To Label.Jeśli chcemy osiągnąć w miarę dużą dokładność , to ... pozostają timery.Ponieważ rozdzielczość opóźnień w Twoim programie to 10ms , wystarczy utworzyć procedurę z opóźnieniem 10ms i wywoływać ją tyle razy ile ... trzeba.
    
    Dim Czas as Byte,X As Byte
    ...
    'wywołujemy opóźnienie 580ms
    Czas=58
    Gosub Delay10ms
    ...
    Delay10ms:
    For X=1 To Czas
       Waitms 10
    Next X
    ...
    

    Ktoś może zapytać "dlaczego pętla FOR ... NEXT a nie np. WHILE ... WEND " , ano dlatego że pierwsza zużywa mniej pamięci.
    Świat mikrokontrolerów (i nie tylko) należy do ciekawskich i ktoś kto ma klapki na oczach , daleko w nim nie zajdzie :(
    To taka moja luźna uwaga ;)

    Teraz powrócę do 1-szego Twojego problemu ze pozostającymi zerami na wyświetlaczu.Kolega KwoiteK , podsunął prawidłowe rozwiązanie , ale czy optymalne :?: Raczej nie :( Można zrobić tak:
    
    For I = Licz To 0 Step -1
    Locate 1 , 4
    Lcd I;" "       '1 spacja
    Waitms 5
    Next I
    

    Ale to też nie jest optymalna opcja.Najmniej pamięciożerna opcja to:
    
    ...
    Lcd I;Spc(1)
    ...
    

    Tu kończę moje wywody :wink:

    Piotrek
  • #5 1981289
    jaroslawk
    Poziom 21  
    Posty: 634
    Pomógł: 30
    Ocena: 13
    Wielkie dzięki dla kolegi zumek.
    Rozwiązanie Spc(1) pomogło.

    Temat uważam za zamknięty.
REKLAMA