51單片機很是簡潔的矩陣掃描程序

/*按鍵的鍵位定義*/
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_())後面的都以此類推就能夠檢測全部的按鍵了。
相關文章
相關標籤/搜索