簡體   English   中英

當我沒有按下按鈕時,如何在后台停止循環?

[英]What should I do for stop the loop at the background when I am not pressing the button?

我是新來的,對錯誤感到抱歉:P。
所以無論如何。 我正在嘗試用 Arduino UNO、一個 catot 7 段顯示器和一個按鈕做一個簡單的計數器電路。 我只想在按下按鈕時啟動系統循環並邁出一步。 例如,7 段從之前的按下顯示“0”,當我按下按鈕時它需要是“1”。 但是我不知道為什么它一直在后台計數而我無法阻止它。 然后我對我的代碼做了一些調整(順便說一句,我在 micro-c 中為 AVR 編碼並使用 AVRDUDES 將我的代碼加載到 Arduino。)然后它停留在“F”(系統應該像 1,2,3,4 ,5,6,7,8,9,A,b,c,d,E,F)。 我不明白為什么以及如何解決它。 另外 7 段 LED 連接到我的 D 端口。 我想做的是B0引腳輸入。 然后我想控制 B0 引腳的值。 當 B0 引腳為 HİGH 時,我想繼續編程。

這是我的電路連接

unsigned char dizi[] = {0x40,0xF9,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x27,0x21,0x06,0x0E};
unsigned int i ;

void main()
{
 DDRD = 0xFF ;
 DDB0_bit = 0 ;
 

  while(PINB.B0);
  {
          for(i = 0;i<=15;i++)
          {
          PORTD = dizi[i] ;
          Delay_ms(700);
          }
  }
}

我只是編寫代碼,只是 ıdk ı 希望它能工作。 但它沒有。 我不知道為什么,我的頭腦很模糊,我看不到錯誤。 我希望你能幫助:D。

你用什么來編程你的 Arduino? 按下按鈕后循環永遠不會停止,因為除了i達到 15 之外沒有停止條件。我在 Arduino 上生銹了,但你可以添加

if(.(PINB;B0)){ break; }

在 for 循環中,當你沒有按下按鈕時,在延遲退出循環之后。

你的程序需要像這樣工作:

  • for(;;) { /* program here */ }微控制器程序永遠不會離開 main()。

  • 您需要閱讀按鈕,然后對其進行去抖動 這應該在任何嵌入式系統初學者教程中提及。 每當你有一個按鈕時,去抖動是強制性的,否則程序會隨機運行,有時會錯過鍵盤按下,有時會同時按下幾個按鈕等。

    (最合適的方法是從定時器回調中重復讀取按鈕,但是您需要先編寫定時器/RTC 硬件外設驅動程序的代碼。)

  • 一旦按下/未按下去抖動信號,然后實現一個簡單的 state 機器,如下面的偽代碼:ish C:


typedef enum
{
  NOT_PRESSED,
  PRESSED_UPDATE_DISPLAY,
  PRESSED_STILL_DISPLAYED,
} simple_state_machine_t;
simple_state_machine_t state = NOT_PRESSED;

...

int index_7seg = 0;

for(;;)
{
  /* debounce button */
  bool is_pressed = debounced_value;

  switch(state)
  {
    case NOT_PRESSED:
      state = is_pressed ? PRESSED_UPDATE_DISPLAY : NOT_PRESSED;
      break;

    case PRESSED_UPDATE_DISPLAY:
      index_7seg++;
      if(index_7seg == max_7seg)
      {
        index = 0;
      }

      state = is_pressed ? PRESSED_DISPLAYED : NOT_PRESSED;
      break;

    case PRESSED_DISPLAYED:
      state = is_pressed ? PRESSED_DISPLAYED : NOT_PRESSED;
      break;
  }

  PORTD = the7seg_table[index_7seg];
} /* for(;;) */

PRESSED_UPDATE_DISPLAY state 只會在您將 go 從未按下變為按下時輸入,本質上是通過軟件為您提供上升沿觸發。 那是您應該增加表索引的唯一時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM