Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 25.01.2013, 00:11  
Dimitrij
Временная регистрация
 
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
Dimitrij на пути к лучшему
По умолчанию Помогите с обработкой кнопок в CVAVR

Сразу сильно не пинайте, я только учусь.
Обрабатываю однократное нажатие кнопок в CVAVR:
PHP код:
if(!PINB.1){            //ели нажата кнопка 1, то однократно   
       
if(!PINB.2Key=3;  //отрабатывается Key=4, а если кнопка2,  
       
else Key=4;}          //то отрабатывается Key=3
     
else Key=0;             //ели ничего не нажато 
Кнопка на PINB.1 отрабатывается нормально, а на PINB.1 не работает.
Что не так?
Реклама:

Последний раз редактировалось Dimitrij; 25.01.2013 в 00:13.
Dimitrij вне форума  
Непрочитано 25.01.2013, 00:23  
Saadov
Почётный гражданин KAZUS.RU
 
Аватар для Saadov
 
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
Saadov на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

Исправте последнее предложение.
У вас PINB.2 будет отрабатываться, если нажата PINB.1.
Задумывалось то как?
Saadov вне форума  
Непрочитано 25.01.2013, 00:43  
Dimitrij
Временная регистрация
 
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
Dimitrij на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

Сообщение от Saadov Посмотреть сообщение
Задумывалось то как?
Если нажать на кнопку1 (PINB.1), то однократно сработает Key=4,
а ели на кнопку2 (PINB.2), то однократно сработает Key=3.
Если код такой:
PHP код:
if(!PINB.1Key=4;
   else 
Key=0;
if(!
PINB.2Key=3;
  else 
Key=0
то срабатывает только Key=3
Что-то совсем запутался.
Dimitrij вне форума  
Непрочитано 25.01.2013, 01:03  
Saadov
Почётный гражданин KAZUS.RU
 
Аватар для Saadov
 
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
Saadov на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

PHP код:
int knKey 0;
while(
1)
{
if(!
PINB.1){ kn 0delay_ms(20); while (PINB.1 == kn); Key=4; };
if(!
PINB.2){ kn 0delay_ms(20); while (PINB.2 == kn); Key=3; };
}; 
В вашем случае мы нажали PINB.1 и присвоили переменной Key значение 4, дальше у нас по ходу действия программы проверяется нажата ли PINB.2, если не нажата, то Key присваивается значение 0, т.е вы почти сразу же обнуляете Key.

Код выше работает так, вы нажали кнопку, ждем 20 мсек пока пройдет дребезг, снова проверяем не изменилось ли состояние кнопки, ждем пока изменится и присваиваем переменной нужное значение.
Saadov вне форума  
Непрочитано 25.01.2013, 01:19  
Saadov
Почётный гражданин KAZUS.RU
 
Аватар для Saadov
 
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
Saadov на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

Ах да, если ни одна кнопка не нажата, то у вас Key будет равен 0, если хоть одна нажата, то при обработке значения Key, просто обнуляете Key, т.е.
PHP код:
switch(Key){
case 
4:  Key 0;  //делаем что-то, если нажата кнопка 1
break;
case 
3:  Key 0;  //делаем что-то, если нажата кнопка 2
break;
}; 
Saadov вне форума  
Непрочитано 25.01.2013, 01:47  
Dimitrij
Временная регистрация
 
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
Dimitrij на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

Сообщение от Saadov Посмотреть сообщение
Код выше работает так, вы нажали кнопку, ждем 20 мсек пока пройдет дребезг, снова проверяем не изменилось ли состояние кнопки, ждем пока изменится и присваиваем переменной нужное значение.
Но мне нужно, чтобы при отпускании кнопки значение переменной вернулось в исходное (Key=0), а при Вашем коде оно не возвращается.
У меня загвоздка как раз в том, чтобы при отпускании кнопки вернуть исходное значение.
Может, я изначально не так поставил вопрос?
Код функции:
PHP код:
unsigned char KEYPRESS (void);

int knKey 0;
unsigned char KEYPRESS ()
{
if(!
PINB.1){ kn 0delay_ms(20); while (PINB.1 == kn); Key=4; };
if(!
PINB.2){ kn 0delay_ms(20); while (PINB.2 == kn); Key=3; };

return(
Key);
}; 
Dimitrij вне форума  
Непрочитано 25.01.2013, 02:37  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

Можно так сделать: при нажатии однократно вернётся ненулевое значение, в остальных случаях возвращает 0
PHP код:
unsigned char KEYPRESS (void); 

unsigned char oldPIN1=1;
unsigned char oldPIN2=1;

unsigned char KEYPRESS () 

  if(!
PINB.1)
  { 
    if(
oldPIN1)
    {
      
oldPIN1=0;
      return 
4;
    }
  }
  else 
oldPIN1=1;
  
  if(!
PINB.2)
  { 
    if(
oldPIN2)
    {
      
oldPIN2=0;
      return 
3;
    }
  }
  else 
oldPIN2=1;
 
  return 
0;


Последний раз редактировалось Yurkin2007; 25.01.2013 в 02:44.
Yurkin2007 вне форума  
Непрочитано 25.01.2013, 11:39  
Dimitrij
Временная регистрация
 
Регистрация: 26.02.2005
Сообщений: 78
Сказал спасибо: 15
Сказали Спасибо 16 раз(а) в 16 сообщении(ях)
Dimitrij на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

Сообщение от Saadov Посмотреть сообщение
делаем что-то, если нажата кнопка
Что-то в этом коде я ничего не пойму. Как программа поймет, на каком порту какая кнопка нажата?
Dimitrij вне форума  
Непрочитано 25.01.2013, 11:49  
Wiza_
Почётный гражданин KAZUS.RU
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

Key=0;
if(!PINB.1) Key=4;
if(!PINB.2) Key=3;

При одновременно нажатых кнопках Key=3;

Если надо обрабатывать обе кнопки - вам к битовым операциям
Key=0;
if(!PINB.1) Key |= (1 ‹‹ 1);
if(!PINB.2) Key |= (1 ‹‹ 2);

Нажатия конопок:
ничего не нажато - 0
Нажата первая кнопка - 2
Нажата вторая кнопка - 4
Нажаты обе кнопки - 6

Последний раз редактировалось Wiza_; 25.01.2013 в 11:52.
Wiza_ вне форума  
Непрочитано 25.01.2013, 12:36  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Помогите с обработкой кнопок в CVAVR

Сообщение от Wiza_ Посмотреть сообщение
Key=0;
if(!PINB.1) Key=4;
if(!PINB.2) Key=3;

При одновременно нажатых кнопках Key=3;

Если надо обрабатывать обе кнопки - вам к битовым операциям
Key=0;
if(!PINB.1) Key |= (1 ‹‹ 1);
if(!PINB.2) Key |= (1 ‹‹ 2);

Нажатия конопок:
ничего не нажато - 0
Нажата первая кнопка - 2
Нажата вторая кнопка - 4
Нажаты обе кнопки - 6
сдвиги то зачем?
Key = PINB & 6;
Boba_spb вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самосрабатывание кнопок al-slimy Делимся опытом 5 29.01.2015 16:41
Помогите найти обучалки по микроконтроллерах AVR на CVAVR ! olegdemkiv111 Микроконтроллеры, АЦП, память и т.д 9 20.08.2012 09:59
Помогите переписать с winavr на cvavr vituha40 Цифровые сигнальные процессоры 21 25.05.2011 21:20
Помогите с записью в память по заданному адресу в cvavr begun Микроконтроллеры, АЦП, память и т.д 5 06.04.2011 11:32
Помогите с обработкой нажатия кнопки pic12f629 alexandr-nimnul Микроконтроллеры, АЦП, память и т.д 5 18.10.2009 13:15


Часовой пояс GMT +4, время: 11:31.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot