реклама на сайте
подробности

 
 
> Вопрос по uC/GUI + TouchScreen, Работа с виджетом BUTTON
Harvester
сообщение Jan 27 2011, 13:40
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Создаю экранную форму ввода данных (набор кнопок + поле EDIT) и столкнулся со следующими граблями:
1. Не возникает события WM_NOTIFY_PARENT с кодом WM_NOTIFICATION_RELEASED (в примерах обработка нажатий производится именно по этому коду). Ладно, пробую использовать код WM_NOTIFICATION_CLICKED - появляется другая проблема:
2. При повторных нажатиях на кнопку, имеющую фокус, событие WM_NOTIFICATION_CLICKED не формируется! Приглядевшись, обратил внимание,
что после нажатия на кнопку она остается в нажатом состоянии wacko.gif

Прошу знатоков подсказать, что я не так делаю. В чем проблема - неправильное использование GUI или неправильный драйвер TouchScreen?

Код драйвера TouchScreen (4-выводной резистивный экран + SPI-АЦП):
CODE
void GUI_TOUCH_Exec(void)
{
int_fast8_t i;
tRawDataArray raw_data_x, raw_data_y;
GUI_PID_STATE state;
uint16_t x, y;
int16_t xMin, xMax;
int16_t yMin, yMax;


xMin = xyMinMax[GUI_COORD_X].Min;
xMax = xyMinMax[GUI_COORD_X].Max;
yMin = xyMinMax[GUI_COORD_Y].Min;
yMax = xyMinMax[GUI_COORD_Y].Max;

GUI_TOUCH_GetState(&state);

if (BSP_IS_TS_PRESSED() == true)
{
for (i = 0; i < 7; i++) // Take 7 readings of y-coord
{
raw_data_y[i] = Ssi_SerializeTsc(TSC_CHAN_YPOS | TSC_MODE_12BIT | TSC_REF_DF | TSC_INTREF_ON | TSC_PENIRQ_DISABLED) >> 8;
}
for (i = 0; i < 7; i++) // Take 7 readings of x-coord
{
raw_data_x[i] = Ssi_SerializeTsc(TSC_CHAN_XPOS | TSC_MODE_12BIT | TSC_REF_DF | TSC_INTREF_ON | TSC_PENIRQ_DISABLED) >> 8;
}
Ssi_SerializeTsc(TSC_CHAN_XPOS | TSC_MODE_8BIT | TSC_REF_DF | TSC_INTREF_OFF | TSC_PENIRQ_ENABLED); // Enable PEN IRQ


yPhys = _MAVF(raw_data_y); // Averaging (simplified median filter)
xPhys = _MAVF(raw_data_x); // Averaging (simplified median filter)


// Convert adc values into logical values
#if !GUI_TOUCH_SWAP_XY // Is X/Y swapped ?
x = xPhys;
y = yPhys;
#else
x = yPhys;
y = xPhys;
#endif
if ((x >= xMin) && (x <= xMax) && (y >= yMin) && (y <= yMax))
{
// Correct coordinates, storing them and set Pressed flag
state.x = _AD2X(x);
state.y = _AD2Y(y);
state.Pressed = 1;
}
}
else {
state.Pressed = 0;
}

GUI_TOUCH_StoreStateEx(&state);
}



--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01348 секунд с 7
ELECTRONIX ©2004-2016