Массивы в программировании микроконтроллеров AVR

Значение массивов в современном мире программирования трудно переоценить – они применяются везде, где требуется обрабатывать какие-нибудь объемы данных.

Что такое массив

В данной статье мы рассмотрим основы использования массивов в языке С для микроконтроллеров AVR и рассмотрим их практическое применение в программе для изменения цифр на семисегментном индикаторе.

Что такое массивы

Массив – это набор элементов, расположенных в единой последовательности и имеющих один общий тип данных.

Массивы в языке С объявляются следующим образом. Вначале необходимо указать тип данных, потом имя массива (произвольное, латинскими буквами), а затем квадратные скобки, в которых указывается число элементов массива. Например:

int ab [5];

В этом примере int указывает на тип данных массива, в данном случае целочисленный. Допустимо использование любых типов, которые поддерживает язык С: char, double, long и т.д.

ab – имя массива, может быть практически любым, но не может начинаться с черточки, тире, содержать некоторые знаки и т.д. – справедливы правила для имен переменных в С.

[ ] – квадратные скобки, как раз и являются тем элементом, которые определяют массив в языке программирования С.

Число в квадратных скобках [5] обозначает количество элементов массива.

Если необходимо элементы массива определить сразу при его объявлении, то это можно сделать следующим образом:

int ab [5] = {7, 12, 17, 22, 3};

Нумерация элементов массива в языке С всегда начинается с нуля!!! Не путать, к примеру, с языком Pascal, в котором элементы массива можно нумеровать начиная с любого числа, но чаще всего в Pascal’е их нумеруют начиная с 1.

То есть в представленном примере с массивом ab его элементы будут иметь следующие номера:

ab [0] – «7»;
ab [1] – «12»;
ab [2] – «17»;
ab [3] – «22»;
ab [4] – «3»;

Элементы массива в языке С для микроконтроллеров AVR могут содержать не только десятичные числа, но и двоичные и шестнадцатеричные.

Пример использования массивов в программе для семисегментного индикатора

Определим массив с двоичными числами, которые будут соответствовать цифрам семисегментного индикатора с общим катодом.

int go [10] = {
0b00111111, //0
0b00000110, //1
0b01011011, //2
0b01001111, //3
0b01100110, //4
0b01101101, //5
0b01111101, //6
0b00000111, //7
0b01111111, //8
0b01101111 //9
};

С тем же успехом данный массив можно определить и с помощью шестнадцатеричных чисел – запись станет компактней, но менее наглядной.

int go2 [10] = {0х3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x7, 0x7f, 0x6f};

Если мы будем использовать семисегментный индикатор с общим анодом, то тогда в представленных массивах двоичные числа нужно инвертировать — вместо нулей записать единицы, а вместо единиц нули.

Теперь запрограммируем с помощью определенного нами массива следующий алгоритм работы программы: при однократном нажатии на одну из кнопок значение числа на семисегментном индикаторе увеличивается на единицу. А при нажатии второй кнопки будет происходить декремент числа на индикаторе.

Пример использования массивов в программе для микроконтроллера AVR

Оператор for

Оператор for в языке программирования С состоит из трех частей, которые разделяет точка с запятой. В первой части задается начальное значение переменной цикла — эта операция выполняется всего один раз.

Во второй части записывается условие остановки цикла — его проверка осуществляется каждый раз когда заканчивается тело цикла и производится возврат к его началу.

В третьей части записывается правило изменения переменной цикла — обычно это инкремент или декремент на единицу, но можно задать и любой другой шаг.

Теперь с использованием данного цикла мы можем визуально значительно упростить нашу программу и сделать ее более гибкой. Также дополним программу обратным отсчетом цифр. Ее алгоритм работы будет следующим: с задержкой в 1 секунду (1000 мс) выполняется увеличение значение числа на 1, а при достижении «9» начинается обратный отсчет до 0. Текст этой программы представлен на следующем рисунке: 

Пример использования массивов и цикла for в программе для микроконтроллера AVR



Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *