C51单片机无延迟函数按键识别

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是非常耗资源的)

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值