按键原理图
按键原理
(1)使用独立按键:
(使用跳线帽将2、3连接)
当按键S7、S6、S5、S4按下时,分别对应P30、P31、P32、P33引脚的值将变为0。可根据对应引脚的电平来确定相应按键是否按下。
(2)使用矩阵键盘:
(使用跳线帽将1、2连接)
先将行P30~P33其中某一行输出电平为0,其余行输出电平为1。扫描列P34、P35、P42、P44,若其中有一列的电平变为0,则对应行列的按键按下。
例如:令P32=0,其余行为1。扫描P34、P35、P42、P44的值,若其中P35=0,则按键S13被按下。
使用:
需要实现三个过程:
(1)检测按键是否按下
(2)消抖
按键按下时,相应引脚电平不会直接稳定的由0变为1,而是存在一段前沿抖动。在此过程中容易被误以为有多次按键按下,扰乱程序。因此需要消抖操作。
实现:检测到按键第一次按下后,延时一小段时间,使按键进入稳定状态后再检测。
(3)防止连续扫描
实现:直至按键抬起后,再结束按键扫描。
代码实现:
(1)独立按键
sbit S7 = P3^0; sbit S6 = P3^1; sbit S5 = P3^2; sbit S4 = P3^3; void KEYscan_BTN() { if(S7==0) { Delay10ms();//消抖 if(S7==0) { //执行操作 while(!S7);//防止连续触发 } } }
(2)矩阵键盘
sbit R1 = P3^0; sbit R2 = P3^1; sbit R3 = P3^2; sbit R4 = P3^3; sbit C1 = P4^4; sbit C2 = P4^2; sbit C3 = P3^5; sbit C4 = P3^4; void KEYscan_KBD() {
C1=C2=C3=C4=1;//初始化列
R2=R3=R4=1; R1=0;//令某一行输出为0if(C4==0)//判断对应的列输出是否为0 { Delay10ms();//消抖 if(C4==0) { //执行操作while(!C4);//防止多次触发 } } }
总结:
1、使用按键先,确定其工作模式(独立按键、矩阵键盘),并使用跳线帽进行连接;
2、使用按键需要进行消抖和防止多次触发。