Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование встроенных приложений Keil uvision

.pdf
Скачиваний:
127
Добавлен:
06.01.2021
Размер:
4.29 Mб
Скачать

СПБГУАП группа 4736 / Индустрия 4.0

/*------------------------------------------------------------

*/

// считывание состояния младшего байта PORTBв переменную pb_state uint8_t pb_state = (uint8_t) MDR_PORTB->RXTX;

/* обратите внимание на то, что используется приведение типов переменной uint32_t к uint8_t. При проведении операций с разными типа целочисленных переменных, делать это необходимо обязательно! */

/*------------------------------------------------------------

*/

Одной из частых операций является операция получения старших или младших байт многобайтной переменной.

/*------------------------------------------------------------

*/

//______ СОХРАНЕНИЕ СТАРШЕГО И МЛАДШЕГО БАЙТА ДВУХБАЙТНОЙ ПЕРЕМЕННОЙ

//инициализация двухбайтной переменной word числом 29684 =

//0b0111001111110100

uint16_t word = 0x73f4;

/* сохранение старшего байта переменной word в переменную word_msb

(msb – most significant byte) англ. – старший байт, обратите внимание на обязательное приведение типов */

uint8_t word_msb = (uint8_t) (word >> 8);

/* сохранение младшего байта переменной word в переменную word_lsb

(lsb – least significant byte) англ. – младший байт, обратите внимание на обязательное приведение типов */

// применение битовой маски для обнуления старшего байта переменной word uint8_t word_lsb = (uint8_t) (word & 0x00ff);

//______ ВОССТАНОВЛЕНИЕ ДВУХБАЙТНОЙ ПЕРЕМЕННОЙ ______

// получение двухбайтной

переменной из двух однобайтных

uint16_t temp = word_msb

<< 8 | word_lsb;

/*------------------------------------------------------------

*/

79

СПБГУАП группа 4736 / Индустрия 4.0

4.3.8. Заключение

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

Студент должен усвоить весь материал лабораторной работы, ввиду того, что работа с МК в полном объеме доступна только с применением битовых операций.

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

Вработе рассмотрен алгоритм восстановления двухбайтной переменной из двух однобайтных. Этот алгоритм прекрасно применим к 32-битным (4-байтным) и 64-битным (8-байтным) переменным.

Для защиты лабораторной работы необходимо выполнить все задачи из раздела 9.

80

СПБГУАП группа 4736 / Индустрия 4.0

4.3.9. Задачи для самостоятельной работы

Выполнить с помощью битовых логических операций

1.Инвертирующая битовая маска. Сначала включаются все светодиоды. Далее, при удержании любой из 5 кнопок происходит выключение 1, 2, 3, 4, или 5 светодиодов (по одному). При отпускании кнопок включаются все светодиоды.

2.Сдвигающиеся вверх огоньки. Включаются 1 и 2 светодиоды, далее каждые полсекунды пара включенных светодиодов смещается вверх, т.е. гаснет 1 светодиод, 2 и 3 включены; гаснет 2 светодиод, 3 и 4 включены и т.д. до включения 7 и 8 светодиодов. Далее все светодиоды выключаются и процесс повторяется снова.

3.Битовая маска. При удержании каждой из 5 кнопок происходит включение 1, 2, 3, 4, или 5 светодиодов (по одному). При отпускании любой из кнопок все светодиоды выключаются.

4.Столбик из огоньков. Сначала включается 1 светодиод, через полсекунды включается 2 светодиод и так до включения 8 светодиода, после этого происходит выключение светодиодов в этом же порядке каждые полсекунды. После выключения 8 светодиода весь процесс повторяется снова.

5.Бегущий огонек. Происходит попеременное включение одного светодиода, начиная с 1, потом 2 и заканчивая 8, с интервалом, равным половине секунды. Сначала вверх от 1 до 8 светодиода, потом вниз от 8 светодиода до 1. Далее процесс повторяется снова.

6.Сдвигающиеся вниз огоньки. Сначала включаются 8 и 7 и 6 светодиоды, далее каждые полсекунды три включенных светодиода смещается вниз, т.е. гаснет 8 светодиод, 7, 6 и 5 включены. Гаснет 7 светодиод, 6, 5 и 4 включены и т.д. до включения 1, 2 и 3 светодиодов. Далее процесс повторяется снова.

7.Многокнопочный фонарик. Вся линейка светодиодов включается только тогда, когда зажаты кнопки PE3, PB4 и PE6.

