回覆列表
  • 1 # 使用者1931173721557

    你好 簡單的鍵功能用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; // 非以上資料直接跳出 } } } }

  • 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;

    }

  • 中秋節和大豐收的關聯?
  • 怎麼才能調整心態?