像你這種按鍵程式
因為微控制器速度非常快,在你按一下按鍵時,微控制器已經迴圈了很多次程式。
因此這樣就會導致,當你按下時,其實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; //儲存按鍵狀態
像你這種按鍵程式
因為微控制器速度非常快,在你按一下按鍵時,微控制器已經迴圈了很多次程式。
因此這樣就會導致,當你按下時,其實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; //儲存按鍵狀態