回覆列表
-
1 # 使用者1931173721557
-
2 # 使用者9581233299198
while(!KeyIn1)
{
di();
delay(200);
mod++;// 這裡,你按下按鍵1的時候,按鍵1應該會保持接觸至少50毫秒,在這段時間,mod的值早不知道飛到哪裡去了
}
if(mod==3) // 這裡的判斷已經沒有意義了
{
mod=0;
}
就用你的思路,不過換這裡的判斷的地方就可以了。
改成
while(!KeyIn1);
di();
delay(200);
mod++;
if(mod==3)
{
mod=0;
}
你好 簡單的鍵功能用if語句較好如 if(key0==0)//P1.0為0 delay;//延時10ms if(key0==0)//P1.0為0 消抖再次確認 程式語句。。。。 if(key1==0) //P1.1為0 同上。。。。 。。。。。 共5個鍵分別檢測,執行。對埠要求簡單,也不會受鄰居的影響,或干擾鄰居(如你的P1.7埠)。你的問題是用switch() 語句對一個暫存器判斷(P1口也是一個暫存器),可以這樣: KeyScan() { unsigned char keyvalue; //定義鍵盤資料快取 keyvalue=P1; keyvalue=keyvalue|0x7f; //0為按下,遮蔽高3位 if(keyvalue!=0xff) //鍵按下判斷 { DelayMs(10); //延時消抖,鍵按下判斷 keyvalue=P1; keyvalue=keyvalue|0x7f; //0為按下,遮蔽高3位 if(keyvalue!=0xff) //有鍵按下,處理 { switch(keyvalue) { case 0xfe:功能 1;break; case 0xfd:功能 2;break; case 0xfb:功能 3;break; case 0xf7:功能 4;break; case 0xef:功能 5;break; default:break; // 非以上資料直接跳出 } } } }