8.Фонарик с условием. Вся линейка светодиодов включается только тогда, когда зажата любая из кнопок PD7/PB4.

9.Индикатор 32-битного числа. Побайтно циклически выводится на линейку светодиодов 32-битное число 0x7896bc3d. Смена байта происходит каждые 2 с начиная с 1 байта числа. Перед началом нового чикла следует выключить все светодиоды на 3 секунды.

81

СПБГУАП группа 4736 / Индустрия 4.0

11.Выборочный инвертор. Вначале включаются все светодиоды. Далее, при удержании любой из 5 кнопок происходит инверсия состояния светодиода, соответствующая последней цифре кнопки (прим. PE3 – 3). Для решения задачи использовать операцию битовой инверсии.

12.Включение огоньков. Необходимо включать светодиоды PA4 – PA7 во время удержания любой из кнопок.

13.Индикатор 64-битного числа. Побайтно циклически выводится на линейку светодиодов 64-битное число 0xaf123479bcedff04. Смена байта происходит каждые 2 с начиная с 1 байта числа. Перед началом нового чикла следует выключить все светодиоды на 3 секунды.

14.Индикатор 32-битного числа. Циклически выводить на линейку светодиодов побайтно 32-битное число 0x56af81bc. При этом поменять местами байты 1 и 2, 4 и 3. Смена байта происходит каждые 2 с, перед началом нового цикла следует выключить все светодиоды на 3 секунды.

15.Индикатор 32-битного числа. Циклически выводить на линейку светодиодов побайтно 32-битное число 0xfa1372bc. При этом поменять местами байты 4 и 1, 2 и 3. Смена байта происходит каждые 2 с.

82

СПБГУАП группа 4736 / Индустрия 4.0

4.4.Работа c графическим дисплеем MT12864B в составе отладочной платы МилКиТЭС

Цель работы – освоение принципов работы с графическим дисплеем MT12864B.

Задачи:

1)Создать новый проект в среде KEIL MDK-ARM;

2)Написать рабочий программный код с комментариями;

3)Проверить работоспособность программного кода;

4)Выполнить индивидуальные задания;

5)Написать отчёт о проделанной работе.

4.4.1.Введение

Отладочная плата МилКиТЭС оснащена графическим дисплеем МЭЛТ МТ12864B с разрешением 128 x 64 пикселя [2]. Управление дисплеем осуществляется через интерфейс SPI.

С технической точки зрения, SPI – это синхронная четырёхпроводная шина. Она представляет собой соединение двух синхронных сдвиговых регистров, которые является центральным элементом любого SPI устройства. Для соединения используется конфигурация ведущий/ведомый [8].

Схема включения МТ12864B показана на рис. 33, таблица 9 показывает подключение сигналов дисплея к выводам МК. Дисплей МТ12864B построен на основе контроллера дисплеев NT75451 [11]. Описание выводов дисплея:

-CS1 – выбор устройства по стандарту протокола SPI;

-RES – сброс дисплея;

-А0 – выбор режима приема команды/данных от ведущего устройства;

-SCL – линия тактирования данных/команд по стандарту протокола SPI;

-SI – линия приема данных/команд;

-LED – управление подсветкой дисплея.

83

СПБГУАП группа 4736 / Индустрия 4.0

Таблица 9. Карта соединения сигналов дисплея с МК

 

Сигнал дисплея

Вывод МК

 

 

CS1

PF2

 

 

RES

PE0

 

 

A0

PE1

 

 

SCL

PF1

 

 

SI

PF0

 

 

LED

PE2

 

 

 

 

 

 

 

 

 

Рис. 33. Электрическая схема включения дисплея МТ12864В

Работа с дисплеем начинается с того, что линия RES выставляется в низкий логический уровень (работает в обратной логике). Это необходимо для того, чтобы вывести дисплей из состояния сброса при включении питания. Если этого не сделать, дисплей будет находиться в состоянии сброса и не будет реагировать на команды (это происходит автоматически при инициализации дисплея).

84

СПБГУАП группа 4736 / Индустрия 4.0

Команды и данные передаются дисплею от МК по линии SI, что, по стандарту SPI, означает “Slave Input”. SCL – линия тактирования, необходима для синхронизации передаваемых байт.

По линии SPI от МК к дисплею передаются команды и данные. Существует несколько команд дисплея, например:

-установка страницы памяти дисплея;

