按键(独立按键与矩阵键盘)
单片机按键是一种常用的输入设备,用于检测用户的按键操作。在51单片机中,按键通常通过一个外部电路连接到特定的IO口上,通过读取相应IO口的电平状态来判断按键是否按下。
电路图(根据普中A2电路图绘制)
按键消抖
为了避免按键抖动带来的误触发,我们还可以在软件中添加一些延时和滤波处理。比如,在检测到按键按下时,可以在一定的延时后再次读取IO口的电平状态,如果仍然为低电平则确认按键按下,否则忽略。
下面是独立按键的驱动代码Key.c
#include "Delay.h"
unsigned char Key()
{
unsigned char KeyNumber=0;
if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}
if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}
if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}
if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}
return KeyNumber;
}
Key.H
#ifndef __KEY_H__
#define __KEY_H__
unsigned char Key();
#endif
不过这种使用Delay函数的消抖尽量不要用。太占用CPU资源了,因为有40毫秒的时间CPU不做事情。下面推荐另一种处理方式Key.c
unsigned char Key()
{
unsigned char KeyNumber=0;
if(P3_1==0) KeyNumber=1;
if(P3_0==0) KeyNumber=2;
if(P3_2==0) KeyNumber=3;
if(P3_3==0) KeyNumber=4;
return KeyNumber;
}
驱动里面不做消抖,在按键处理函数里面做。同理矩阵键盘的驱动也类似,在后面放
本案例完成的功能就是按按键1,第1个灯亮,按按键2,第2个等亮。按按键3,第3个灯亮,按按键4,第4个灯亮。