51 单片机 C 语言:不规则的矩阵键盘
扫描二维码
随时随地手机看文章
单片机的 P4.0,P2.0--P2.6 这几个 IO 上面接一个 4*4 的键盘。
这里P4.0是最低位,P2.6是最高位。
一个按键接在同一个端口上 很好操作的,但是这些 IO 在两个端口上面。
这些端口不连续应该咋写键盘程序 ?
//定义键盘端口:
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
}
本程序,使用的变量最少,也不涉及其它接口。
代码最少,执行效率最高。
本程序,没有消抖和等待释放的环节,看明白后,自己添加。
----------------------------
提问者评价:用这个方法 是调出来了,谢谢!!!
----------------------------
后记:
利用 51 单片机的位操作指令,做这个是很容易的。
对比一下某些教材或网络文章的键盘程序,做而论道的自我感觉,是相当的好。