Как создать таймер / часы, которые могут отправлять свои значения обратно, сохраненные в переменной, ТОЛЬКО сделанные с задержками в C & on mikroC - PullRequest
1 голос
/ 18 апреля 2019

Как новичок в C, я изо всех сил пытаюсь решить эту мою проблему:

Я работаю над проектом, в котором мне нужно программировать PIC (микрочип) на C, используя платформу mikroC.

То, чего я пытаюсь добиться, - это только с одним переключателем / кнопкой, мне придется переключаться с трех разных «модулей» (так как я их называю «модулями», они соответствуют различным световым эффектам, создаваемым светодиодами)в зависимости от времени, проведенного нажатием переключателя / кнопки.В моем случае, после 500 мс модуля 1, после 1500 мс модуля 2, и после 3500 мс модуля 3 (и все это должно быть в бесконечно повторяющемся цикле, так как я должен иметь возможность менять модульв ЛЮБОЕ ВРЕМЯ во время операции).

Моя единственная проблема - заставить таймер / часы запустить запуск в начале программы и продолжать отсчитывать время до достижения сигнала остановки (например, конца цикла или чего-то еще).).

Возможно, неуместно спрашивать это сообщество, но я все же здесь.

Я уверен, что это скорее проблема "алгоритмики / логики", чем что-либо, но у меня естьв течение последней недели пытался понять, как обойти эту проблему ...

Нет результатов, поскольку код вообще не готов.

1 Ответ

1 голос
/ 18 апреля 2019

Существует библиотека mikroC для обработки нажатий кнопок .В следующем примере (по ссылке.) Приведен скелетный пример обнаружения нажатия кнопки ...

bit oldstate;                                    // Old state flag

void main() {

  ANSEL  = 0;                                    // Configure AN pins as digital I/O
  ANSELH = 0;
  C1ON_bit = 0;                                  // Disable comparators
  C2ON_bit = 0;

  TRISB0_bit = 1;                                // set RB0 pin as input

  TRISC = 0x00;                                  // Configure PORTC as output
  PORTC = 0xAA;                                  // Initial PORTC value
  oldstate = 0;

  do {
    if (Button(&PORTB, 0, 1, 1)) {               // Detect logical one
      oldstate = 1;                              // Update flag
    }
    if (oldstate && Button(&PORTB, 0, 1, 0)) {   // Detect one-to-zero transition
      PORTC = ~PORTC;                            // Invert PORTC
      oldstate = 0;                              // Update flag
    }
  } while(1);                                    // Endless loop
}

Существует также коллекция MicroE Примеры которые включают примеры таймера, такие как эти и этот .Каждый из них предоставляет примеры базы кода, которые могут быть адаптированы для создания функции, которая может быть обернута вокруг разделов в коде нажатия кнопки для получения продолжительности времени.

Надеюсь, это поможет.

...