Untitled

 avatar
unknown
plain_text
a year ago
2.4 kB
7
Indexable
#include <xc.h>
#include <libpic30.h>

#define SWITCH_NEXT PORTBbits.RB0
#define SWITCH_PREV PORTBbits.RB1
#define LEDS PORTA

// Deklaracje funkcji dla podprogramów
void program1();
void program2();

// Zmienna przechowująca aktualnie wybrany podprogram
unsigned char currentProgram = 1;

// Implementacja podprogramów

void program1() {
    unsigned char counter = 0;
    while(1) {
        LEDS = counter; // Wyświetl wartość licznika na diodach LED
        counter++;
        if(counter == 0) // Jeśli licznik przekroczy wartość 255, wróć do zera
            break;
    }
}

void program2() {
    unsigned char counter = 255;
    while(1) {
        LEDS = counter; // Wyświetl wartość licznika na diodach LED
        counter--;
        if(counter == 255) // Jeśli licznik spadnie do zera, wróć do 255
            break;
    }
}

int main(void) {
    // Konfiguracja przycisków i diod LED
    TRISA = 0x00; // Diod LED jako wyjścia
    TRISB = 0x03; // Przyciski jako wejścia, RB0 - switch_next, RB1 - switch_prev
    
    // Początkowe wywołanie pierwszego podprogramu
    program1();
    
    while(1) {
        if(SWITCH_NEXT == 0) { // Jeśli przycisk przełączania w przód jest naciśnięty
            currentProgram++; // Zwiększ numer aktualnego podprogramu
            if(currentProgram > 2) // Jeśli przekroczono liczbę podprogramów, wróć do pierwszego
                currentProgram = 1;
            
            // Wywołaj aktualny podprogram
            if(currentProgram == 1)
                program1();
            else if(currentProgram == 2)
                program2();
            
            while(SWITCH_NEXT == 0); // Poczekaj aż przycisk zostanie zwolniony
        }
        else if(SWITCH_PREV == 0) { // Jeśli przycisk przełączania w tył jest naciśnięty
            currentProgram--; // Zmniejsz numer aktualnego podprogramu
            if(currentProgram < 1) // Jeśli przekroczono liczbę podprogramów, wróć do ostatniego
                currentProgram = 2;
            
            // Wywołaj aktualny podprogram
            if(currentProgram == 1)
                program1();
            else if(currentProgram == 2)
                program2();
            
            while(SWITCH_PREV == 0); // Poczekaj aż przycisk zostanie zwolniony
        }
    }
    
    return 0;
}
Editor is loading...
Leave a Comment