1、 键盘是单片机常用输入设备,在按键数量较多时,为了节省 I/O 口等单片机资源,一般采取扫描的方式来识别到底是哪一个键被按下。即通过确定被按下的键处在哪一行哪一列来确定该键的位置,获取键值以启动相应的功能程序。4*4 矩阵键盘的结构如图 1(实物参考见万用板矩阵键盘制作技巧)。在本例中,矩阵键盘的四列依次接到单片机的 P1.0P1.3,四行依次接到单片机的 P1.4P1.7;同时,将列线上拉,通过 10K 电阻接电源。查找哪个按键被按下的方法为:一个一个地查找。先第一行输出 0,检查列线是否非全高;否则第二行输出 0,检查列线是否非全高;否则第三行输出 0,检查列线是否非全高;如果某行输出 0
2、 时,查到列线非全高,则该行有按键按下;根据第几行线输出 0 与第几列线读入为 0,即可判断在具体什么位置的按键按下。下面是具体程序:void Check_Key(void)unsigned char row,col,tmp1,tmp2;tmp1 = 0x10; /tmp1 用来设置 P1 口的输出,取反后使P1.4P1.7 中有一个为 0for(row=0;row4;row+) / 行检测P1 = 0x0f; / 先将 p1.4P1.7 置高P1 =tmp1; / 使 P1.4p1.7 中有一个为 0tmp1*=2; / tmp1 左移一位if (P1 / tmp2 用于检测出哪一列为 0for(col =0;col4;col+) / 列检测 if(P1 / 获取键值,识别按键;key_Map为按键的定义表return; / 退出循环tmp2*=2; / tmp2 左移一位 /结束这是一种比较经典的矩阵键盘识别方法,实现起来较为简单,程序短小精炼。