Вывод символов с матричной клавиатуры на LCD дисплей

 

Цель работы:

Получить дополнительный опыт работы с элементами: матричная клавиатура и LCD- дисплей. Собрать мини-проект с включением в единую схему этих элементов. Написать программный код реализующий вывод с клавиатуры на LCD-дисплей.

 

Приобретаемые навыки:
  1. Начальные принципы электроники и схемотехники;
  2. Составление принципиальных схем;
  3. Сборка элетрических схем на плате беспаячного монтажа;
  4. Знание простейшей элементной базы;
  5. Получения опыта работы с микроконтроллером Arduino;
  6. Получение навыков работы в среде программирования Arduino IDE;

 

Необходимые базовые знания, которыми вы должны обладать, для успешного выполнения работ:

 

 

Ответьте на  вопросы по теории, если какие-либо вопросы вызовут затруднение, ниже вы сможете получить информацию, которая поможет дать ответ:

  1. Напишите минипрограмму которая будет реализовывать функцию задержки использую вместо delay () функцию millis ()/
     
  2. С помощью какой команды можно сбросить дисплей?
     
      

Общий план выполнения работы:

  1. Разработать принципиальную схему устройства, которое будет выводить значение нажатых клавиш на LCD-дисплей.
  2. Реализовать данную схему на плате безпаячного монтажа.
  3. Написать программу для микроконтроллера.
  4. Провести тестирование устройства.

Ссылки на информацию, которая может помочь при выполнении работы:

  1. Информация о среде программирования  Adruino IDE
  2. Информация о матричной клавиатуре
  3. Информация о LCD-display

Непосредственное выполнение работы:

Описание схемы:

Необходимые материалы:

  1. Плата Adruino - 1шт.
  2. Макетная плата - 1шт.
  3. Светодиод - 1шт.
  4. Резистор - 220 Ом - 1шт.
  5. фотомодуль с фоторезистором - 1шт.
  6. Провода папа - папа - 3шт.
  7. Провода папа - мама - 3шт.

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

Пояснение к сборке: В данной работе мы используем клавиатуру и LCD одновременно, что затрудняет использование микроконтроллера, так как он имеет всего 14 цифровых выводов, столько же нужно и нам, но выводы 0 и 1 используются для записи и чтения в последовательном порту и соответственно может возникнуть аппаратный конфликт. Поэтому я принял решение использовать матричную клавиатуру только 3х3, то есть только цифры от 1 до 9, тем самым освободив два порта. Для того чтобы все работало как заявлено, LCD нужно подключить как в лабораторной работе № 7, а матричную клавиатуру следует подсоединить следующим способом: подключить только выходы: 1, 2, 3, 5, 6, 7. Таким образом мы замкнем клавиши от 1 до 9, как видно из принципиальной схемы к матричной клавиатуре.

Схема лабораторной установки: 

Принципиальная схема Keypad:

Принципиальная схема LCD-дисплея:



Задание на программирование лабораторной установки:

Написать программу для собранной схемы, которая будет выполнять следующие действия: при нажатии на клавишу, на LCD экран должен выводиться символ нажатой клавиши, также каждые 10 секунд должен происходить сброс экрана; для контроля за временем выводите значение в монитор порта при каждом сбросе.

Алгоритм написания программы:

  1. Уяснение задачи;
  2. Поиск теоретических ресурсов и полезных материалов;
  3. Подключение библиотеки, по мере необходимости;
  4. Написание программного кода;
  5. Компиляция.

Фото/видео отчет по выполненному заданию:

Программный код:

#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();
}
}

 

Выполните творческое задание:

Как видно, работа выполнена не совсем так как заявлено, помимо нужного символа выводится еще два непонятных знака, модифицируйте программу и добейтесь чистого выполнения!

Замечания к работе:

  1. Сформулируйте замечания к работе:
  2. Есть ли в работе какие-либо непонятные места?

Заключение: Я выполнил лабораторную работу по сборке мини-проекта, включающего клавиатуру и экран. Полностью реализовать программу не удалось, по неизвестным причинам.