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] Atmega 16 - proste menu opartena select case

MICHAŁ6201 25 Lis 2016 23:05 735 7
  • #1 25 Lis 2016 23:05
    MICHAŁ6201
    Poziom 16  

    Witam

    Próbuję zrobić w bascomie proste menu w którym wyświetlałyby się tylko wartości na LCD. Każde kolejne przyciśnięcie przycisku F1 powodowałoby przejście do kolejnego ekranu.

    Próbuję to zrobić za pomocą select case, ale nie działa i nie wiem dlaczego.

    W załączeniu wklejam fragmenty kodu odpowiedzialne za przełączanie ekranów:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    W ogóle po naciśnięciu F1 nie chce wejść do procedury Przewijanie_menu

    Proszę o pomoc

    0 7
  • Pomocny post
    #2 26 Lis 2016 00:26
    Ture11
    Poziom 34  

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    zamiast tego, powinno być:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    0
  • #3 26 Lis 2016 00:59
    MICHAŁ6201
    Poziom 16  

    Faktycznie walnąłem się.

    Ładnie przełącza, ale mam problemy z wyjście z tej procedury.

    Chodzi mi o to, żeby pierwsze naciśnięcie F1 powodowało wyświetlenie "ekran1", kolejne naciśnięcie "ekran2" , a następne powinno spowodować wyście z tej procedury.

    A mi przeskakuje i z ekran2 robi się ekran1, zamiast wyjść.

    Mam teraz tak napisaną tą procedurę:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jak zrobić zapis aby płynnie przeskakiwały ekrany i na koniec wyjście z tej procedury?

    0
  • #4 26 Lis 2016 01:31
    Ture11
    Poziom 34  

    MICHAŁ6201 napisał:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Ja bym tu, zamiast warunku IF z returnem, zrobił po prostu zakończenie
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    .

    Nie rozumiem też, po co kolega wprowadza tak często
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    ? Przecież podciąganie klawiatury włączył kolega na początku
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    i nie ma potrzeby jego ponawiania.

    0
  • #5 26 Lis 2016 01:38
    373522
    Użytkownik usunął konto  
  • #6 26 Lis 2016 01:51
    Ture11
    Poziom 34  

    niveasoft napisał:
    Po pierwsze. Nie ma znaczenia czy przy konfiguracji portu użyjesz PIN czy PORT bo pod uwagę brany jest tylko numer pinu a operacja w obydwu przypadkach dzieje się na rejestrze DDR. Na dowód tego przedstawiam program i wygenerowany kod asm który jest identyczny dla obydwu zapisów.

    Napisałem autorowi, by zmienił Port na Pin, bo któraś wersja Bascoma przy takim zapisie
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    wywalała błąd kompilacji.

    Co do zasadności wpisu Niveasoft, wierzę, że masz rację - ale nie jestem przekonany. Wiele razy miałem problemy z tymi zapisami i zawsze musiałem stosować Config pinx.y zamiast Config Portx.y.

    Przy okazji zacytuję p. Marcina Wiązanię:
    "Bascom umożliwia ustalenie trybu pracy portów oraz ich linii za pośrednictwem instrukcji konfiguracyjnych Config Port dla całych portów oraz Config Pin dla pojedynczych linii portów. Składnia tych instrukcji jest następująca:

    Config Portx = tryb 'ustawia kierunek transmisji portu x
    config pinx.y = tryb 'ustawia kierunek transmisji wybranej linii portu
    "

    Choć sprawdziłem to doświadczalnie przed chwilą w przypadku kierunku Output i nie ma problemów z zapisem "Config portb.2 = output".

    0
  • #7 26 Lis 2016 17:29
    MICHAŁ6201
    Poziom 16  

    Dziękuję Wam za pomoc.
    Menu działa.

    Dorobiłem sobie dwa pliki do odczytu i wyświetlania temperatury na DS18B20.

    Mam plik_glowny.bas

    I pliki do DS18B20 - Config_DS18B20.bas oraz DS18B20.bas

    W celach testów zrobiłem osobny program aby tylko sprawdzić czy popranie działa odczyt temperatury. I działa bezbłędnie.

    Zasada działania tych plików jest następująca:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    I wszystko ładnie działa, temp odczytuje.

    Teraz chciałem to wrzucić do "ekran1" tak aby się wyświetlała temperatura w ekran1.

    I niestety nie działa tak jak chciałem, co prawda odczyta temp, ale ta temp nie zmienia się na bieżąco. Zrobiłem to tak, ale już wiem, że to jest źle:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Jest tu problem z umiejscowieniem $include "DS18B20.bas", ponieważ powinno to być pod pętlą, tak jak w górnym przykładzie podałem.

    Zrobiłem też w ten sposób:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    I teraz na żywo odczytuje temp, ale z tej pętli to już nie chce wyjść, bo kręci się tam w kółko :)

    Doradźcie mi, jak zapiać, aby na bieżąco odczytywało temperaturę i przechodziło po naciśnięciu F1 do następnego ekranu?

    0
  • Pomocny post
    #8 26 Lis 2016 21:02
    373522
    Użytkownik usunął konto