Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[BASCOM]Wyświetlanie ciągu cyfr w jednej lini

slavcio2012 27 Lip 2013 12:24 3471 35
  • #1 27 Lip 2013 12:24
    slavcio2012
    Poziom 15  

    Witam,

    próbuję napisać, by wyświetlić ciąg cyfr, które są przypisywane do zmiennej za pomocą klawiszy tzn.od 0 do 9.

    Jeżeli zastosuję zwykłe locate lcd, to wyświetlają mi się w tym samym miejscu, a ja chcę aby każde liczba, która jest przypisana do każdego klawisza wyświetlała się w ciągu, w jednej linii, czyli coś takiego 25684789 itp .jak to można zrobić?

    0 29
  • #3 27 Lip 2013 13:43
    mickpr
    Poziom 39  

    slavcio2012 napisał:
    jeżeli zastosuje zwykłe locate . lcd to wyświetlają mi się w tym samym miejscu
    Pokaż ten swój kod.

    0
  • #4 27 Lip 2013 13:55
    slavcio2012
    Poziom 15  

    właśnie jeszcze nie mam , zmienna jest liczbą nie tekstem ...

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    mam coś takiego

    0
  • #5 27 Lip 2013 14:26
    tank_driver
    Poziom 16  

    O Matko i Córko...

    Konstrukcja:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Dodałbym jeszcze mechamizm kontroli przy pomocy zmiennej tymczasowej aby nie wyświetlać na LCD tej samej danej co poprzednio wyświetlona (będzie mrugać), oraz ewentualnie ręczny debounce na waitms lub z użyciem przerwania.

    Pozdrawiam!

    0
  • #6 27 Lip 2013 14:43
    mickpr
    Poziom 39  

    slavcio2012 napisał:
    jeżeli zastosuje zwykłe locate . lcd to wyświetlają mi się w tym samym miejscu
    Jeśli parametry kolejnych wywołań locate są takie same,
    slavcio2012 napisał:
    Locate 4 , 1
    to się nie dziw.

    0
  • #7 27 Lip 2013 14:52
    slavcio2012
    Poziom 15  

    a może tak

    If Len(freqtolcd) <= 6 Then
    Freqtolcd = " " + Freqtolcd
    End If
    Lcd Left(freqtolcd , 2)
    Lcd "."
    Lcd Mid(freqtolcd , 3 , 3)
    Lcd "."
    Lcd Right(freqtolcd , 2)

    czyli co tą drugą stałą zamienić na zmienną ? ale tak do końca to ja chcę wprowadzić dane do zmiennej long za pomocą klawiszy do postaci np. 54365542 jak to zrobić ?

    0
  • #8 27 Lip 2013 14:57
    tank_driver
    Poziom 16  

    A co to za hybryda?

    RADA: Skup się na Twoim programie, na HELP-ie do BASCOMA (jest też po polsku na stronie producenta), na dobrej książce (hasło: Wiązania Marcin), nie rób GOOGLE-KOPIUJ-WKLEJ-PRÓBA bo nigdy się nie nauczysz programować. Jeśli nie ogarniesz BASCOM-a to te zabawki nie są dla Ciebie.

    0
  • #9 27 Lip 2013 16:09
    mickpr
    Poziom 39  

    Napisz nam dokładnie - co ten program ma robić, bo na razie to mamy o tym mroczne pojęcie.
    Chcesz wprowadzać jakąś liczbę kolejno przyciskami do zmiennej ?
    I dodatkowo chcesz, aby się wyświetlała w kolejnych pozycjach na wyświetlaczu?
    Od tego są przyciski 0..9, a do czego ma służyć przycisk Gene?
    Jeśli tego nie wyjaśnisz - będziemy krążyć dookoła tematu rzucając mądre rady, które się zdadzą psu na budę.

    0
  • #10 27 Lip 2013 16:15
    Kuniarz
    Moderator Projektowanie

    slavcio2012 napisał:
    zmienna jest liczbą nie tekstem ...

    Dlatego w algorytmie, który Ci pisałem jest funkcja "str" zamieniająca cyfrę na tekst, czyli z cyfry 1 masz "1".
    Aczkolwiek, z tego co widzę, to pojawia się kwestia kropek, czyli autor powoli ukazuje prawdziwy cel zadania - wyświetlenie częstotliwości wklepanej przyciskami prawda ?

    Moja propozycja jest taka:

    - napisz sobie procedurkę, która zwraca w formie bajtu to, co wciśnięto na klawiaturze.
    - napisz procedurę, która ciąg bajtów zmieni w tekst
    - kolejna procedura (albo dołącz to do poprzedniej) wstawi kropki w miejscach ku temu stosownych czyli co tysiąc i co milion.

    Pojawia się zasadnicze pytanie - pomyślałeś o edycji , kiedy ktoś się pomyli we wpisywaniu częstotliwości ?

    P.S. Napisałem kiedyś ustawianie częstotliwości generatora : http://www.youtube.com/watch?v=Fy9VnxwJEYU coś na wzór starych dobrych pieruńsko drogich multimetrów HP.

    0
  • #11 27 Lip 2013 17:21
    slavcio2012
    Poziom 15  

    Tak robię syntezę dds , a właściwie różne dodatki bo sama w sobie działa .Jasne ,że pomyślałem nie przepisze mi do zmiennej freq jak nie nacisnę klawisza enter a jak się pomyli to może wyłączyć załączyć opcję lub ewentualnie tego jeszcze nie mam wrócić ...

    napisałem coś takiego

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    poprawiłem ... a to jest tylko fragment kodu :-)

    0
  • #12 27 Lip 2013 17:36
    Kuniarz
    Moderator Projektowanie

    Ech, Kolego, z całym szacunkiem, ale to stek bzdur...
    Spróbuj napisać oddzielną procedurę, która wywołana jest tak długo w pętli, aż nie zostanie wciśnięta cyfra,albo ENTER.
    Od tego musisz zacząć.

    EDIT:

    Po tych poprawkach można uznać, że mniej-więcej dobrze Ci się to pojawia na LCD, ale nadal nie masz wartości częstotliwości dla DDSa ! Musisz zbudować zmienną tekstową obrazującą zmienną liczbową.

    0
  • #13 27 Lip 2013 18:09
    slavcio2012
    Poziom 15  

    czyli jak ?

    0
  • #14 27 Lip 2013 18:15
    Kuniarz
    Moderator Projektowanie

    Kuniarz napisał:
    Zdefiniuj zmienną tekstową.
    Wyzeruj ją na początku : tekst = ""
    w pętli dodajesz do tekstu znak klawisza: tekst = tekst + str(cyfra)
    następnie wyświetlasz zawsze od tej samej pozycji : locate 1,1 : lcd tekst


    ...czyli mniej więcej tak, jak pisałem dawno temu :)
    Zasadnicze pytanie - czy pisałeś cokolwiek w Bascom i wiesz mniej-więcej o co chodzi z rodzajami zmiennych itp.
    Jeśli złożysz sobie zmienną tekstową np. "1200400" to później komendą "val" zmienisz ją na wartość liczbową, którą dalej użyjesz przy sterowaniu DDS.
    Mówiąc krótko, skup się na tym, żeby uzyskać napis na LCD w formie zmiennej tekstowej, następnie przekształcisz sobie to w liczbę. Możesz oczywiście równolegle tworzyć zmienną liczbową.

    0
  • #15 27 Lip 2013 18:27
    slavcio2012
    Poziom 15  

    zmienna freqtolcd , jest zmienną tekstową

    0
  • #17 27 Lip 2013 18:46
    tank_driver
    Poziom 16  

    Mam inny pomysł:

    8 klawiszy do sterowania częstotliwością, ok, 8 pól po możliwych dziesięc cyfr daje nam zakres 00 000 000 <> 99 999 999.

    Ładujemy to w zmienną typu "dword" i tą zmienną wyświetlamy na ekranie LCD (po przekształceniu na string i formatowaniu do 8 cyfr).

    Przyciskami 0-7 dodajemy kolejno do zmiennej dword (od prawej):

    7: zmienna = zmienna + 1
    6: zmienna = zmienna + 10
    5: zmienna = zmienna + 100
    4: zmienna = zmienna + 1000
    3: zmienna = zmienna + 10000
    2: zmienna = zmienna + 100000
    1: zmienna = zmienna + 1000000
    0: zmienna = zmienna + 10000000

    Musimy również wykryć "przeskok" z 9 do 0 w danym polu i tutaj odjąć:

    7: zmienna = zmienna - 9
    6: zmienna = zmienna - 90
    ...

    W ten sposób w pamięci uP zawsze mamy aktualną wartość zmiennej czestotliwość (dword) której nie trzeba konwertować, a na LCD wyświetlamy ją po formatowaniu do 8 pozycji.

    Nie podam gotowego rozwiązania bo nie chce mi się klepać kodu ale choć trochę wprawieni nie powinni mieć z tym najmniejszego problemu.

    Co o tym myślicie?

    0
  • #18 27 Lip 2013 18:56
    slavcio2012
    Poziom 15  

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    to jest mały wycinek kodu nie umie stworzyć z zmiennej Lcd_key (nie wiem jakiego typu ma być )takiej , która by pasowała do zmiennej freq , która jest typu long

    0
  • #19 27 Lip 2013 19:03
    tank_driver
    Poziom 16  

    Ten program to sh..t -> daleko na nim nie ujedziesz gdyż jest zupełnie nielogiczny. Pomyśl o czym pisałem post wyżej i rusz w końcu z miejsca :)

    0
  • #20 27 Lip 2013 21:23
    slavcio2012
    Poziom 15  

    jeżeli napiszę coś takiego to działa Freq_key = "2100000"
    Freq = Val(freq_key)

    ale nie ma pojęcia jak złożyć tą wartość w " " klikając na poszczególne klawisze

    0
  • #21 27 Lip 2013 21:30
    tank_driver
    Poziom 16  

    Tak?

    "8 klawiszy do sterowania częstotliwością, ok, 8 pól po możliwych dziesięc cyfr daje nam zakres 00 000 000 <> 99 999 999.

    Ładujemy to w zmienną typu "dword" i tą zmienną wyświetlamy na ekranie LCD (po przekształceniu na string i formatowaniu do 8 cyfr).

    Przyciskami 0-7 dodajemy kolejno do zmiennej dword (od prawej):

    7: zmienna = zmienna + 1
    6: zmienna = zmienna + 10
    5: zmienna = zmienna + 100
    4: zmienna = zmienna + 1000
    3: zmienna = zmienna + 10000
    2: zmienna = zmienna + 100000
    1: zmienna = zmienna + 1000000
    0: zmienna = zmienna + 10000000

    Musimy również wykryć "przeskok" z 9 do 0 w danym polu i tutaj odjąć:

    7: zmienna = zmienna - 9
    6: zmienna = zmienna - 90 "

    0
  • #22 27 Lip 2013 21:35
    slavcio2012
    Poziom 15  

    sorki ale zapisu nie rozumie

    0
  • #23 27 Lip 2013 21:50
    tank_driver
    Poziom 16  

    Na jego podstawie dopiero należy stworzyć kod programu, to co podałem to tylko pomysł jak to wykonać w prosty i estetyczny sposób. Każdą z tych pakietów instrukcji możesz opakować w podprogram i wołac instrukcją DEBOUNCE. Pakiet instrukcji może wyglądać tak (nie testowane w kompilatorze, posłużyć się jako bazą):

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #24 28 Lip 2013 06:01
    slavcio2012
    Poziom 15  

    napisałem coś takiego i zmiennej freq przypisuje mi ostatnią liczbę

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    jak napisać pętle by naciskając klawisze do zmiennej freq_key były zapisane wszystkie liczby,po kliknięciu klawiszy ?

    dziś napisałem taki kod ale też nie działa

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #25 28 Lip 2013 10:50
    tank_driver
    Poziom 16  

    "jak napisać pętle by naciskając klawisze do zmiennej freq_key były zapisane wszystkie liczby,po kliknięciu klawiszy ? " -> niezbyt to precyzyjne.

    Wszystko zostało już napisane, obsługa klawiszy w pętli, zmiena wartości zmiennej o jednostki, dziesiątki, setki itp. Chaotycznie modyfikując program (Lcd_key = Lcd_key ??) i wgrywając go do uP niczego nie osiągniesz. Tutaj trzeba ROZUMIEĆ (lub chociaż starać się zrozumieć) jak to działa.

    Ja również pass, sorry. Powodzenia!

    0
  • #26 28 Lip 2013 16:38
    slavcio2012
    Poziom 15  

    Próbuje za pomocą takiego kodu

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    ale po naciśnięciu przycisku cały wyświetlacz mam wypełniony znakami

    0
  • Pomocny post
    #27 28 Lip 2013 19:16
    Kuniarz
    Moderator Projektowanie

    Musisz po wykryciu wciśnięcia przycisku czekać w pustej pętli na jego puszczenie.

    ...uprzedzając pytanie "jak" wrzucam moją propozycję kodu, przejrzyj, przemyśl, dorzuć do swojego programu.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #28 28 Lip 2013 20:37
    slavcio2012
    Poziom 15  

    Ok przetestuje, a jaką wartość stringa ma klawisz z przykładu ?

    0
  • #30 29 Lip 2013 05:56
    slavcio2012
    Poziom 15  

    Dopisałem dalsze przyciski

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
    ale nie rozumie dlaczego każdego przycisku jest liczba 10 ?

    0