Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 343 копию основной программы музыкальной шкатулки за исключением небольших изменений, о которых мы поговорим чуть дальше. Все переменные, относящиеся именно к задаче воспроизведения звука, описываются внутри функции muz (строки 49 — 51). Лишь для хра ­ нения кода текущей мелодии используется глобальная переменная melod (описывается в строке 9). Процедура сканирования кнопок из программы воспроизведения мелодии исключена и заменена небольшой процедуркой в строке 67. В этой строке происходит увеличение переменной melod на единицу и сравнение полученной величины с числом 8. Если melod больше либо равно 8, ему присваивается нулевое значение. Второе изменение программы воспроизведения мелодии состоит в доработке процедуры проверки нажатой кнопки. Данная проверка зани ­ мает всего одну строку. В новой программе это строка 54. Теперь про ­ грамма проверяет состояние шестого бита порта РВ. Именно этот бит связан с кнопкой звонка. В остальном программа воспроизведения мело ­ дий полностью повторяет аналогичную программу из листинга 5.18. Программа кодового замка выполнена в виде главной процедуры про ­ граммы и занимает строки 68 — 105. Текст этой программы почти пол ­ ностью повторяет аналогичный текст в листинге 5.20. Главное отличие состоит в новой редакции процедуры ожидания отпускания кнопки. Она доработана и превращена в комбинированную процедуру ожидания. В новой программе она занимает строки 85 — 86. Это все тот же цикл while, но на этот раз он не пустой. В данном случае цикл содержит один оператор. Это оператор i f в строке 86. О том, что оператор i f входит в тело цикла, свидетельствует отсутствие символа «точка с запятой» в конце строки 85. Для сравнения, в строке 84 точка с запятой есть. Поэтому цикл в строке 84 не имеет в своем теле никаких команд. Внимание. Напоминаю, что в языке СИ конец строки не является признаком окончания команды. Операторы языка СИ отделяются друг от друга символом точки с запятой. Если точки с запятой нет, то все, что идет за очередным оператором, считается его продолжением. При этом вас не должно смущать даже наличие комментария в строке 85. Комментарий начинается символом «//» и заканчивается в конце строки. Для компилятора любой комментарий не существует. Поэтому команда в строке 86 считается продолжением команды в строке 85. Как видите, простота и эффективность языка СИ имеет и свою обратную сторону. Наличие или отсутствие всего одного символа может кардинально изме ­ нить весь алгоритм программы.

RkJQdWJsaXNoZXIy MTExODQxMg==