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

Jak stworzyć menu w Bascomie z jednym przyciskiem do wyboru podprogramów?

pmmisiek 18 Lip 2006 19:54 3045 5
REKLAMA
  • #1 2831485
    pmmisiek
    Poziom 15  
    Posty: 234
    Pomógł: 7
    Ocena: 4
    Witam,

    Chciałbym zrealizować proste menu w Bascomie, które wybiera podprogramy za pomocą switcha dołączonego do portu. Każdy podprogram musi być zapętlony, ale po ponownym naciśnięciu przycisku wyboru musi z niego wyjść i przejść do kolejnego podprogramu.


    Wymyśliłem, że to mogło by być tak jak poniżej, ale coś mi się wydaje że można to zrobić lepiej i mniej pamięciożernie

    Jeśli macie jakieś pomysły lub swoje, prostsze menu, to byłbym wdzięczny z pomoc, lub kawałek kodu



    
    Portc.4 = 1                                                 'podciagam port - przycisk
    Dim A As Byte
    Declare Sub Temp
    Declare Sub Temp2
    Declare Sub Nap
    Declare Sub Przyc
    
    Cls
    Do                                                          'petla glowna
       Przyc
       If A = 1 Then
          Temp
       End If
    
       If A = 2 Then
          Temp2
       End If
    
       If A = 3 Then
          Nap
       End If
    
    Loop
    
    Sub Temp                                                    '1 podprogram
       Cls
       Do
       Przyc
       Locate 1 , 1
       Lcd "Temp wynosi     "
       Locate 2 , 1
       Lcd "A = ";A
       Loop Until A <> 1
    End Sub
    
    Sub Temp2                                                   '2 podprogram
       Cls
       Do
       przyc
       Locate 1 , 1
       Lcd "Temp2 wynosi    "
       Locate 2 , 1
       Lcd "A = " ; A
       Loop Until A <> 2
    End Sub
    
    Sub Nap                                                     '3 podprogram
       Do
       przyc
       Locate 1 , 1
       Lcd "Napiecie wynosi "
       Locate 2 , 1
       Lcd "A = " ; A
       Loop Until A <> 3
    End Sub
    
    
    Sub Przyc
       If Pinc.4 = 0 Then
          Waitms 200
          Incr A
       End If
    
       If A = 5 Then
          A = 0
       End If
    
    End Sub
    
  • REKLAMA
  • #2 2832130
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    sama idea zmiany menu za pomocą zmiennej może być , ale po co jeszcze w podrogramach pętla loop until
    po jeszcze dodatkowo w podprogramach odwołujesz się znowu do obsługi przycisku skoro pętla główna sprawdza wartość zminnej A i na tej podstawie uruchamiasz odp podprogram
  • REKLAMA
  • #3 2832372
    pmmisiek
    Poziom 15  
    Posty: 234
    Pomógł: 7
    Ocena: 4
    bogdan_p napisał:
    ... ale po co jeszcze w podrogramach pętla loop until
    po jeszcze dodatkowo w podprogramach odwołujesz się znowu do obsługi przycisku skoro pętla główna sprawdza wartość zminnej A i na tej podstawie uruchamiasz odp podprogram


    Bo jak wejde do zapętlonego podprogramu i w nim nie obsłuże przycisku to nigdy z niego nie wyjde, dlatego w każdym podprogramie jest pętla do loop until i dodatkowo wywołanie obsługi przycisku.

    I dalej mam takie pytanie czy da się to zrobić prościej
  • REKLAMA
  • #4 2832442
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    gdyby zatrudnić przerwanie do sprawdzania stanu przycisku to odpadłby problem sprawdzania przycisku w każdym obrocie pętli :-)
  • REKLAMA
  • #5 2834250
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    Cytat:
    Bo jak wejde do zapętlonego podprogramu i w nim nie obsłuże przycisku to nigdy z niego nie wyjde, dlatego w każdym podprogramie jest pętla do loop until i dodatkowo wywołanie obsługi przycisku.

    ta pętal jest tam niepotrzebna , przecież główna pętla sprawdza stan A na jej podstawie skok do podprogramu , realizacja go i powrót do pętli głównej , jeżeli wartość A nie ulegnie zmianie to powtórnie skok w to samo miejsce , jeżeli się zmieni skok do innego podprogramu , tak więc pętle w podprogramach są niepotrzebne
  • Pomocny post
    #6 2834372
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 51
    pmmisiek napisał:
    ...I dalej mam takie pytanie czy da się to zrobić prościej

    Bascom posiada funkcję skoków do podprogramu w/g indeksu.
    
    Portc.4 = 1                                                 'podciagam port - przycisk
    Dim A As Byte , B As Byte
    Declare Sub Temp
    Declare Sub Temp2
    Declare Sub Nap
    Declare Sub Przyc
    Const Maxa = 2       'maksymalna ilosc podprogramow
    A = 0 : B = 1
    Cls
    Do                                                          'petla glowna
    Debounce Pinc.4 , 0 , Przyc , Sub
    If A <> B Then
       On A Gosub Nap , Temp , Temp2
       A = B
    End If
    Loop
    
    Sub Temp                                                    '1 podprogram
       Cls
       Locate 1 , 1
       Lcd "Temp wynosi     "
       Locate 2 , 1
       Lcd "A = ";A
    End Sub
    
    Sub Temp2                                                   '2 podprogram
       Cls
       Locate 1 , 1
       Lcd "Temp2 wynosi    "
       Locate 2 , 1
       Lcd "A = " ; A
    End Sub
    
    Sub Nap                                                     '3 podprogram
       Locate 1 , 1
       Lcd "Napiecie wynosi "
       Locate 2 , 1
       Lcd "A = " ; A
    End Sub
    
    
    Sub Przyc
          Incr A
          If A > Maxa Then A = 0
    End Sub
    

    Dla jednokrotnego wywołania podprogrqmu j/w.Jeśli aktualnie wybrany podprogram , ma się wykonywać za każdym "obrotem" pętli , usuń cały warunek IF poza On A Gosub.

    Piotrek
REKLAMA