单片机的按键是通过按下弹片使电路接通/断开控制高低电位(默认为高),但实际操作时由于弹片抖动会导致出现灯闪烁的情况,因此需要算法消抖。图1:实际按键时的高低电位变化(普中51为例)
举例:
试图通过按键控制LED0(D1)的亮灭
图2:MCU原理图
图3:LED原理图
图4:按键原理图
因此图2+3我们可知,D1对应管脚为P20,RXD对应寄存器为P31。因此可以有以下算法。
软件算法如下:
//预备函数Delay1ms( int xms)
while (1)
{
if(P3_1==0)//确认操作者有按键操作
{
Delay1ms(20);//消抖
while (P3_1==0);//若操作者长时间按,此为0循环,没有任何操作,即状态不变
Delay1ms(20);//松手后的消抖
P2_0=~P2_0;//取反即亮灭转换
}
}