我感覺自己掌握的矩陣鍵盤掃描寫法比較繁瑣,希望有大佬指教好的方法,十分感謝!
uchar KeyScan() //帶返回值的子函數
{
uchar cord_l,cord_h;//聲明列線和行線的值的儲存變量
P3 = 0xf0;//1111 0000
if( (P3 & 0xf0) != 0xf0)//判斷是否有按鍵按下(按下就為與)
{
delay(5);//軟件消抖
if( (P3 & 0xf0) != 0xf0)//再次判斷是否有按鍵按下
{
cord_l = P3 & 0xf0;// 儲存列線值
P3 = cord_l | 0x0f;
cord_h = P3 & 0x0f;// 儲存行線值
while( (P3 & 0x0f) != 0x0f );//松手檢測
return (cord_l + cord_h);//返回鍵值碼
}
}
}
void KeyPro()
{
switch( KeyScan() )
{
//第一行鍵值碼
case 0xee: P0 = leddata[0]; break;
case 0xde: P0 = leddata[1]; break;
case 0xbe: P0 = leddata[2]; break;
case 0x7e: P0 = leddata[3]; break;
//第二行鍵值碼
case 0xed: P0 = leddata[4]; break;
case 0xdd: P0 = leddata[5]; break;
case 0xbd: P0 = leddata[6]; break;
case 0x7d: P0 = leddata[7]; break;
//第三行鍵值碼
case 0xeb: P0 = leddata[8]; break;
case 0xdb: P0 = leddata[9]; break;
case 0xbb: P0 = leddata[10]; break;
case 0x7b: P0 = leddata[11]; break;
//第四行鍵值碼
case 0xe7: P0 = leddata[12]; break;
case 0xd7: P0 = leddata[13]; break;
case 0xb7: P0 = leddata[14]; break;
case 0x77: P0 = leddata[15]; break;
}
}
|