Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Обработка короткого и длинного нажатия кнопки


Обработка короткого и длинного нажатия кнопки

Сообщений 1 страница 10 из 10

1

Здравствуйте!
Это мое первое сообщение на этом форуме. Недавно начал пользоваться баскомом .
Подскажите пожалуйста корректный код для обработки короткого и длинного нажатия кнопки.
Надо чтобы по короткому нажатию программа переходила на подпрограмму_1, а при длительном нажатии на подпрограмму_2.

0

2

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

+1

3

Весь и-нет перерыл и все образно так и пишут.
Может пример кода с комментариями выложите?
Так было бы нагляднее и доходчивее

0

4

Все это уже здесь проходили: Двойной "клик" на конопке. Как?

0

5

Надо чтобы по короткому нажатию программа переходила на подпрограмму_1, а при длительном нажатии на подпрограмму_2

Для такой задачи проще сделать так:
Если нажата кнопка, ждём, скажем 600 милисек. После проверяем, если всё ещё нажата, переходим на пп2, если нет- на пп1

0

6

kip написал(а):

проще сделать так:...

пытался вот так

Код:
Config PORTD.1 = Input
Config PORTB.1 = Output
Config PORTB.2 = Output

Btn Alias PORTD.1 'кнопка
Green Alias PORTB.1 'статус1 при коротком нажатии
Red Alias PORTB.2 'статус2 при долгом нажатии

'При инициализации светодиоды не светят
Red = 0
Green = 0

Do
If Btn = 1 Then 'кнопка нажата, тогда
Waitms 300 'ждем 300мс
if Btn = 1 Then 'кнопка нажата, тогда
Red = 1 'включаем красный светодиод, если долгое нажатие
Else ' в противном случае
Green = 1 'включаем зеленый, если было одиночное
End If
Loop

End

не пашет
ругается на if then expected; end if expected
Хотя, они у меня есть
Кто скажет, где ошибка

0

7

Условий у Вас два , а "end if" один. Добавьте ещё один "end if"  всё будет ОК.

0

8

kip написал(а):

Добавьте ещё один "end if"  всё будет ОК.

Добавил. При компилляции ошибок нет.
А вот в протеусе нажимаю на кнопку, вообще ничего не работает :(

0

9

Надо так

Код:
Config PIND.1 = Input
Btn Alias PIND.1 'кнопка

Отредактировано MACTEPok (2011-08-25 17:02:33)

0

10

Вот я балда!
Совсем забыл, что чтение порта это PIN
И как я мог ее не заметить. Заработался совсем!

Спасибо, MACTEPok!

0


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Обработка короткого и длинного нажатия кнопки