| Общая информация » Каталог студенческих работ » ТЕХНИЧЕСКИЕ ДИСЦИПЛИНЫ » Электротехника, электроэнергетика и электроника |
| 05.01.2026, 14:17 | ||||||||||||||||
Лабораторная работа № 1 «Отображение информации на текстовых дисплеях» Указания к выполнению работы К пунктам 2.1 – 2.3. Воспользуйтесь литературой, конспектом лекций, лабораторным практикумом «Разработка измерительных систем с применением контроллеров Arduino». К пункту 2.4. Для работы с распространенными текстовыми дисплеями на базе контроллеров управления КБ1013ВГ6, производства ОАО «АНГСТРЕМ» (www.angstrem.ru) или HD44780 фирмы HITACHI или KS0066 фирмы SAMSUNG можно воспользоваться стандартной библиотекой LiquidCrystal, код которой находится в файлах LiquidCrystal.h и LiquidCrystal.сpp (папка Arduino/libraries/LiquidCrystal/src). Откройте эти файлы и изучите исходный код основных функций, сравните управляющие импульсы, формируемые при инициализации дисплея и выводе символов в 4-битном режиме с временными диаграммами, приведенными в документации на дисплей [2]. Загрузите приведенную ниже программу в контроллер #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // см. далее void setup() { lcd.begin(16, 2); // инициализация дисплея в двухстрочном режиме // с 16 символами в строке lcd.setCursor(0,0); // установка курсора в верхний левый угол lcd.print("Hello"); // вывод сообщения «Hello» на экран } void loop() { } Во второй строчке объявляется переменная класса LiquidCrystal с именем lcd. Используется один из конструкторов для инициализации (см. файл LiquidCrystal.h) LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); То есть в нашей программе вывод rs дисплея должен быть соединен с 8 выводом платы Arduino, enable с 9 и т.д. Если Вы подключите дисплей к другим выводам эти числа необходимо поменять – в результате работы этой конкретной программы контроллер будет формировать управляющие импульсе на 8, 9, 4, 5, 6, 7 своих выводах. Модифицируйте программу для вывода нескольких сообщений в разных частях экрана и выведите на экран значение переменной. Продемонстрируйте программу. Выпишите прототипы функции из файла LiquidCrystal.h, которые могут Вам пригодиться далее при выполнении работы: установка курсора, очистка экрана. К пункту 2.5. Состояние кнопок клавиатуры модуля дисплея определяет напряжение, которое подается на вход аналого-цифрового преобразователя (АЦП) A0 (т.е. напряжение питания уменьшается с помощью резистивного делителя, в состав которого входят кнопки). Уровни напряжений зависят от модели платы. Составьте программу, отображающую значение АЦП, с помощью подобных команд: int result = analogRead(A0); lcd.clear(); lcd.home(); lcd.print(A0); delay(300); Соответствие между состояниями кнопок и значением, выдаваемым АЦП, занесите в таблицу. Таблица 1 – Результаты тестирования клавиатуры
Продемонстрируйте программу и результаты её работы. Как Вы заметили очистка экрана функцией lcd.clear() приводит к мерцанию экрана, поскольку экран физически полностью очищается и лишь, затем происходит вывод очередного текста. Предложите и реализуйте модификацию программы, чтобы устранить мерцание. К пункту 2.6. Работа требуемой программы должна осуществляться следующим образом. При включении устройства на экран выводится число ноль, при нажатии на кнопку Up выводится число один, при дальнейшем её удержании или отпускании ничего не меняется, при повторном нажатии выводится число два и т.д. Предлагается следующий алгоритм, приведенный на рисунке 1.1. После каждого изменения переменной Counter её необходимо отобразить на дисплее. К пункту 2.7. Работа требуемой программы должна осуществляться следующим образом. При включении устройства на экран выводится сообщение 00:00. Формат этого сообщения: минуты : секунды. При нажатии на кнопку Up секундомер запускается, а при повторном нажатии отсчет заканчивается. Нажатием кнопки Down происходит сброс показаний в 00:00. В микроконтроллере Atmega32 присутствуют таймеры и функцией millis() можно узнать количество миллисекунд прошедших с момента включения микроконтроллера: long result = millis(); Предлагается использовать следующий алгоритм, приведенный на рисунке 1.2. Добавьте в алгоритм обработку информации с электронной клавиатуры: сброс и паузу и реализуйте программу. К пункту 2.8. Добавьте в программу, созданную в пункте 2.7 еще одну переменную – час (hour), а также команды её обработку. Реализуйте напрямую возможность изменять значения переменных min и hour нажатием кнопок. Удалите функциональность, связанную со сбросом, запуском и паузой секундомера.
К пункту 2.9. Отчет должен содержать следующие основные пункты: 1. титульный лист; 2. цель работы, программу работы; 3. исходные тексты программ №1-5, текстовое описание их работы; 4. выводы по работе. Оформление отчета должно соответствовать требованиям ГОСТ 2.105-95 ЕСКД. Общие требования к текстовым документам! Вопросы для защиты лабораторной работы 1. Какие архитектуры микроконтроллеров, применяемых в информационной электронике, Вы знаете? 2. Из каких элементов состоит текстовый жидкокристаллический дисплей? 3. Как можно изменить яркость отображаемых на экране символов? Как можно отрегулировать яркость подсветки? 4. Какого назначение выводов E, RS, RW, D0-D7 дисплея? 5. Какие управляющие сигналы необходимо подать на контроллер управления для его инициализации (используйте документацию [1,2])? 6. Какие управляющие сигналы необходимо подать на контроллер управления для вывода символа (используйте документацию [1,2])? 7. Опишите адресное пространство контроллера управления дисплея (используйте документацию [1,2]).
Лабораторная работа №2 «Графические построения» Лабораторная работа состоит из трех частей: 1. Знакомство с семейством графических примитивов Windows GDI. 2. Построение графика функций. 3. Построение диаграмм. Варианты заданий. Задание ко второй части - построить график функции:
Задание к третьей части - из текстового файла загрузить данные, по которым построить диаграмму: 1. линейную диаграмму; 2. столбиковую диаграмму; 3. круговую диаграмму; 4. кольцевую диаграмму; 5. разрезанную круговую диаграмму. Линейные и столбиковые диаграммы должны включать в себя оси координат. В круговых, кольцевых и разрезанных диаграммах самую большую область необходимо вынести и показать отдельно от остальных. Также диаграммы должны включать легенду. Отчет должен содержать следующую информацию: 1. титульный лист с указанием учебного заведения и кафедры, темы работы, номера группы, фамилии, и., о. студента, фамилии преподавателя, календарного года; 2. цель работы; 3. программу работы; 4. ход работы; 5. вывод по результатам лабораторной работы. Программа работы 2.1. Запустить среду программирования. 2.2. Создать новый проект. 2.3. Создать новый файл с исходным текстом. 2.4. Ввести текст тестовой программы. 2.5. Построить решение и запустить тестовую программу. 2.6. Внести изменения в программу, осуществив вывод семейства графических примитивов. 2.7. Заново построить решение. 2.8. Разработать, написать и отладить программу, строящую график функции. 2.9. Разработать, написать и отладить программы, строящую диаграмму. 2.10. Оформить отчет по лабораторной работе. Повторно запустите программу. Выполните самостоятельно части 2 и 3 лабораторной работы, согласно заданному варианту. Расширьте функционал программы, добавив возможность печати данных на принтере.
Лабораторная работа №3 «Отображение информации с помощью светодиодных матриц» Указания к выполнению работы Тестовая программа, выполняющая управление матрицей светодиодов 2x2 представлена в листинге 1. Листинг 1 #define ROW_SER 8 #define ROW_RCLK 9 #define ROW_SRCLK 10 void setData(uint8_t data) { digitalWrite(ROW_RCLK, LOW); for (int8_t i = 7; i >= 0; --i) { digitalWrite(ROW_SRCLK, LOW); digitalWrite(ROW_SER, data >> i & 1); digitalWrite(ROW_SRCLK, HIGH); } digitalWrite(ROW_RCLK, HIGH); } void setup() { pinMode(ROW_SER, OUTPUT); pinMode(ROW_RCLK, OUTPUT); pinMode(ROW_SRCLK, OUTPUT); pinMode(2, OUTPUT); pinMode(5, OUTPUT); setData(0b11111101); digitalWrite(2, HIGH); } void loop() { delay(10); } Схема подключения показана на рисунке 3.1.
Представленная программа не использует какие-либо сторонние библиотеки кода. Выполнение пункта 2.3 начинается с самостоятельной сборки выполняемой программы из предоставленного исходного текста. Включите в отчет листинг с исходным кодом программы и фото с камеры, полученные Вами и демонстрирующие работу программы. Основную часть пункта 2.3 в отчете должно занимать описание алгоритма работы предоставленной программы в текстовом виде или в виде блок-схемы алгоритма. На рисунке 3.2 показана схема подключения матрицы 8x8.
Программа, выводящая в цикле все буквы латиницы, показана в листинге 2. Листинг 2 enum { SER, RCLK, SRCLK }; const uint8_t colRegPins[] = { 11, 12, 13 }; const uint8_t rowRegPins[] = { 2, 3, 4 }; void initReg(const uint8_t* pins) { pinMode(pins[SER], OUTPUT); pinMode(pins[RCLK], OUTPUT); pinMode(pins[SRCLK], OUTPUT); } void setReg(const uint8_t* pins, uint8_t bits) { digitalWrite(pins[RCLK], LOW); shiftOut(pins[SER], pins[SRCLK], MSBFIRST, bits); digitalWrite(pins[RCLK], HIGH); } void setup() { initReg(colRegPins); initReg(rowRegPins); cli(); TCCR2A = 0; TCCR2B = 0; TIMSK2 = 1 << TOIE2; TCCR2B = 1 << CS22 | 1 << CS21; // prescaler = 128 sei(); } const uint8_t chars[] PROGMEM = { B00110000, B01111000, B11001100, B11001100, B11111100, B11001100, B11001100, B00000000, B11111100, B01100110, B01100110, B01111100, B01100110, B01100110, B11111100, B00000000, B00111100,B01100110,B11000000,B11000000,B11000000,B01100110,B00111100,B00000000, // C B11111000,B01101100,B01100110,B01100110,B01100110,B01101100,B11111000,B00000000, // D B11111110,B01100010,B01101000,B01111000,B01101000,B01100010,B11111110,B00000000, // E B11111110,B01100010,B01101000,B01111000,B01101000,B01100000,B11110000,B00000000, // F B00111100,B01100110,B11000000,B11000000,B11001110,B01100110,B00111110,B00000000, // G B11001100,B11001100,B11001100,B11111100,B11001100,B11001100,B11001100,B00000000, // H B01111000,B00110000,B00110000,B00110000,B00110000,B00110000,B01111000,B00000000, // I B00011110,B00001100,B00001100,B00001100,B11001100,B11001100,B01111000,B00000000, // J B11110110,B01100110,B01101100,B01111000,B01101100,B01100110,B11110110,B00000000, // K B11110000,B01100000,B01100000,B01100000,B01100010,B01100110,B11111110,B00000000, // L B11000110,B11101110,B11111110,B11111110,B11010110,B11000110,B11000110,B00000000, // M B11000110,B11100110,B11110110,B11011110,B11001110,B11000110,B11000110,B00000000, // N B00111000,B01101100,B11000110,B11000110,B11000110,B01101100,B00111000,B00000000, // O B11111100,B01100110,B01100110,B01111100,B01100000,B01100000,B11110000,B00000000, // P B01111000,B11001100,B11001100,B11001100,B11011100,B01111000,B00011100,B00000000, // Q B11111100,B01100110,B01100110,B01111100,B01101100,B01100110,B11110110,B00000000, // R B01111000,B11001100,B11100000,B01110000,B00011100,B11001100,B01111000,B00000000, // S B11111100,B10110100,B00110000,B00110000,B00110000,B00110000,B01111000,B00000000, // T B11001100,B11001100,B11001100,B11001100,B11001100,B11001100,B11111100,B00000000, // U B11001100,B11001100,B11001100,B11001100,B11001100,B01111000,B00110000,B00000000, // V B11000110,B11000110,B11000110,B11010110,B11111110,B11101110,B11000110,B00000000, // W B11000110,B11000110,B01101100,B00111000,B00111000,B01101100,B11000110,B00000000, // X B11001100,B11001100,B11001100,B01111000,B00110000,B00110000,B01111000,B00000000, // Y B11111110,B11000110,B10001100,B00011000,B00110010,B01100110,B11111110,B00000000, // Z }; uint8_t activeRow = 0; uint8_t prevColBits = 0; uint8_t videoMemory[8] = { 0 }; void drawChar(uint8_t ch) { for (uint8_t i = 0, chIdx = ch * 8; i < 8; ++i) { videoMemory[i] = pgm_read_byte(chars + chIdx + i); } } int letterNum = 0; void loop() { drawChar(letterNum); delay(3000); letterNum = ++letterNum % 26; } ISR(TIMER2_OVF_vect) { uint8_t colBits = videoMemory[activeRow]; uint8_t rowBits = ~(1 << activeRow); if (colBits == prevColBits) { setReg(rowRegPins, rowBits); } else { setReg(colRegPins, 0); setReg(rowRegPins, rowBits); setReg(colRegPins, colBits); prevColBits = colBits; } for (int8_t i = 0; i < 8; ++i) { activeRow = ++activeRow % 8; if (videoMemory[activeRow] != 0) break; } } Самостоятельно модифицируйте программу согласно п.2.4. В отчет включите листинг Вашей программы и описание алгоритмов работы всех трех программ. | ||||||||||||||||




