一、接线(4×4)
将16个键盘排成4行4列,第一行将每个按键的一端连接在一起构成行线,第一列将每个按键的另一端连接在一起构成列线,所以共有4行4列8根线,连接到单片机的GPIO口。
二、原理
总体来说检测该键对应IO口是否为低电平。
1、检测时,先将一行设为低电平,其余几行为高电平。
2、然后立即轮流检测一次各列是否为低电平,若检测到某一列为低电平,可以确定是某行某列的按键,设置此按键的键值。
3、用同样的方法轮流设置各行为低电平,再轮流检测各列是否为低电平,这样就可以检测完所有的按键,扫描所有的键值。
4、也可以设置列为低电平再检测各行。
三、例子
通过数码管,按键显示对应的键值,按键行接P3.0-P3.3,按键列接P3.4-P3.7,代码如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
void Delay_ms(uint y);
void Display(uchar x);
void MatrixKEYDect();
void Init();
sbit WE1 = P2^4; //数码管十位位选
sbit WE2 = P2^5; //数码管个位位选
//8段共阴极数码管
uchar code SEG[] = {
//0 1 2 3 4
0x3f, 0x06, 0x5b, 0x4f, 0x66,
//5 6 7 8 9
0x6d, 0x7d, 0x07, 0x7f, 0x6f};
uint KEYNum; //按键显示的数字