-установка курсора в пределах страницы;

-инверсия пикселей дисплея.

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

Линия CS1 – выбор устройства на линии SPI. Исходное состояние – логическая единица (устройство не выбрано). Перед началом обращения к дисплею, линию СS необходимо перевести в логический ноль и вернуть в логическую единицу после окончания обращения.

Транзистор VT3 необходим для управления включением подсветки дисплея в случае, если на плате не установлен шунтирующий резистор R29. Подсветка включается, когда на выводе PE2 PORTE выставлена логическая единица и транзистор VT3 открыт.

85

СПБГУАП группа 4736 / Индустрия 4.0

4.4.2. Графический дисплей МТ12864B

Дисплей МТ12864В имеет восемь страниц памяти шириной восемь пикселей и длинной 128 пикселей соответственно (рис. 34).

X0,Y0

страница 1

X127,Y0

 

X0,Y1

страница 2

X127,Y1

 

.

страница 3

.

 

.

страница 4

.

64 пикс.

.

страница 5

.

 

.

страница 6

.

 

.

страница 7

.

 

X0,Y7

страница 8

X127,Y7

 

 

128 пикселей

 

 

Рис. 34. Схема организации памяти дисплея МТ12864B

Запись логической единицы в ячейку памяти вызывает включение соответствующего пикселя. Пиксели в пределах страницы памяти дисплея заполняются сверху вниз слева направо при последовательной записи данных (рис. 35). Для перехода на новую страницу памяти необходимо подать соответствующую команду перехода (см. таблицу 10).

A

Б

Рис. 35. А) Данные в памяти дисплея, Б) Закрашенные пиксели на дисплее

Все операции с дисплеем, кроме управления подсветкой, реализованы в библиотеке milkites_display.h. Для начала работы с дисплеем необходимо добавить в проект и код файлы библиотек milkites_display.h, milkites_spi.h. Операция добавления новых библиотек описана в пункте 5 лабораторной работы № 2.

При включении питания дисплею МТ12864B, как и другим системам МК, требуется стартовая инициализация.

86

СПБГУАП группа 4736 / Индустрия 4.0

Инициализация дисплея означает настройку портов МК, к которым подключен дисплей, а также настройку модуля SPI и начальное конфигурирование дисплея. После инициализации дисплей готов к работе.

Втаблице 10 показан набор функций библиотеки для работы

сдисплеем МТ12864В.

Таблица 10. Функции библиотеки дисплея МилКиТЭС

 

 

 

 

 

 

Пример использо-

 

Команда

 

Описание

 

 

вания

 

LCD_wr_byte

 

запись байта данных в дисплей

 

 

LCD_wr_byte(0xff);

 

LCD_page_set

 

установка курсора на страницу памяти без пере-

 

LCD_page_set(0);

 

 

хода в начало страницы (0 - 127)

 

 

 

 

 

 

 

 

 

LCD_column_set

 

перемещение курсора в пределах страницы памяти

 

LCD_column_set(50);

 

(0 - 7)

 

 

 

 

 

 

 

 

LCD_clear

 

очистка дисплея

 

 

LCD_clear();

 

LCD_set_cursor

 

установка курсора на страницу памяти (0 - 7)

 

LCD_set_cursor(0);

 

LCD_print_num

 

вывод целочисленной знаковой переменной

 

LCD_wr_num(12367);

 

LCD_print_text

 

вывод текстовой строки

 

 

LCD_print("Привет!

 

 

 

 

Hello!");

 

 

 

 

 

 

 

LCD_inverse(x)

 

инвертирование пикселей на дисплее,

x - 0 :

 

LCD_inverse(1);

 

 

1, параметр. 1 - инверсия вкл, 0 - выкл.

 

 

 

 

 

 

 

 

87

СПБГУАП группа 4736 / Индустрия 4.0

4.4.3. Вывод изображений на дисплей

Разберем первую часть команд – команды низкого уровня. Для этого рассмотрим программу, рисующую квадрат 8 x 8 пикселей в центре дисплея (рис. 36, листинг 5).

В бесконечном цикле происходит установка курсора на страницу 4 памяти дисплея (счет идет с нуля) и 60 пиксель, после этого цикл на 8 итераций заполняет единицами память дисплея, происходит автоинкремент адреса колонки пикселей в пределах страницы памяти после очередной записи данных. Результат исполнения кода показан на рис. 36.

Рис. 36. Изображение квадрата на дисплее

88