單片機的 P4.0,P2.0--P2.6 這幾個 IO 上面接一個 4*4 的鍵盤。
這里P4.0是最低位,P2.6是最高位。
一個按鍵接在同一個端口上 很好操作的,但是這些 IO 在兩個端口上面。
這些端口不連續(xù)應該咋寫鍵盤程序 ?
//定義鍵盤端口:
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; //沒有按鍵,就返回 255
}
本程序,使用的變量最少,也不涉及其它接口。
代碼最少,執(zhí)行效率最高。
本程序,沒有消抖和等待釋放的環(huán)節(jié),看明白后,自己添加。
----------------------------
提問者評價:用這個方法 是調出來了,謝謝!??!
----------------------------
后記:
利用 51 單片機的位操作指令,做這個是很容易的。
對比一下某些教材或網絡文章的鍵盤程序,做而論道的自我感覺,是相當?shù)暮谩?/p>