回覆列表
  • 1 # 使用者7141197769170

    像你這種按鍵程式

    因為微控制器速度非常快,在你按一下按鍵時,微控制器已經迴圈了很多次程式。

    因此這樣就會導致,當你按下時,其實k一直==0 一直在執行動作。

    所以這種按鍵需要判斷按鍵是第一次按下(由彈起狀態下按下)。而不是一直按著導致的動作。

    方法:建一個變數儲存上一次按鍵的值

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    char LastKey;

    LastKey = 1;

    while(1)

    {

    if(k == 0 && LastKey == 1) //按下,且上一次檢測按鍵時是彈起狀態

    { //這樣才能保證每次按下時只執行一次,

    //而不是一直在執行

    Delay1ms(20);

    if(k == 0) //確定是第一次按下,執行動作

    {

    if((n % 2) == 0)

    {

    LedFlash();

    }

    else

    {

    P0 = 0xFF;

    }

    n++;

    }

    }

    LastKey = k; //儲存按鍵狀態

  • 中秋節和大豐收的關聯?
  • 羊肉湯苦,但羊肉不苦,什麼原因?