Функции работы с Touch Panel в mikroC.
Неотъемлемым аксессуаром современных устройств стал сенсорный экран, иначе называемый Touch Panel (Тач панел). Такой экран позволяет реализовывать интерактивные приложения без дополнительных кнопок, джойстиков и иных органов управления. В своих средствах разработки фирма Mikroelektronika давно применяет сенсорные экраны, но их использование зависело от разработчика. В платах типа mikromedia board, сенсорный экран стал интегрированным, что придало этому устройству огромные возможности. Большим плюсом можно считать и реализацию поддержки функций работы с Touch Panel в фирменных компиляторах производителя.
Сенсорный экран в платах mikromedia board for STM32 относится к резистивному типу. Для работы с ним используются 4 линии микроконтроллера. Две из них сигнальные, оповещающие о наличии нажатия. Оставшиеся две линии должны быть подключены к АЦП микроконтроллера для определения точки нажатия по координатам X и Y. Благодаря высокой разрядности АЦП, разрешение сенсорного экрана полностью перекрывает разрешение дисплея. Единственным минусом становится необходимость калибровки Touch Panel для совмещения с изображением на дисплее. Также для разных процессоров, применяются разные аппаратные схемы подключения, что необходимо учитывать при объявлении конфигурации выводов микроконтроллера.
В компиляторах Mikroelektronika имеется две библиотеки работы с сенсорными панелями. Данные библиотеки берут на себя всю работу по организации опроса и обработки данных, предоставляя программисту готовые координаты нажатия. Первая из них TP_Panel_Library используется в работе с панелями, установленными на простых графических ЖК-индикаторах. Вторая - TP_Panel_TFT_Library нацелена на использование оборудования, работающего совместно с TFT дисплеем. Состав и функции библиотек практически идентичны, поэтому ниже будет рассмотрен только несколько расширенный вариант TFT.
Функция TP_TFT_Init
Данная функция инициализирует микроконтроллер и Touch Panel. Перед ее вызовом необходимо в обязательном порядке объявить линии, к которым подключена панель и включить АЦП. Формат функции следующий:
void TP_TFT_Init(unsigned int display_width, unsigned int display_height, unsigned int readX_ChNo, unsigned int readY_ChNo);
- display_width: ширина дисплея
- display_height: высота дисплея.
- readX_ChNo: номер канала АЦП по X
- readY_ChNo: номер канала АЦП по Y
Функция TP_TFT_Rotate
Поворачивает систему координат панели на 180 градусов. В исходном состоянии система координат совпадает с TFT дисплеем. Формат вызова:
void TP_TFT_Rotate(char);
Переменная char может принимать значения: 0 – исходная система координат, 1 – система координат, развернутая на 180 градусов.
Функция TP_TFT_Set_ADC_Threshold
Устанавливает разрешение АЦП. Допускается использовать данную функцию только после вызова TP_TFT_Init. Формат вызова функции:
void TP_TFT_Set_ADC_Threshold(unsigned int threshold);
Функция TP_TFT_Press_Detect
Возвращает 1 если обнаружено нажатие на сенсорный экран. В противном случае всегда возвращает 0. Формат вызова:
char TP_TFT_Press_Detect();
Функция TP_TFT_Get_Coordinates
Возвращает 1 в случае определения координат нажатия на экран и 0 во всех остальных случаях. Аргументами функции должны являться два указателя на переменные по координатам X и Y. После проведения процедуры калибровки, координаты нажатия имеют тот же формат, что и разрешение дисплея.
char TP_TFT_Get_Coordinates(unsigned int *x_coordinate, unsigned int *y_coordinate);
Функции TP_TFT_Calibrate_Min и TP_TFT_Calibrate_Max
Данные функции предназначены для сопоставления показаний АЦП и координат нажатия на экране. При их вызове программа будет ожидать нажатия в левом верхнем (минимальные координаты) или правом нижнем (максимальные координаты) углу дисплея.
void TP_TFT_Calibrate_Min();
void TP_TFT_Calibrate_Max();
Функция TP_TFT_Get_Calibration_Consts
Функция позволяет пользователю получить координаты левого верхнего и правого нижнего угла сенсорной панели в формате показаний АЦП. Данные показания как правило не совпадают с разрешением дисплея, что при не знании может поставить программиста в тупик.
void TP_TFT_Get_Calibration_Consts(unsigned int *x_min, unsigned int *x_max, unsigned int *y_min, unsigned int *y_max);
Аргументами функции являются указатели на переменные, которые должны содержать значения АЦП в левом верхнем и правом нижнем углах сенсорной панели.
- x_min: x координата левого верхнего угла
- x_max: x координата правого нижнего угла
- y_min: y x координата левого верхнего угла.
- y_max: y x координата правого нижнего угла
Функция TP_TFT_Set_Calibration_Consts
Позволяет задать калибровочные значения сенсорной панели без проведения процедуры калибровки.
void TP_TFT_Set_Calibration_Consts(unsigned int x_min, unsigned int x_max, unsigned int y_min, unsigned int y_max);
Аргументы функции:
- x_min: x координата левого верхнего угла
- x_max: x координата правого нижнего угла
- y_min: y x координата левого верхнего угла.
- y_max: y x координата правого нижнего угла