Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Си для PIC.docx
Скачиваний:
14
Добавлен:
01.07.2025
Размер:
351 Кб
Скачать
☆

Void perebor void{ // начало функции «перебор»

unsigned char tmp; // некая локальная переменная tmp

unsigned int tmp2; // локальная переменная tmp2

for (tmp=0; tmp<9; tmp++) // цикл на основе tmp

// инкрементировать tmp пока tmp<9 и начать с нуля

{ // начало цикла, т.к. в теле цикла несколько строк

PORTB = arr_seg [tmp]; // прописать в порт число из массива по номеру tmp

tmp2 = 0xffff; // в tmp2 поместить некое максимальное число

while (tmp2-->0); /* выполнять декрементирование tmp2

до тех пор, т.е. ПОКА tmp больше нуля */

} // конец цикла, т.к. в теле цикла несколько строк

} // конец функции «перебор»

 

Как-то так. Почему сразу не написали так? Вам нужно набивать руку в комбинировании функций и одновременно видеть и сравнивать одни с другими решениями. Выходной код уменьшится, но это не должно быть определяющим фактором в написании. Для вас важна прозрачность. Возможно, расписанный вариант из трех функций в каком-то месте окажется более полезным. Ну, например, если вам нужно использовать функцию задержки другими функциями. Или, например, если вам нужно на индикатор вывести какой-то определенный символ в любом месте программы, например «пятёрку», для этого достаточно в коде написать ris_sim (5); что означает нарисовать символ 5. Необходимо понимать, что кроме символов цифр, мы можем в массив прописать и символы некоторых букв, например, A b C d E F УРА и даже пробел (увеличив размерность массива) J.

 

Не расслабляемся. Рассмотрим еще двухмерный массив.

 

unsigned int array [5][6];

массив array состоит из переменных типа unsigned int в котором 5 строк по 6 элементов.

const unsigned char arr_all [2][3]={

{1,2,3},

{4,5,6}

};

массив констант arr_all состоит из переменных типа unsigned char в котором 2 строки по 3 элемента в каждой строке.

 

и другие варианты по аналогии с предыдущими.

 

Исключительно интересная вещь – двухмерный массив. Например, мы имеем графический индикатор 64*128 пикселей. Организуем соответствующий массив, в который можем поместить некий графический образ. Через простейшие циклы несложно организовать обмен с массивом (матрицей) вида array [Y][X] , где по YX будет число, определяющее включен или нет пиксель, а для цветных индикаторов возможен и цвет.

 

Приведем пример для начинающих. Представим что у нас два семисегментных индикатора. Представим, что у них разная распиновка. Усложним задачу – они разного типа (один с общим анодом, другой с общим катодом). Можно два массива – для одного и для другого индикатора. А можно сделать компактно и красиво, с помощью двухмерного массива. Array [Y][X] – по Y будем различать первый и второй индикатор, а по X выводимые символы. Нам нужно будет только один раз напрячь мозг, чтобы прописать соответствующие битовые последовательности каждого символа для каждого разряда.

 

Вы можете возразить, что в практике вы такого не допустите. Ой, не зарекайтесь. Вот один из моих примеров печатной платы.

 

 

Это двухразрядный индикатор. Каждая линия управления объединяет разноименные сегменты (ну может где-то и одноименные). Удобно? Несомненно, односторонняя печатная плата с толстыми дорожками это всегда удобно (хоть маркером рисуй). Такой тип разводки индикатора я называю «греческим» рисунком, когда разноименные сегменты разных разрядов соединяются на плате одной дорожкой без перемычек.

 

На что обратить внимание? Посмотрите как в двухмерном массиве перечисляются элементы и как расставлены фигурные скобки. Строго говоря, можно перечислить в одну строчку.

 

Необходимо отметить, что массивы позволяют эффективно организовывать хранение и доступ к элементам с минимальными затратами программного кода. Так или иначе, в практике может возникнуть ситуация, когда объем массива глобальных переменных может физически не уместиться в текущем банке памяти (в нулевом банке). Для этого следует использовать префикс указывающий другой банк.

 

unsigned char bank1 arr_begushaya_stroka[180];

 

На этом краткое введение в массивы закончим. Знание двух основных видов и практическое их использование значительно облегчат ваш кодинг.