Получить дополнительный опыт работы с элементами: матричная клавиатура и LCD- дисплей. Собрать мини-проект с включением в единую схему этих элементов. Написать программный код реализующий вывод с клавиатуры на LCD-дисплей.
Описание схемы:
Необходимые материалы:
Возьмите все необходимые материалы. Удобно расположите плату беспаячного монтажа и микроконтроллер. Аккуратно, без сильных нажимов, во избежании поломки материалов, подсоедините каждый элемент как показано на схеме. Внимательно проверьте правильно ли подключены элементы, проверьте полярность элементов, посмотрите заземлены ли цепь.
Пояснение к сборке: В данной работе мы используем клавиатуру и LCD одновременно, что затрудняет использование микроконтроллера, так как он имеет всего 14 цифровых выводов, столько же нужно и нам, но выводы 0 и 1 используются для записи и чтения в последовательном порту и соответственно может возникнуть аппаратный конфликт. Поэтому я принял решение использовать матричную клавиатуру только 3х3, то есть только цифры от 1 до 9, тем самым освободив два порта. Для того чтобы все работало как заявлено, LCD нужно подключить как в лабораторной работе № 7, а матричную клавиатуру следует подсоединить следующим способом: подключить только выходы: 1, 2, 3, 5, 6, 7. Таким образом мы замкнем клавиши от 1 до 9, как видно из принципиальной схемы к матричной клавиатуре.
Схема лабораторной установки:
Принципиальная схема Keypad:
Принципиальная схема LCD-дисплея:
Задание на программирование лабораторной установки:
Написать программу для собранной схемы, которая будет выполнять следующие действия: при нажатии на клавишу, на LCD экран должен выводиться символ нажатой клавиши, также каждые 10 секунд должен происходить сброс экрана; для контроля за временем выводите значение в монитор порта при каждом сбросе.
Алгоритм написания программы:
Фото/видео отчет по выполненному заданию:
Программный код:
#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(6, 7, 2, 3, 4, 5);
const byte ROWS = 3;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
byte rowPins[ROWS] = {13,12,11};
byte colPins[COLS] = {10, 9, 8};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
unsigned long previousMillis = 0;
unsigned long interval = 10000;
unsigned long currentMillis = millis ();
void setup(){
Serial.begin(9600);
lcd.begin(16, 2, 1);
}
void loop(){
unsigned long currentMillis = millis ();
Serial.print("currentMillis: ");
Serial.println(currentMillis);
char key = keypad.getKey();
if (key){
Serial.println(key);
lcd.println(key);
}
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
Serial.print("previousMillis: ");
Serial.println(previousMillis);
lcd.clear();
lcd.home();
}
}
Выполните творческое задание:
Как видно, работа выполнена не совсем так как заявлено, помимо нужного символа выводится еще два непонятных знака, модифицируйте программу и добейтесь чистого выполнения!
Замечания к работе:
Заключение: Я выполнил лабораторную работу по сборке мини-проекта, включающего клавиатуру и экран. Полностью реализовать программу не удалось, по неизвестным причинам.