扫描法:以4*4 矩阵按键为例,将全部行线置低电平,然后检测列线的状态
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中
若所有列线均为高电平,则键盘中无键按下
判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程
其方法是: 依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态
若某列为低, 则该列线与置为低电平的行线交叉处的按键就是闭合的按键
#include "reg52
h" #define uchar unsigned char #define uint unsigned int void Delay_1ms(uint i); uchar keyScan(void); void Main(void) { uchar keyValue; //存放键值,第一行的第一个为1第二行第一个为5,依次排列while(1) { P1 = 0xf0; if(P1
= 0xf0) //判断是否有键按下{ Delay_1ms(20); //消除键抖动if(P1
= 0xf0) //在此判断是否有键按下{ keyValue = keyScan(); //逐行扫描,判断是哪个按键按下} } //此处用于对不同键值做出不同反应} } uchar keyScan(void) { uchar temp,i,j,lineSelect[4]={0xef, 0xdf, 0xbf, 0x7f}; //数组用于线选for(j=0;j