独立键盘与矩阵键盘检测
NEWS
独立键盘与矩阵键盘介绍
独立键盘,是指每一个键位单独由一个IO口控制的按键。
矩阵键盘,主要是指像矩阵一样分布,由两个IO口(行IO与列IO)才能够识别的按键。
与按键所连接的IO口既可以输出也可以输入,检测按键主要通过检测IO口接受的电平信号来实现。
如图所示,所有键盘的IO口由P3控制,P3IO口由高到低的排列是P3.7~P3.0。
PART
01 独立键盘的检测
在对独立键盘进行检测之前,应当先确保其对应的IO口都处于高电平的状态,当按键被按下时,IO口与接地会接通,会接收到低电平信号。检测时只需依次对按键对应的IO口检测其是否有接收到低电平信号即可。
由于点平的变化并非完美的波形,其在按下与松开时会有短暂的不稳定的高低电平,因此要通过延时二次检测来进行防抖。
在本示例程序中对S2按键进行了检测,其中先对P3IO口进行设置都为高电平,key _S2已经提前配定义为了P3.4IO口,然后用判断语句来判断电平是否有变化,delay延时后在此进行检测,如果确实收到了低电平则开始执行对应程序。程序执行完毕后,用while函数来决定是否继续往下执行,只有彻底松开后才能够继续向下执行程序。
PART
02 矩阵键盘的检测
矩阵键盘不同于独立键盘,它需要对行和列都进行检测,检测原理与独立键盘一样,只是独立键盘的接地变成了为低电平的IO口。
在进行检测时,行和列必须有一个为高电平,有一个为低电平。我们在此要将逐一将列IO赋为低电平,行IO都为高电平然后去检测行IO是否接收到低电平。示例程序如下
//ju zhen an jian cheng xu
void matrix_key()
{
P3=0Xef;/ 将P3.4赋为低电平对S6所在列进行检测 /
matrix_demo=P3;//读取P3
matrix_demo=matrix_demo&0x0f;
//对P3低四位进行比较
if(matrix_demo!=0x0f)
{
delay(10);
matrix_demo=P3;
matrix_demo=matrix_demo&0x0f;
if(matrix_demo!=0x0f)
{
matrix_demo=P3;
switch(matrix_demo)
{
case 0xee://KEY_S6(1110 1110)
dis_num=7;
shiwan=dis_num/10;
wan=dis_num%10;
_shiwan=num_table[shiwan];
_wan=num_table[wan];
break;
case 0xed://KEY_S10(1110 1101)
dis_num=4;
shiwan=dis_num/10;
wan=dis_num%10;
_shiwan=num_table[shiwan];
_wan=num_table[wan];
break;
case 0xeb://KEY_S14(1110 1011)
dis_num=1;
shiwan=dis_num/10;
wan=dis_num%10;
_shiwan=num_table[shiwan]
;_wan=num_table[wan];
break;
case 0xe7://KEY_S18(1110 0111)
shiwan=15;wan=15;
_shiwan=num_table[shiwan];
_wan=num_table[wan];
break;
}
//检测按键是否断开,后四位是否恢复为高电平
while(matrix_demo!=0x0f)
{
matrix_demo=P3;
matrix_demo=matrix_demo&0x0f;
}
delay(10);
while(matrix_demo!=0x0f)
{
matrix_demo=P3;
matrix_demo=matrix_demo&0x0f;
}
}
}
上附程序为对S6所在列进行检测的程序。
PART
03 自我测验
自己编写程序使键盘达到以下效果。
1、开启单片机时,数码管前两位显示00;
2、按下S2按键数码管加1,到六十自动归 零
3、按下S3数码管减1,如果数码管为00,则 0-1变为60
4、按下S4归零
5、按下S5开/暂停计时,满六十归零
6、矩阵键盘十六个按键按下分别使数码管显 示0-F
本次讲解及示例使用的为郭天祥TX-1C的开发板。
全部0条评论
快来发表一下你的评论吧 !