Вы вошли на сайт, как Гость
Регистрация

Генерация звука, звуковые библиотеки

Генерация звука, звуковые библиотеки.
(Example №10)

Звуковые сигналы часто используются, когда необходимо привлечь внимание пользователя, подтвердить, что некоторые из кнопок нажата, предупредить, что минимальные или максимальные значения достигаются, и т.д. Это может быть просто "сигнал", а может быть мелодия. Этот пример демонстрирует генерацию звука с помощью функции принадлежащий звуковой библиотеке.

/*Header******************************************************/
    
void Tone1() {
    Sound_Play(659, 250);         // Частота = 659Hz, длительность = 250ms
}

void Tone2() {
    Sound_Play(698, 250);         // Частота = 698Hz, длительность = 250ms
}

void Tone3() {
    Sound_Play(784, 250);         // Частота = 784Hz, длительность = 250ms
}

void Melody1() {                  // Мелодия 1
    Tone1(); Tone2(); Tone3(); Tone3();
    Tone1(); Tone2(); Tone3(); Tone3();
    Tone1(); Tone2(); Tone3();
    Tone1(); Tone2(); Tone3(); Tone3();
    Tone1(); Tone2(); Tone3();
    Tone3(); Tone3(); Tone2(); Tone2(); Tone1();
}

void ToneA() {                    // Тон A
    Sound_Play(880, 50);
}

void ToneC() {                    // Тон C
    Sound_Play(1046, 50);
}

void ToneE() {                    // Тон E
    Sound_Play(1318, 50);
}

void Melody2() {                  // Мелодия 2
    unsigned short i;
    for (i = 9; i > 0; i--) {
        ToneA(); ToneC(); ToneE();
    }
}

void main() {
    ANSEL = 0;                    // Все порты I/O настроены как цифровые
    ANSELH = 0;
    TRISB = 0xF0;                 // Входы RB7-RB4 настроены на вход,
                                  // RB3 на вывод
    
    Sound_Init(&PORTB, 3);
    Sound_Play(1000, 500);
    
    while (1) {
        if (Button(&PORTB,7,1,1)) // RB7 генерирует Тон1
            Tone1();
        while (PORTB & 0x80) ;    // Ждём нажатия кнопки
        
        if (Button(&PORTB,6,1,1)) // RB6 генерирует Тон2
            Tone2();
        while (PORTB & 0x40) ;    // Ждём нажатия кнопки
        
        if (Button(&PORTB,5,1,1)) // RB5 генерирует Мелодию 2
            Melody2();
        while (PORTB & 0x20) ;    // Ждём нажатия кнопки
        
        if (Button(&PORTB,4,1,1)) // RB4 генерирует Мелодию 1
            Melody1();
        while (PORTB & 0x10) ;    // Ждём нажатия кнопки
    }
}

Для того, чтобы этот пример работал правильно, нужно поставить галочку в библиотеке Button и Sound в Library Manager до компиляции.