DogPawlowa 0 15 февраля, 2008 Опубликовано 15 февраля, 2008 · Жалоба В постоянном цикле происходит проверка линия порта на нажатие. Если нажатия нет, то ничего не делать. Если нажатие есть - произвести задержку на 200 мкс. После этого увеличить значение переменной user на 10. Попробуйте подумать, что будет дальше, если кнопка нажата более 400 мкс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Motion 0 15 февраля, 2008 Опубликовано 15 февраля, 2008 · Жалоба Попробуйте подумать, что будет дальше, если кнопка нажата более 400 мкс. Произойдёт повторное нажатие Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 15 февраля, 2008 Опубликовано 15 февраля, 2008 · Жалоба Произойдёт повторное нажатие Отлично. Как видите, можно программировать на языке Р (русском). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Motion 0 15 февраля, 2008 Опубликовано 15 февраля, 2008 · Жалоба И что из этого следует? Нужно увеличить задержку? Сделал вот так: while (PINC.0==1){} //кнопка подключена одним концом к земле, другим к PINC.0. Линия порта включена на ввод через поддягивающий резистор delay_us(2000); //функция задержки на 2 мс if (user<100) user=user+10; else {} При нажатии на кнопку - яркость не увеличивается на 10%, а на 50% (то есть до самого конца). Задержку увеличил до 2 мс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 15 февраля, 2008 Опубликовано 15 февраля, 2008 · Жалоба И что из этого следует? Нужно увеличить задержку? Сделал вот так: При нажатии на кнопку - яркость не увеличивается на 10%, а на 50% (то есть до самого конца). Задержку увеличил до 2 мс. То есть думать сами Вы категорически отказываетесь? Тогда возьмите пример zltigo, так будет проще всем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Motion 0 15 февраля, 2008 Опубликовано 15 февраля, 2008 · Жалоба То есть думать сами Вы категорически отказываетесь? Хочу сам сообразить. while (PINC.0==1){} //кнопка подключена одним концом к земле, другим к PINC.0. Линия порта включена на ввод через поддягивающий резистор if (user<100) user=user+10; else {} delay_us(2000); //функция задержки на 2 мс При появлении на выводе нуля (нажатия кнопки) выполняется проверка - если значение яркости меньше 100% значит увеличить его на 10%, в противном случае ничего не делать. После этого сделать задержку в 2 мс. Вы хотите сказать, что кнопку я держу более 2 мс? Сейчас попробую сделать задержку на 2 с. Вроде всё правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BigCoster 0 15 февраля, 2008 Опубликовано 15 февраля, 2008 (изменено) · Жалоба Хочу сам сообразить. При появлении на выводе нуля (нажатия кнопки) выполняется проверка - если значение яркости меньше 100% значит увеличить его на 10%, в противном случае ничего не делать. После этого сделать задержку в 2 мс. Вы хотите сказать, что кнопку я держу более 2 мс? Сейчас попробую сделать задержку на 2 с. Вроде всё правильно. Почему не пользуетесь таймерами? Я недавно делал где-то вот так, тоже на лампочке :) // Timer/Counter 2 initialization // Clock source: System Clock 16МГц // Clock value: 62,500 kHz // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x06; TCNT2=0xC2; OCR2=0x00; #define key PINC.0 #define minPWM 1 #define maxPWM 1023 unsigned int T2count = 0; unsigned char flag = 0; int pwm = 0; // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { // Reinitialize Timer 2 value TCNT2=194; //0.992 milisecond: if (T2count <= 1007) //default 1007 { T2count++; if ((!key)&&(!flag)) { if (pwm <= maxPWM) pwm++; else flag = 1; } else if ((!key)&&(flag)) { if (pwm >= minPWM) pwm--; else flag = 0; } } else { //0,999936 second: T2count=0; } } Слышал здесь интерактивный курс по Си, поругайте и меня Изменено 15 февраля, 2008 пользователем BigCoster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться