Перейти к содержанию
    

Непонятна логика программы

В постоянном цикле происходит проверка линия порта на нажатие. Если нажатия нет, то ничего не делать.

Если нажатие есть - произвести задержку на 200 мкс. После этого увеличить значение переменной user на 10.

Попробуйте подумать, что будет дальше, если кнопка нажата более 400 мкс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте подумать, что будет дальше, если кнопка нажата более 400 мкс.

 

Произойдёт повторное нажатие

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Произойдёт повторное нажатие

Отлично. Как видите, можно программировать на языке Р (русском).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И что из этого следует? Нужно увеличить задержку?

 

Сделал вот так:

while (PINC.0==1){} //кнопка подключена одним концом к земле, другим к PINC.0. Линия порта включена на ввод через поддягивающий резистор

delay_us(2000); //функция задержки на 2 мс

if (user<100)

user=user+10;

else {}

 

При нажатии на кнопку - яркость не увеличивается на 10%, а на 50% (то есть до самого конца). Задержку увеличил до 2 мс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И что из этого следует? Нужно увеличить задержку?

 

Сделал вот так:

При нажатии на кнопку - яркость не увеличивается на 10%, а на 50% (то есть до самого конца). Задержку увеличил до 2 мс.

То есть думать сами Вы категорически отказываетесь?

Тогда возьмите пример zltigo, так будет проще всем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть думать сами Вы категорически отказываетесь?

 

Хочу сам сообразить.

 

 

while (PINC.0==1){} //кнопка подключена одним концом к земле, другим к PINC.0. Линия порта включена на ввод через поддягивающий резистор

if (user<100)

user=user+10;

else {}

delay_us(2000); //функция задержки на 2 мс

 

 

При появлении на выводе нуля (нажатия кнопки) выполняется проверка - если значение яркости меньше 100% значит увеличить его на 10%, в противном случае ничего не делать. После этого сделать задержку в 2 мс. Вы хотите сказать, что кнопку я держу более 2 мс? Сейчас попробую сделать задержку на 2 с.

 

Вроде всё правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу сам сообразить.

При появлении на выводе нуля (нажатия кнопки) выполняется проверка - если значение яркости меньше 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;
    }     
}

 

Слышал здесь интерактивный курс по Си, поругайте и меня :biggrin:

Изменено пользователем BigCoster

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...