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

 
 
> динамический опрос кнопок, запутался окончательно
Anjey_N
сообщение Mar 7 2008, 13:39
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Всем привет! Вот пришёл просить помощи. Задача несложная, только я вконец уже запутался.
Есть МК ATmega16, АЛС, индикация динамическая, кнопки М, +, -
Есть массив переменных set_temp[3]. Пока кнопки не нажаты, происходит каждые 5 сек поочерёдный вывод на индикатор содержимого массива. ( с этим я разобрался работает). При нажати на М включается режим редактирования, 2 мл разряда индикатора мигают. Кнопками + и - изменяется содержимое элемента массива. Последующее нажатие М приводит к переходу к следующему элементу массива.
Если все элементы отредактированы - записать в EEPROM.

Кто что посоветует, или поможет кодом. Свой я надлежаще оформлю и выставлю позже. Пишу на Си в ИАРе.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
algidim
сообщение Mar 7 2008, 15:49
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 5-04-06
Из: Москва
Пользователь №: 15 847



У вас схема не может работать по определению, ну подумайте сами. В тот момент, когда вы выставляете на PA7 лог 1 и опрашиваете PD0-PD2, с челью узнать нажатую кнопку, вы получите на PD0-PD2 в любом случае лог 1, даже если кнопки не нажаты, если конечно, у вас подключены встроенные подтягивающее резисторы. Если они не подключены то результат опроса будет не предсказуем, похоже, у вас такая ситуация. Просто, прежде чем проектировать подобные схемы, нужно чётко представлять логику её работы.
Go to the top of the page
 
+Quote Post
Anjey_N
сообщение Mar 7 2008, 17:46
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Цитата(algidim @ Mar 7 2008, 19:49) *
У вас схема не может работать по определению, ну подумайте сами. В тот момент, когда вы выставляете на PA7 лог 1 и опрашиваете PD0-PD2, с челью узнать нажатую кнопку, вы получите на PD0-PD2 в любом случае лог 1, даже если кнопки не нажаты, если конечно, у вас подключены встроенные подтягивающее резисторы. Если они не подключены то результат опроса будет не предсказуем, похоже, у вас такая ситуация. Просто, прежде чем проектировать подобные схемы, нужно чётко представлять логику её работы.


Не совсем так. Эта схема работает. И не только в симуляторе, но и на реальном контроллере, упрравление идёт через JTAG.
PA7 настроен на вход с подтягивающим резистором. Когда нажата кнопка, лог. нуль через диод, замкнутую кнопку подаётся на вход PA7. Запоминается номер вывода и взводится флаг антидребезга на 20 мсек для устранения дребезга. После этого программа улучает момент, когда лог. нуль появляется на том выводе, который она запомнила перед пднятием флага антидребезга. Если кнопка замкнута, тогда номер вывода = запомненному номеру и программа возвращает номер вывода, те номер кнопки. Может туманно объяснил, смотри код

// Сканирование клавиатуры
unsigned char Scan_Key(void)
{
static unsigned char pk=0;
static unsigned char Key_Buf;
if(TESTBIT(flag,DREBEZG)) //
{
if(cnt_dr!=0)
{
delay_timer1(MSEC(1)); // задержка 1 мсек
// delay_ms(1);
cnt_dr--;
}
else
{
cnt_dr=CNT_DR_MAX;
CLEARBIT(flag,DREBEZG);
BUZER=0; // снять звуковой сигнал
}
}
else
{
switch (h)
{
case 0 : if (!KEY) // кнопка нажата!
{
SETBIT(flag,DREBEZG); // взвести флаг антидребезга
BUZER=1; // подать звуковой сигнал
Key_Buf=n; // запомнить номер кнопки
h++; // увеличить счётчик прохождений
}
pk=0; break;
case 1 : if(n==Key_Buf)
{
if (!KEY)
{
SETBIT(key,n); // запоминаем нажатую кнопку!
pk=key;
SETBIT(flag,KEYBOARD);
}
else // если кнопка отжата,
{ // то проверяем - действительно ли
SETBIT(flag,DREBEZG); // взводим флаг антидребезга
h++; // и увеличиваем счётчик прохождений
}
}
break;
case 2 : if((KEY)&&(Key_Buf==n)) // если кнопка отжата и её
{ // номер соответствует записанному в буфер
Key_Buf=0xFF; // запись в буфер неиспользуемого числа
h=0; // обнуление счётчика прохождений
pk=0;
key=0;
CLEARBIT(flag,BUSY);
}
break;
default: break;
}
}
return pk;
}

Сообщение отредактировал Anjey_N - Mar 7 2008, 17:47
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Anjey_N   динамический опрос кнопок   Mar 7 2008, 13:39
- - aaarrr   А вопрос-то в чем - как кнопки опрашивать? Кнопки...   Mar 7 2008, 13:50
|- - Anjey_N   Цитата(aaarrr @ Mar 7 2008, 17:50) А вопр...   Mar 7 2008, 13:59
- - vet   в прерывании таймера - опрос кнопок, антидребезг, ...   Mar 7 2008, 13:59
- - rezident   Поскольку для динамической индикации используется ...   Mar 7 2008, 16:57
|- - aaarrr   Цитата(rezident @ Mar 7 2008, 19:57) Поск...   Mar 7 2008, 17:00
|- - rezident   Цитата(aaarrr @ Mar 7 2008, 22:00) С чего...   Mar 7 2008, 19:47
- - algidim   Да я извиняюсь, не досмотрел, схема рабочая, прост...   Mar 7 2008, 18:27
- - Anjey_N   Вот приготовил свой код на рассмотрение. Критикуйт...   Mar 10 2008, 06:19
- - SasaVitebsk   Так, на скорую руку писал, и без проверки, но идея...   Mar 10 2008, 21:48
|- - Anjey_N   Цитата(SasaVitebsk @ Mar 11 2008, 01:48) ...   Mar 11 2008, 18:19
|- - SasaVitebsk   Цитата(Anjey_N @ Mar 11 2008, 22:19) не п...   Mar 12 2008, 09:28
- - rimpocha   http://www.embedded.com/columns/breakpoint...eques...   Mar 12 2008, 19:08
|- - Anjey_N   Цитата(rimpocha @ Mar 12 2008, 23:08) htt...   Mar 13 2008, 15:51
|- - rimpocha   Цитата(Anjey_N @ Mar 13 2008, 21:51) Необ...   Mar 13 2008, 16:25
|- - Anjey_N   Цитата(rimpocha @ Mar 13 2008, 20:25) Эх....   Mar 22 2008, 18:16
|- - rimpocha   Цитата(Anjey_N @ Mar 23 2008, 00:16) А ка...   Mar 22 2008, 18:20
|- - Anjey_N   Цитата(rimpocha @ Mar 22 2008, 22:20) Это...   Mar 22 2008, 18:27
- - Anjey_N   Ух, ты! В данном алгоритме кнопка одним концом...   Mar 14 2008, 15:54
- - rimpocha   Цитата(Anjey_N @ Mar 14 2008, 21:54) Ух, ...   Mar 14 2008, 18:30
- - SasaVitebsk   Цитата(Anjey_N @ Mar 14 2008, 19:54) Вы о...   Mar 14 2008, 19:33


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:35
Рейтинг@Mail.ru


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