Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 291 В строках 7 — 38 описываются семь массивов для хранения семи мелодий. Массивы имеют тип unsigned char. Переменные этого типа занимают в памяти один байт, и все восемь битов этого байта исполь зуются для хранения информации. Содержимое каждого из этих масси вов полностью соответствует содержимому соответствующих таблиц в ассемблерной версии программы. В строке 39 описывается массив, содержащий адрес начала каждой из семи мелодий. Это не просто массив, а массив ссылок, на что указы вает символ звездочки в тексте его описания. Так же, как и ссылочная переменная, каждый элемент массива ссылок предназначен для хранения ссылки. Данный массив тоже хранится в памяти программ, на что указы вает управляющее слово flesh в его описании. Элементы этого массива хранят указатели на начало каждого из массивов мелодий, что указано при его инициализации (в фигурных скобках). Строки 40 — 72 занимает функция main. Начинается функция с опи сания переменных (строки 41 — 45). Две рабочих переменных count и temp, а также переменная для хранения кода тона (t not а) и переменная для хранения кода длительности (dnota) нам уже знакомы. Мы исполь зовали их в предыдущей программе. Интерес представляет описание переменной not а. Это ссылочная переменная, которая предназначена для хранения указателей на объекты в программной памяти, имеющие тип unsigned char. Она будет исполь зоваться нами для обращения к элементам массивов, хранящим коды нот. Эти массивы, как уже говорилось, расположены в программной памяти. Поэтому в описании переменной имеется слово flash, а перед именем переменной в ее описании стоит символ звездочки. То есть это ссылка на массивы типа unsigned char, расположенные во flesh. В строках 46 — 52 расположен блок инициализации. Эта часть про граммы полностью повторяет аналогичную часть программы из преды дущего примера (см. листинг 5.16). Строки 53 — 72 занимает основной цикл программы. Цикл состоит всего из двух процедур. В начале цикла (строки 54 — 59) расположена процедура сканирования клавиатуры. Эта процедура один к одному скопирована из предыдущего примера (см. листинг 5.16 строки 14 — 21). При обнаружении нажатой кнопки управление передается по метке m3 (в новой программе это строка 60). Как вы помните, номер нажатой кнопки при выходе из процедуры сканирования содержится в перемен ной count.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==