单片机独立按键三行消抖写法
时间: 2024-03-22 19:25:54 浏览: 27
以下是一种单片机独立按键三行消抖写法:
首先定义三个变量:
unsigned char temp, key_sta, key_num;
temp:用于保存按键读取的值
key_sta:用于保存按键状态,0表示未按下,1表示按下
key_num:用于保存按键编号,有多个按键时可以用来区分不同按键
然后在主函数中添加按键扫描函数:
void key_scan(void)
{
temp = P1;
if(temp != 0xff)
{
delay_ms(20);
temp = P1;
if(temp != 0xff)
{
key_sta = 1;
switch(temp)
{
case 0xfe: key_num = 1; break;
case 0xfd: key_num = 2; break;
case 0xfb: key_num = 3; break;
case 0xf7: key_num = 4; break;
}
}
}
else
{
key_sta = 0;
}
}
在按键扫描函数中,先读取按键的值,如果不是全部都按下,说明有按键按下了,再进行一次延时,然后再次读取按键的值,如果还是不是全部都按下,说明这是一次有效按键操作,将key_sta设为1,同时根据按键值确定按键编号key_num。
如果全部按键都没按下,说明按键已经松开了,将key_sta设为0。
最后在主函数中添加按键扫描函数的调用即可:
void main(void)
{
while(1)
{
key_scan();
if(key_sta == 1)
{
switch(key_num)
{
case 1: //按键1的操作
break;
case 2: //按键2的操作
break;
case 3: //按键3的操作
break;
case 4: //按键4的操作
break;
}
}
}
}
这样就实现了单片机独立按键三行消抖的功能。