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

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

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

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



две кнопки

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

1

Подскажите пожалуйста как написать команду
чтобы при нажатии двух кнопок выполнялось условие?

Config Portd = Input                    'назначаем входы для кнопок
Portd = 255                             'подтяжка кнопок внутренним резистором

Config Portb = Output                   'назначаем выходы для светодиодов

Sw_play Alias Pind.0                    'даем кнопке имя play
Sw_pause Alias Pind.1                   'даем кнопке имя pause
Sw_stop Alias Pind.2                    'даем кнопке имя stop
Sw_rec Alias Pind.3                     'даем имя кнопке rec
Sw_ff Alias Pind.6                      'даем имя кн FF
Sw_rev Alias Pind.5                     'даем имя кн rev
K1 Alias Portb.0                        'даем имя входу
K2 Alias Portb.1
K3 Alias Portb.2
Led_play Alias Portb.3
Led_pause Alias Portb.4
Led_ff Alias Portb.5
Led_rev Alias Portb.6
Led_rec Alias Portb.7

Do

If Portd = &B0110111 Then
Portb = 0
Waitms 30
Set K1 : Set K2 : Set Led_rec
Set Led_pause
End If
Loop
End

в протеусе этот варриант не работает

0

2

leshui
А за счет чего Portd стал равен &B0110111?

Мне видится так:
if Sw_play=0 and Sw_stop=1 then  'если кнопка плей нажата,а кнопка стоп не нажата,то...
set Led_play
-чего-нить ещё,если надо-
end if

Отредактировано Sergik07 (2015-07-26 13:49:31)

0

3

Спасибо почти помогло, всплыла другая проблема, то что кн. play отпустить раньше нужно чем rec, иначе произойдет сброс и вкл. play. Щас буду думать как это исправить

0

4

leshui
Нужно,чтобы кнопка рек и плей включались вместе?

0

5

да не приходит в голову как сделать чтобы крутится в этом цикле пока не выполнятся команды и не отпустишь две кнопки в люб. послед.

Отредактировано leshui (2015-07-26 14:43:10)

0

6

Можно попробовать через флаги. Например,нажимаем кнопку рек, поднимаем флаг Пока флаг поднят кнопка плей как бы нажата (Sw_play=0),отпускаем кнопку рек,сбрасываем флаг в ноль,кнопку плей как бы отпускаем. Примерно так.

0

7

Sergik07
А как с флагами реализовать? По баскому очень мало инфы, что за флаги такие? Как ими пользоваться?

0

8

Я,в общем тоже не спец,но представляю это так:

Код:
Dim Flag_rec As Bit
Dim Flag_play As Bit

Sw_play Alias Pind.0
Sw_rec Alias Pind.3
Led_rec Alias Portb.1

Do

   If Sw_rec = 0 Then Set Flag_rec                                    'если кнопка нажата,поднимаем флаг( Flag_rec=1)
   If Sw_play = 0 Then Flag_play                                      'если кнопка нажата,поднимаем флаг( Flag_play=1)

   If Flag_rec = 1 And Flag_play = 1 Then                             'если оба флага подняты
      Set Led_rec                                                     'происходит какое-то действие
      Waitms 300
      Reset Led_rec

      Reset Flag_rec                                                  'и сбрасываем флаги до следующего нажатия двух кнопок
      Reset Flag_play
   End If


Loop

End

0

9

Sergik07

Спасибо тебе что направил на правильные мысли и подсказал как выполнять условие при двух нажатых кнопок, а то я второй день мучаюсь.(спать не могу, все мучаюсь, как это обойти и как его заставить)

информацию про флаги и как с ними работать в нэте я так и не нашел. почему-то никто не любит BASCOM.
Вообщем суть такая зажимаем две кнопки и только после этого выполняется условие, а отпусуаем кнопки в любой последовательности, прога уже запущена.
На железе не пробовал, но в Proteus-е работает, там даже дребезг в симуляции есть, чтобы забывчивые не забывали про него. 

Я решил задачу более простым способом:

Config Portd = Input                    'назначаем входы для кнопок
Portd = 255                             'подтяжка кнопок внутренним резистором

Config Portb = Output                   'назначаем выходы для светодиодов

Sw_play Alias Pind.0                    'даем кнопке имя play
Sw_pause Alias Pind.1                   'даем кнопке имя pause
Sw_stop Alias Pind.2                    'даем кнопке имя stop
Sw_rec Alias Pind.3                     'даем имя кнопке rec
Sw_ff Alias Pind.6                      'даем имя кн FF
Sw_rev Alias Pind.5                     'даем имя кн rev
K1 Alias Portb.0                        'даем имя входу
K2 Alias Portb.1
K3 Alias Portb.2
Led_play Alias Portb.3
Led_pause Alias Portb.4
Led_ff Alias Portb.5
Led_rev Alias Portb.6
Led_rec Alias Portb.7

Do
If Sw_play = 0 Then                     'кнопка play нажата?
Waitms 30
Portb = 0                               'антидребезг кн
Set K1 : Set Led_play                   'вкл ЭМ К1, зажечь светодиод play
End If

If Sw_rec = 0 And Sw_play = 0 Then      'проверяем нажаты две кнопки
Portb = 0                               'сбрасываем выход
Waitms 50                               'антидребезг кнопок
Set K1 : Set K2 : Set Led_rec           'если да то выполняем команды
Set Led_pause
While Sw_play = 0                       'крутимся в цикле пока кнопка play
Wend                                    'не будет отпущена
End If
Loop
End

0