Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[BASCOM] Atmega 16 - proste menu opartena select case

MICHAŁ6201 25 Nov 2016 23:05 1335 7
  • #1
    MICHAŁ6201
    Level 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:

    Code: vbnet
    Log in, to see the code


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

    Proszę o pomoc
  • Helpful post
    #2
    Ture11
    Level 38  
    Code: vbnet
    Log in, to see the code

    zamiast tego, powinno być:
    Code: vbnet
    Log in, to see the code
  • #3
    MICHAŁ6201
    Level 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ę:
    Code: c
    Log in, to see the code


    Jak zrobić zapis aby płynnie przeskakiwały ekrany i na koniec wyjście z tej procedury?
  • #4
    Ture11
    Level 38  
    MICHAŁ6201 wrote:

    Code: vbnet
    Log in, to see the code


    Ja bym tu, zamiast warunku IF z returnem, zrobił po prostu zakończenie
    Code: vbnet
    Log in, to see the code
    .

    Nie rozumiem też, po co kolega wprowadza tak często
    Code: vbnet
    Log in, to see the code
    ? Przecież podciąganie klawiatury włączył kolega na początku
    Code: vbnet
    Log in, to see the code
    i nie ma potrzeby jego ponawiania.
  • #5
    User removed account
    User removed account  
  • #6
    Ture11
    Level 38  
    niveasoft wrote:
    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
    Code: vbnet
    Log in, to see the code

    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".
  • #7
    MICHAŁ6201
    Level 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:

    Code: vbnet
    Log in, to see the code


    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:

    Code: vbnet
    Log in, to see the code


    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:

    Code: vbnet
    Log in, to see the code


    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?
  • Helpful post
    #8
    User removed account
    User removed account