|
|
  |
Удержание кнопки 6 секунд |
|
|
|
May 7 2009, 10:36
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(C.S. @ May 7 2009, 13:52)  У меня пока что флаги PRESSED и LOCKED стоят битами (на все кнопки), и ещё есть биты, которые показывают нажатие каждой кнопки. Может, завести для каждой клавиши свой набор флагов?  У меня был один набор флагов на всю клавиатуру (4 кнопки). Комбинации одновременных нажатий максимум из 2-х кнопок (больше нажать затруднительно  ). Все кнопки заведены на один порт, соответственно скан-код - общий на все кнопки. Фактически это состояние порта с наложенной маской в 4 бита. Любое изменение кода (нажатие/отжатие кнопок) воспринимается как дребезг и сбрасывает флаги. Если кнопки полностью автономные и нужно их обсчитывать по отдельности, тогда нужно для каждой свой набор флагов. Цитата(C.S. @ May 7 2009, 13:52)  З.Ы. Пишу на АСМе, на Си мне вообще ни черта не понятно Вот это зря... Что непонятно... А насчёт 100 байт - что такое 100 байт в масштабах галактики! Иногда лишний флажок компилятора помогает утоптать код на несколько кил
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 7 2009, 11:45
|

Участник

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733

|
Значит, я мыслю верно, но туплю насчёт моментов нажатия и отпускания. 1. Определили нажатие кнопки. 2. Считаем счётчик. По достижении защиты от дребезга выставим информацию "Кнопка ХХ нажата" 3. Считаем дальше. Досчитали до какого-то значения, выставляем информацию "Кнопка ХХ нажата долго" 4. Определили отпускание. Ставим информацию "Кнопка ХХ отпущена". Основная программа, как мне видится, должна работать так: Найден флаг "Кнопка ХХ нажата" -> скинули флаг (чтобы не пройти это услвие второй раз), обработали реакцию на нажатие Аналогично с "Кнопка ХХ нажата долго" и с "Кнопка ХХ отпущена". То-есть, по моей логике получается три варианта флагов. Меня смущает само мышление - так вообще люди делают? Я могу завести тогда (пока мало кнопок) - три регистра, по числу кнопок, и в каждом битами ставить свои флаги? З.Ы. Хм, а что такое 100 байт в масштабах меги 8?  Пока писал на АСМе, и никак не могу представить СИ в МК - он как-то тут неявно... в асме всё чётко - LDI Rx, 123. А в СИ это как-то непривычно. В общем меня интересует именно обход последующих реакций "нажатия" на кнопку, если пользователь её ещё не отпустил. При этом скан у меня идёт по таймеру. Вот я и думаю в направлении флагов - после обработки реакции на нажатие флаг сбрасывается.
|
|
|
|
|
May 7 2009, 12:19
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(C.S. @ May 7 2009, 15:45)  В общем меня интересует именно обход последующих реакций "нажатия" на кнопку, если пользователь её ещё не отпустил. При этом скан у меня идёт по таймеру. Вот я и думаю в направлении флагов - после обработки реакции на нажатие флаг сбрасывается. Вот в том куске, который я выкладывал, есть ещё флажок "Key_Tick", который выставляется для вызова обработчика кнопки. Идея была такая. Например, при коротких нажатиях на кнопки "Вверх/Вниз" нужно было изменять параметр на 1. После залипания (через 1с) должна начинаться быстрая "прокрутка" (10 тиков в секунду). Соответственно, сделал так: После антидребезговой паузы ставлю первий "тик". После залочки тики следуют с уменьшенными интервалами. По каждому тику вызывается обработчик, в конце которого Key_Tick сбрасывается. Ну и вообще комбинацией этих флагов можно описать практически любую ситуацию.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 12 2009, 07:59
|

Участник

Группа: Участник
Сообщений: 52
Регистрация: 6-05-09
Из: Москва
Пользователь №: 48 733

|
*стало стыдно* Я делаю для себя. Знаю, что на профессиональный уровень не выйду. Наверное, интересно повозиться. Хочу в итоге получить управляемый диммер. Пока вожусь на Меге8 (то, что было) - думаю, туда СИ и реалтайм под диммер не влезут просто. Зато, в принципе, переводя, можно поучиться и оптимизировать и понимать, что происходит в проце. Хотя, конечно, я могу быть старомодным... ибо лет 5 назад возился с MCS51, потом забросил.
В любом случае спасибо. Постараюсь не поднимать флуд на тему СИ vs ASM
|
|
|
|
|
May 12 2009, 09:24
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата Я делаю для себя Если Вы заметили, этот проект, что отдан на растерзание - тоже сделан для себя, для радиолюбительских целей. С желанием повозиться поспорить не могу, но вот этим проектом я вожусь уже довольно долго - около двух лет - и желание дорабатывать и менять его не зависит от языка. Просто "возня" переходит на другой уровень - на функциональность, на ясность кода, на то, что доставляет больше удовольствия - в конце концов на пользование готовыми изделиями. Я возился со всем (почти со всем) кроме mcs51. И работающее изделие на новом для меня AVR появилось за несколько часов после того, как я принес домой первый купленный мною в магазине ATMega162 и спаял stk200. С ассемблером разбираться не стал - а просто засунул в него один из старых проектов для Intel386.
Сообщение отредактировал Genadi Zawidowski - May 12 2009, 09:26
|
|
|
|
|
May 12 2009, 09:58
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(Genadi Zawidowski @ May 12 2009, 13:24)  ... а просто засунул в него один из старых проектов для Intel386. Если не секрет, как Вам это удалось?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|