- Функции для звука
Функции для звука
Среда MikroC предоставляет звуковую библиотеку, которая позволяет организовать звуковую сигнализацию в разрабатываемом устройстве. Для этого потребуется только пьезоэлектрический излучатель и назначенный порт.
Библиотека включает в свой состав функцию инициализации Sound_Init и функцию формирования звука Sound_Play. Описание этих функций приведено в таблицах 39 и 40 соответственно.
Таблица 39. Описание функции Sound_Init
Прототип | void Sound_Init(unsigned short *port, unsigned short pin) |
Возвращаемое значение | Нет |
Описание | Настраивает для микроконтроллера вывод pin порта port на выход |
Требования | Номер вывода должен быть в диапазоне 0 – 7 |
Пример | Sound_Init(&PORTB, 2); // Инициализирует генерацию звука на RB2 |
Таблица 40. Описание функции Sound_Play
Прототип | void Sound_Play(unsigned short period_div_10, unsigned num_of_periods) |
Возвращаемое значение | Нет |
Описание | Воспроизводит звук на заданном порту и выводе, заданном с помощью функции Sound_Init. Аргумент period_div_10 – период звуковой частоты в циклах микроконтроллера, поделенный на 10. Генерация звука продолжается в течение заданного аргументом (num_of_periods) числа периодов |
Требования | Чтобы звук воспроизводился, необходимо подключение пьезоэлектрического излучателя (или другого звукового излучателя) на заданном выводе порта. Кроме того, перед выводом следует вызвать функцию Sound_Init, чтобы подготовить аппаратуру к генерации звука |
Пример | Требуется воспроизвести звук частотой 1 кГц, период которого составляет T = 1/f = 1 мс или 1000 циклов для частоты 4 МГц. Отсюда можно определить первый аргумент: period_div_10=1000/10 = 100. Тогда проиграть num_of_periods=150 периодов можно вызовом функции: Sound_Play(100, 150) |
Следующий пример демонстрирует использование функций звуковой библиотеки для генерации тонового сигнала с помощью пьезоэлектрического излучателя. Данный программный код может быть использован на любом микроконтроллере, который имеет PORTB и АЦП на порту PORTA. Частота звука задаётся входным напряжением АЦП (младший байт кода этого напряжения используется как период сигнала T= 1/ƒ).
void main() {
PORTB = 0; // Очистка PORTB
TRISB = 0; // PORTB – выход
INTCON = 0; // Запрет всех прерываний
ADCON1 = 0x82; // Конфигурирование VDD как опорного напряжения,
// и выбор канала АЦП
TRISA = 0xFF; // PORTA – вход
Sound_Init(&PORTB, 2); // Инициализация выдачи звука на RB2
do { // Цикл проигрывания звука:
adc_value = Adc_Read(2); // Получить младший байт АЦП
Sound_Play(adc_value, 200); // Проиграть его
} while (1);
}// end