51 單片機(jī) C 語(yǔ)言:不規(guī)則的矩陣鍵盤
單片機(jī)的 P4.0,P2.0--P2.6 這幾個(gè) IO 上面接一個(gè) 4*4 的鍵盤。
這里P4.0是最低位,P2.6是最高位。
一個(gè)按鍵接在同一個(gè)端口上 很好操作的,但是這些 IO 在兩個(gè)端口上面。
這些端口不連續(xù)應(yīng)該咋寫鍵盤程序 ?
//定義鍵盤端口:
sbit HH1 = P4^0;
sbit HH2 = P2^0;
sbit HH3 = P2^1;
sbit HH4 = P2^2;
sbit LL1 = P2^3;
sbit LL2 = P2^4;
sbit LL3 = P2^5;
sbit LL4 = P2^6;
char scan_key(void) //行列掃描
{
HH1 = 0;
if (!LL1) return 0;
if (!LL2) return 1;
if (!LL3) return 2;
if (!LL4) return 3;
HH1 = 1;
HH2 = 0;
if (!LL1) return 4;
if (!LL2) return 5;
if (!LL3) return 6;
if (!LL4) return 7;
HH2 = 1;
HH3 = 0;
if (!LL1) return 8;
if (!LL2) return 9;
if (!LL3) return 10;
if (!LL4) return 11;
HH3 = 1;
HH4 = 0;
if (!LL1) return 12;
if (!LL2) return 13;
if (!LL3) return 14;
if (!LL4) return 15;
HH4 = 1;
return 255; //沒(méi)有按鍵,就返回 255
}
本程序,使用的變量最少,也不涉及其它接口。
代碼最少,執(zhí)行效率最高。
本程序,沒(méi)有消抖和等待釋放的環(huán)節(jié),看明白后,自己添加。
----------------------------
提問(wèn)者評(píng)價(jià):用這個(gè)方法 是調(diào)出來(lái)了,謝謝?。?!
----------------------------
后記:
利用 51 單片機(jī)的位操作指令,做這個(gè)是很容易的。
對(duì)比一下某些教材或網(wǎng)絡(luò)文章的鍵盤程序,做而論道的自我感覺(jué),是相當(dāng)?shù)暮谩?/p>