/*按鍵的鍵位定義*/ unsigned char code anj[4][4] = { 1, 2, 3, 10, 4, 5, 6, 11, 7, 0, 9, 12, 13, 8, 14, 15, }; char ScanKey() { char key = -1;//賦值用於判讀沒有按下 unsigned i,j; for (i = 0;i < 4;i++) { P1 = _cror_(0x7f,i); for (j = 0;j < 4;j++) { if ((P1 & _cror_(0x08,j)) == 0) { key = anj[i][j]; while ((P1 & _cror_(0x08,j)) == 0);//鬆手檢測 break; } } } return key; }
原理: 好比高位是行低位是列 先給P1複製 0111 1111 而後&上 0000 1000 若是第一列有按下那麼 0111 1111 & 0000 0000 (有按鍵按下 0000 1000 變爲 0000 0000) = 0000 0000 天然就獲得 (1,1)這個位置的按鍵按下了 加上右移(_cror_())後面的都以此類推就能夠檢測全部的按鍵了。