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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Удержание кнопки 6 секунд
MrYuran
сообщение May 7 2009, 10:36
Сообщение #16


Беспросветный оптимист
******

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



Цитата(C.S. @ May 7 2009, 13:52) *
У меня пока что флаги PRESSED и LOCKED стоят битами (на все кнопки), и ещё есть биты, которые показывают нажатие каждой кнопки.
Может, завести для каждой клавиши свой набор флагов? blink.gif

У меня был один набор флагов на всю клавиатуру (4 кнопки).
Комбинации одновременных нажатий максимум из 2-х кнопок (больше нажать затруднительно smile.gif ).
Все кнопки заведены на один порт, соответственно скан-код - общий на все кнопки. Фактически это состояние порта с наложенной маской в 4 бита.
Любое изменение кода (нажатие/отжатие кнопок) воспринимается как дребезг и сбрасывает флаги.

Если кнопки полностью автономные и нужно их обсчитывать по отдельности, тогда нужно для каждой свой набор флагов.

Цитата(C.S. @ May 7 2009, 13:52) *
З.Ы. Пишу на АСМе, на Си мне вообще ни черта не понятно

Вот это зря... Что непонятно...
А насчёт 100 байт - что такое 100 байт в масштабах галактики!
Иногда лишний флажок компилятора помогает утоптать код на несколько кил


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 7 2009, 11:45
Сообщение #17


Участник
*

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



Значит, я мыслю верно, но туплю насчёт моментов нажатия и отпускания.
1. Определили нажатие кнопки.
2. Считаем счётчик. По достижении защиты от дребезга выставим информацию "Кнопка ХХ нажата"
3. Считаем дальше. Досчитали до какого-то значения, выставляем информацию "Кнопка ХХ нажата долго"
4. Определили отпускание. Ставим информацию "Кнопка ХХ отпущена".

Основная программа, как мне видится, должна работать так:
Найден флаг "Кнопка ХХ нажата" -> скинули флаг (чтобы не пройти это услвие второй раз), обработали реакцию на нажатие
Аналогично с "Кнопка ХХ нажата долго" и с "Кнопка ХХ отпущена".

То-есть, по моей логике получается три варианта флагов. Меня смущает само мышление - так вообще люди делают? Я могу завести тогда (пока мало кнопок) - три регистра, по числу кнопок, и в каждом битами ставить свои флаги?

З.Ы. Хм, а что такое 100 байт в масштабах меги 8? wink.gif
Пока писал на АСМе, и никак не могу представить СИ в МК - он как-то тут неявно... в асме всё чётко - LDI Rx, 123. А в СИ это как-то непривычно.

В общем меня интересует именно обход последующих реакций "нажатия" на кнопку, если пользователь её ещё не отпустил.
При этом скан у меня идёт по таймеру. Вот я и думаю в направлении флагов - после обработки реакции на нажатие флаг сбрасывается.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 7 2009, 12:19
Сообщение #18


Беспросветный оптимист
******

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



Цитата(C.S. @ May 7 2009, 15:45) *
В общем меня интересует именно обход последующих реакций "нажатия" на кнопку, если пользователь её ещё не отпустил.
При этом скан у меня идёт по таймеру. Вот я и думаю в направлении флагов - после обработки реакции на нажатие флаг сбрасывается.

Вот в том куске, который я выкладывал, есть ещё флажок "Key_Tick", который выставляется для вызова обработчика кнопки.
Идея была такая. Например, при коротких нажатиях на кнопки "Вверх/Вниз" нужно было изменять параметр на 1. После залипания (через 1с) должна начинаться быстрая "прокрутка" (10 тиков в секунду).
Соответственно, сделал так:
После антидребезговой паузы ставлю первий "тик".
После залочки тики следуют с уменьшенными интервалами.
По каждому тику вызывается обработчик, в конце которого Key_Tick сбрасывается.
Ну и вообще комбинацией этих флагов можно описать практически любую ситуацию.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 7 2009, 12:55
Сообщение #19


Участник
*

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



Посмотрите пожалуйста алгоритм, если не сложно, на предмет камней. Нарисовал на примере одной кнопки.
Прикрепленный файл  KeyScan.pdf ( 93.93 килобайт ) Кол-во скачиваний: 344
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 7 2009, 17:49
Сообщение #20


Профессионал
*****

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



в аттаче - файл keyboard.c все Ваши проблемы там решены.
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 7 2009, 17:56
Сообщение #21


Участник
*

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



Спасибо! Сейчас посмотрю, поразбираюсь.
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 10 2009, 00:46
Сообщение #22


Участник
*

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



2Genadi Zawidowsk...
А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается?
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 10 2009, 06:10
Сообщение #23


Профессионал
*****

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



Цитата(C.S. @ May 10 2009, 04:46) *
2Genadi Zawidowsk...
А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается?

да, так и задумано...
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 10 2009, 23:24
Сообщение #24


Профессионал
*****

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



Цитата(C.S. @ May 10 2009, 04:46) *
2Genadi Zawidowsk...
А можно один вопросик? У нас же kbd_press при таком написании: switch (++ kbd_press) сначала инкрементируется, потом сравнивается?

Надеюсь, Вы заметили что эта строка относится к автоповтору, а не к фиксации удержанного нажатия клавиши?
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 11 2009, 14:45
Сообщение #25


Участник
*

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



Да, конечно. Интересно это всё на асм переводить %)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 11 2009, 17:49
Сообщение #26


Профессионал
*****

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



Цитата(C.S. @ May 11 2009, 18:45) *
Да, конечно. Интересно это всё на асм переводить %)

ОХ! вот, оказываеттся, чем Вы занимаетесь! Сказали бы - я тихо бы молчал... У Вас, я понимаю, времени еще много впереди?
А попробовать свою задачу на С изобразить времени нет?
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 12 2009, 07:59
Сообщение #27


Участник
*

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



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

В любом случае спасибо. Постараюсь не поднимать флуд на тему СИ vs ASM
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение May 12 2009, 09:24
Сообщение #28


Профессионал
*****

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



Цитата
Я делаю для себя

Если Вы заметили, этот проект, что отдан на растерзание - тоже сделан для себя, для радиолюбительских целей.
С желанием повозиться поспорить не могу, но вот этим проектом я вожусь уже довольно долго - около двух лет - и желание дорабатывать и менять его не зависит от языка. Просто "возня" переходит на другой уровень - на функциональность, на ясность кода, на то, что доставляет больше удовольствия - в конце концов на пользование готовыми изделиями.

Я возился со всем (почти со всем) кроме mcs51. И работающее изделие на новом для меня AVR появилось за несколько часов после того, как я принес домой первый купленный мною в магазине ATMega162 и спаял stk200. С ассемблером разбираться не стал - а просто засунул в него один из старых проектов для Intel386.

Сообщение отредактировал Genadi Zawidowski - May 12 2009, 09:26
Go to the top of the page
 
+Quote Post
C.S.
сообщение May 12 2009, 09:36
Сообщение #29


Участник
*

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



Вас понял. В следующих девайсах попробую на СИ. Хотя асм кое-где интереснее... все же.
Ну это, как и на компе. Если надо пару кнопочек - то берём, скажем, VB. Если точность и быстроту - например VC++. Что-то среднее - дельфи.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 12 2009, 09:58
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(Genadi Zawidowski @ May 12 2009, 13:24) *
... а просто засунул в него один из старых проектов для Intel386.

Если не секрет, как Вам это удалось?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:10
Рейтинг@Mail.ru


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