|
CodeVisionAVR помогите по написанию! |
|
|
|
Oct 31 2009, 07:07
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 30-10-09
Пользователь №: 53 320

|
Задумка такая, надо одной кнопкой переключаться между циклами в которых что то выполняется, но если я нажимаю кнопку, то он проскакивает все циклы так как кнопку не успеваешь отпустить! Подскажите как лучше организовать алгоритм переключения одной кнопкой между циклами?! Вот не правильный текст программы Код //выводим на LCD "нажмите кнопку _start_" lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("Hello!"); lcd_gotoxy(0,1); lcd_putsf("Press Start!"); while(PINA.0){ } //бесконечный цекл, ждем нажатие кнопки старт!!! lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("Temp. beep"); lcd_gotoxy(0,1); lcd_putchar(t_count); while(PINA.0){ //бесконечный цекл, ждем нажатие кнопки старт!!! // if (PINA.3){ }; if (PINA.1){ //если нажата кнопка + t_count++; lcd_gotoxy(0,1); lcd_putchar(t_count); }; if (PINA.2){ //если нажата кнопка - t_count--; lcd_gotoxy(0,1); lcd_putchar(t_count); }; }
Причина редактирования: Оформление цитаты исходника.
|
|
|
|
|
 |
Ответов
|
Oct 31 2009, 08:48
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(DRUID3 @ Oct 31 2009, 11:31)  Разумно... Но для такого объема программы - самое оно  ... Согласен. Но лучше привыкать к хорошему тону с малолетства:-) Цитата Кстати, дребезг контактов хорошо давится простейшей интегрирующей RC-цепочкой... Это да. Бывает даже так... Вопрос - а оно надо, если программно всё решается великолепно. А RC цепочка в динамическом сканировании например не подходит, да и лишние элементы на плате, лишние пайки, деньги...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Oct 31 2009, 09:12
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 30-10-09
Пользователь №: 53 320

|
Цитата(demiurg_spb @ Oct 31 2009, 12:48)  Согласен. Но лучше привыкать к хорошему тону с малолетства:-)Это да. Бывает даже так... Вопрос - а оно надо, если программно всё решается великолепно. А RC цепочка в динамическом сканировании например не подходит, да и лишние элементы на плате, лишние пайки, деньги... Подскажите как программно это решить?
|
|
|
|
|
Oct 31 2009, 13:36
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(ssvd @ Oct 31 2009, 12:12)  Подскажите как программно это решить? Вот Вам ещё три варианта: CODE #define MAX_CHECKS 10 // # checks before a switch is debounced uint8_t Debounced_State; // Debounced state of the switches uint8_t State[MAX_CHECKS]; // Array that maintains bounce status uint8_t Index; // Pointer into State // Service routine called by a timer interrupt void DebounceSwitch3() { uint8_t i,j; State[Index]=RawKeyPressed(); ++Index; j=0xff; for(i=0; i<MAX_CHECKS-1;i++) j=j & State[i]; Debounced_State= j; if(Index>=MAX_CHECKS) Index=0; }
//================================================================= bool_t DebounceSwitch2() { static uint16_t State = 0; // Current debounce status State=(State<<1) | !RawKeyPressed() | 0xe000; if(State==0xf000) return TRUE; return FALSE; }
//================================================================= #define CHECK_MSEC 5 // Read hardware every 5 msec #define PRESS_MSEC 10 // Stable time before registering pressed #define RELEASE_MSEC 100 // Stable time before registering released // This function reads the key state from the hardware. extern bool_t RawKeyPressed(); // This holds the debounced state of the key. bool_t DebouncedKeyPress = false; // Service routine called every CHECK_MSEC to // debounce both edges void DebounceSwitch1(bool_t *Key_changed, bool_t *Key_pressed) { static uint8_t Count = RELEASE_MSEC / CHECK_MSEC; bool_t RawState; *Key_changed = false; *Key_pressed = DebouncedKeyPress; RawState = RawKeyPressed(); if (RawState == DebouncedKeyPress) { // Set the timer which allows a change from current state. if (DebouncedKeyPress) Count = RELEASE_MSEC / CHECK_MSEC; else Count = PRESS_MSEC / CHECK_MSEC; } else { // Key has changed - wait for new state to become stable. if (--Count == 0) { // Timer expired - accept the change. DebouncedKeyPress = RawState; *Key_changed=true; *Key_pressed=DebouncedKeyPress; // And reset the timer. if (DebouncedKeyPress) Count = RELEASE_MSEC / CHECK_MSEC; else Count = PRESS_MSEC / CHECK_MSEC; } } }
P.S. Чтобы понять как оно работает много ума не надо.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Oct 31 2009, 15:43
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 30-10-09
Пользователь №: 53 320

|
Цитата(demiurg_spb @ Oct 31 2009, 17:36)  Вот Вам ещё три варианта: как я уже сказал, что С только начал изучать... можете построчно описать какой нибудь способ?
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
Сообщений в этой теме
ssvd CodeVisionAVR помогите по написанию! Oct 31 2009, 07:07 demiurg_spb Вам нужно применить алгоритм подавления дребезга к... Oct 31 2009, 08:02 DRUID3 Нужно просто добавить задержку (насколько помню та... Oct 31 2009, 08:15 demiurg_spb Цитата(DRUID3 @ Oct 31 2009, 11:15) Нужно... Oct 31 2009, 08:27     demiurg_spb Цитата(ssvd @ Oct 31 2009, 18:43) как я у... Oct 31 2009, 20:42 Genadi Zawidowski Вот в этом архиве есть файл keyboard.c - в нём про... Oct 31 2009, 11:03 ssvd Цитата(Genadi Zawidowski @ Oct 31 2009, 15... Oct 31 2009, 12:20  Genadi Zawidowski Цитата(ssvd @ Oct 31 2009, 15:20) спасибо... Oct 31 2009, 22:34 Vetal-Soft Сделай так
Код
while(PINA.0){ }; //беско... Nov 2 2009, 07:55 ssvd вот что написал, проверьте пожалуйста.
вызывается ... Nov 2 2009, 15:40 Vetal-Soft бред...
Модератор (rezident). Это сообщение являе... Nov 3 2009, 08:33 ssvd Цитата(Vetal-Soft @ Nov 3 2009, 12:3... Nov 3 2009, 13:51 XVR Цитата(Vetal-Soft @ Nov 3 2009, 11:3... Nov 5 2009, 07:36  ssvd Цитата(XVR @ Nov 5 2009, 11:36) Ну перебо... Nov 9 2009, 10:09 Vetal-Soft Цитата(ssvd @ Nov 3 2009, 18:51) я вообще... Nov 4 2009, 08:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|