MrYuran 18 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба У меня пока что флаги PRESSED и LOCKED стоят битами (на все кнопки), и ещё есть биты, которые показывают нажатие каждой кнопки. Может, завести для каждой клавиши свой набор флагов? :blink: У меня был один набор флагов на всю клавиатуру (4 кнопки). Комбинации одновременных нажатий максимум из 2-х кнопок (больше нажать затруднительно :) ). Все кнопки заведены на один порт, соответственно скан-код - общий на все кнопки. Фактически это состояние порта с наложенной маской в 4 бита. Любое изменение кода (нажатие/отжатие кнопок) воспринимается как дребезг и сбрасывает флаги. Если кнопки полностью автономные и нужно их обсчитывать по отдельности, тогда нужно для каждой свой набор флагов. З.Ы. Пишу на АСМе, на Си мне вообще ни черта не понятно Вот это зря... Что непонятно... А насчёт 100 байт - что такое 100 байт в масштабах галактики! Иногда лишний флажок компилятора помогает утоптать код на несколько кил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSS 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Значит, я мыслю верно, но туплю насчёт моментов нажатия и отпускания. 1. Определили нажатие кнопки. 2. Считаем счётчик. По достижении защиты от дребезга выставим информацию "Кнопка ХХ нажата" 3. Считаем дальше. Досчитали до какого-то значения, выставляем информацию "Кнопка ХХ нажата долго" 4. Определили отпускание. Ставим информацию "Кнопка ХХ отпущена". Основная программа, как мне видится, должна работать так: Найден флаг "Кнопка ХХ нажата" -> скинули флаг (чтобы не пройти это услвие второй раз), обработали реакцию на нажатие Аналогично с "Кнопка ХХ нажата долго" и с "Кнопка ХХ отпущена". То-есть, по моей логике получается три варианта флагов. Меня смущает само мышление - так вообще люди делают? Я могу завести тогда (пока мало кнопок) - три регистра, по числу кнопок, и в каждом битами ставить свои флаги? З.Ы. Хм, а что такое 100 байт в масштабах меги 8? ;) Пока писал на АСМе, и никак не могу представить СИ в МК - он как-то тут неявно... в асме всё чётко - LDI Rx, 123. А в СИ это как-то непривычно. В общем меня интересует именно обход последующих реакций "нажатия" на кнопку, если пользователь её ещё не отпустил. При этом скан у меня идёт по таймеру. Вот я и думаю в направлении флагов - после обработки реакции на нажатие флаг сбрасывается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 18 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба В общем меня интересует именно обход последующих реакций "нажатия" на кнопку, если пользователь её ещё не отпустил. При этом скан у меня идёт по таймеру. Вот я и думаю в направлении флагов - после обработки реакции на нажатие флаг сбрасывается. Вот в том куске, который я выкладывал, есть ещё флажок "Key_Tick", который выставляется для вызова обработчика кнопки. Идея была такая. Например, при коротких нажатиях на кнопки "Вверх/Вниз" нужно было изменять параметр на 1. После залипания (через 1с) должна начинаться быстрая "прокрутка" (10 тиков в секунду). Соответственно, сделал так: После антидребезговой паузы ставлю первий "тик". После залочки тики следуют с уменьшенными интервалами. По каждому тику вызывается обработчик, в конце которого Key_Tick сбрасывается. Ну и вообще комбинацией этих флагов можно описать практически любую ситуацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSS 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Посмотрите пожалуйста алгоритм, если не сложно, на предмет камней. Нарисовал на примере одной кнопки. KeyScan.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба в аттаче - файл keyboard.c все Ваши проблемы там решены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSS 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Спасибо! Сейчас посмотрю, поразбираюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSS 0 10 мая, 2009 Опубликовано 10 мая, 2009 · Жалоба 2Genadi Zawidowsk... А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 мая, 2009 Опубликовано 10 мая, 2009 · Жалоба 2Genadi Zawidowsk... А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается? да, так и задумано... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 мая, 2009 Опубликовано 10 мая, 2009 · Жалоба 2Genadi Zawidowsk... А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается? Надеюсь, Вы заметили что эта строка относится к автоповтору, а не к фиксации удержанного нажатия клавиши? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSS 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Да, конечно. Интересно это всё на асм переводить %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Да, конечно. Интересно это всё на асм переводить %) ОХ! вот, оказываеттся, чем Вы занимаетесь! Сказали бы - я тихо бы молчал... У Вас, я понимаю, времени еще много впереди? А попробовать свою задачу на С изобразить времени нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSS 0 12 мая, 2009 Опубликовано 12 мая, 2009 · Жалоба *стало стыдно* Я делаю для себя. Знаю, что на профессиональный уровень не выйду. Наверное, интересно повозиться. Хочу в итоге получить управляемый диммер. Пока вожусь на Меге8 (то, что было) - думаю, туда СИ и реалтайм под диммер не влезут просто. Зато, в принципе, переводя, можно поучиться и оптимизировать и понимать, что происходит в проце. Хотя, конечно, я могу быть старомодным... ибо лет 5 назад возился с MCS51, потом забросил. В любом случае спасибо. Постараюсь не поднимать флуд на тему СИ vs ASM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 12 мая, 2009 Опубликовано 12 мая, 2009 (изменено) · Жалоба Я делаю для себя Если Вы заметили, этот проект, что отдан на растерзание - тоже сделан для себя, для радиолюбительских целей. С желанием повозиться поспорить не могу, но вот этим проектом я вожусь уже довольно долго - около двух лет - и желание дорабатывать и менять его не зависит от языка. Просто "возня" переходит на другой уровень - на функциональность, на ясность кода, на то, что доставляет больше удовольствия - в конце концов на пользование готовыми изделиями. Я возился со всем (почти со всем) кроме mcs51. И работающее изделие на новом для меня AVR появилось за несколько часов после того, как я принес домой первый купленный мною в магазине ATMega162 и спаял stk200. С ассемблером разбираться не стал - а просто засунул в него один из старых проектов для Intel386. Изменено 12 мая, 2009 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSS 0 12 мая, 2009 Опубликовано 12 мая, 2009 · Жалоба Вас понял. В следующих девайсах попробую на СИ. Хотя асм кое-где интереснее... все же. Ну это, как и на компе. Если надо пару кнопочек - то берём, скажем, VB. Если точность и быстроту - например VC++. Что-то среднее - дельфи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 12 мая, 2009 Опубликовано 12 мая, 2009 · Жалоба ... а просто засунул в него один из старых проектов для Intel386. Если не секрет, как Вам это удалось? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться