C51单片机无延迟函数按键识别
#include<reg52.h>
sbit Key=P3^4;
ungsigned char key_now,key_pre,key_flag;
void scan(void)
{
key_now=Key;
key_flag=(key_now^key_old)^kay_flag;
key_old=key_new;
}
int main(void)
{
key_old=key_new=1;
key_flag=0;
while(1)
{
scan();
if(key_flag==1)//按键按下
{
}
}
}
先了解一下"^"(异或)运算符的真值表(同值即假)
key_flag=(key_now^key_old)^kay_flag;
这条是核心的代码,两次异或运算结果就是现在按键的状态。(建议自己在草稿纸上模拟运算一下)
这种写法舍去了耗时间的Delay防抖函数和while(芯片进行过多Delay是非常耗资源的)