單機片矩陣鍵盤程式
在大學時很多程式課都要求實現單機片矩陣鍵盤,那麼小編在這通過計演算法來實現微控制器的4*4矩陣鍵盤,程式比較簡捷,供大家學習。
unsigned char Keycan***void*** //按鍵掃描程式 P1.0--P1.3為行線 P1.4--P1.7為列線
{
unsigned char rcode, ccode;
P1 = 0xF0; // 發全0行掃描碼,列線輸入
if******P1&0xF0*** != 0xF0*** // 若有鍵按下
{
delay******;// 延時去抖動
if******P1&0xF0*** != 0xF0***
{ rcode = 0xFE; // 逐行掃描初值
while******rcode&0x10*** != 0***
{
P1 = rcode; // 輸出行掃描碼
if******P1&0xF0*** != 0xF0*** // 本行有鍵按下
{
ccode = ***P1&0xF0***|0x0F;
do{;}while******P1&0xF0*** != 0xF0***; //等待鍵釋放
return ******~rcode*** + ***~ccode******; // 返回鍵編碼
}
else
rcode = ***rcode<<1***|0x01; // 行掃描碼左移一位
}
}
}
return 0; // 無鍵按下,返回值為0
}
void KeyDispaly***unsigned char key***
{
switch***key***
{
case 0x11: display***0***; break;
case 0x21: display***1***; break;
case 0x41: display***2***; break;
case 0x81: display***3***; break;
case 0x12: display***4***; break;
case 0x22: display***5***; break;
case 0x42: display***6***; break;
case 0x82: display***7***; break;
case 0x14: display***8***; break;
case 0x24: display***9***; break;
case 0x44: display***10***; break;
case 0x84: display***11***; break;
case 0x18: display***12***; break;
case 0x28: display***13***; break;
case 0x48: display***14***; break;
case 0x88: display***15***; break;
default: break;
}
}
如果Keyscan放在主函式裡,得到按鍵編碼的變數,必須也放在主函式裡。