Исследование принципа работы микроконтроллеров семейства AVR, страница 4

В строке 84 функция lcd_puts отображает в текущей дисплейной позиции содержимое строки lcd_buffer, которая была сформирована в предыдущей строке программы. Эта функция определена в подключённом файле Icd.h (строка 55).

В строке 85 функция delay_ms снова генерирует задержку 2000 мс, как и в строке 77.

В строках 88... 107 находится оператор if-else (см. Оператор if-else), с помощью которого осуществляется вывод на LCD ROM-кода каждого устройства DS1820/DS18S20, подключённого к шине l-Wire.

В строке 88 — начало этого оператора, на что указывает ключевое слово if. Выражение в скобках (условие оператора if-else) — это значение переменной devices. Оно будет истинным (не равно нулю), если функция wl_search в строке 82 обнаружит хотя бы одно устройство. В противном случае выражение ложно (равно нулю).

Если выражение в скобках истинно, то будет выполняться группа операторов (составной оператор), заключённая в фигурные скобки, находящиеся в строках 89 (открывающая скобка) и 105 (закрывающая скобка). После этого выполнение программы будет продолжено со строки 111. Если выражение в скобках ложно, то выполнение программы перейдёт на строку 106.

В строке 90 находится оператор for (см. Оператор for). Тело этого оператора, заключённое в фигурные скобки, находящиеся в строках 91 (открывающая скобка) и 104 (закрывающая скобка), будет выполняться для каждого устройства DS1820/DS18S20, т. е. столько раз, сколько устройств подключено к шине 1-Wire.

В строке 92 функция sprintf осуществляет форматные преобразования и помещает результаты в строку lcd_buffer. Спецификация преобразования «Dcvicc #%u ROM\nCode is:» означает, что сначала будет выведена последовательность «Devicc #», затем текущее значение переменной i, увеличенное на 1 (что будет соответствовать номеру устройства) в десятичном без знаковом фор-мате (символ преобразования 'и') и через пробел последовательность «ROM-». После этого курсор будет переведён на новую строку (последовательность \п), и в новой строке будет выведена последовательность «Code is:». Эта функция определена в подключённом файле stdio.h (строка 59) (см. Стандартные функции ввода/вывода).

В строке 93 осуществляется вызов функции lcd_clear, которая очищает LCD и устанавливает позицию для вывода символа в ряд 0 столбца 0.

В строке 94 функция lcd_puts отображает в текущей дисплейной позиции содержимое строки lcd_bufler, которая была сформирована в 92 строке программы.

В строке 95 функция delay_ms генерирует задержку 2000 мс.

В строке 96 осуществляется вызов функции lcd_clear, которая снова очищает LCD и устанавливает позицию для вывода символа в ряд 0 столбца 0.

В строке 97 находится оператор for (см. Оператор for). Тело этого оператора, заключённое в фигурные скобки, находящиеся в строках 98 (открывающая скобка) и 102 (закрывающая скобка), будет выполняться 8 раз (j = 0...7), по количеству значимых байтов ROM-кода.

В строке 99 функция sprintf осуществляет форматные преобразования и помешает результаты в строку lcd_buffcr. Спецификация преобразования «%02Х» означает, что сначала будет выведено значение элемента с индексом (i, j) массива rom_code в поле шириной, по крайней мере, в два символа (описатель width = 02) в шестнадцатеричном виде символами верхнего регистра (символ преобразования 'X'). После этого будет выведен пробел. Если значение имеет менее двух цифр, то оно будет выровнено по правому краю (т. к. флаг отсутствует), а левая часть будет заполнена нулями (т. к. в описателе width вначале стоит 0) (см. Стандартные функции ввода/вывода).

В строке 100 функция lcd_puts отображает в текущей дисплейной позиции содержимое строки Icd_bufler, которая была сформирована в предыдущей строке программы.