扫描按键c语言,经典按键扫描程序,非常牛鼻!!!!!!!

首先声明一下,本文非原创,我从头到尾查看了一下,也没发现大神名字,在此感激他的无私奉献!

废话不多说,直接贴上核心代码:

unsigned char Trg;

unsigned char Cont;

void KeyRead( void )

{

unsigned char ReadData = PINB^0xff;     //1

Trg  = ReadData & (ReadData ^ Cont);   //2

Cont = ReadData;                                //3

}

完了。有没有一种不可思议的感觉?不管你现在是什么感觉,我当时是看蒙了,呵呵。。。

当然,没有想懂之前会那样,想懂之后就会惊叹于这算法的精妙!!

下面是程序解释:

Trg(triger)代表的是触发,Cont(continue)代表的是连续按下。

语句1:读 PORTB的端口数据,取反,然后送到 ReadData 临时变量里面保存起来。

语句2:算法 1,用来计算触发变量的。一个位与操作,一个异或操作,我想学过 C语言都应该懂吧?Trg为全局变量,其它程序可以直接引用。

语句3:算法 2,用来计算连续变量。

那么,怎么判断按键释放呢?

很简单,Trg 和 Cont 都为 0 则肯定已经释放了。在这个基础上再增加一个按键释放检测功能,

程序如下:

volatile unsigned char Trg;

volatile unsigned char Cont;

volatile unsigned char Release;

void KeyRead( void )

{

unsigned char ReadData = PINB^0xff;      // 1  读键值

Trg = ReadData & (ReadData ^ Cont);      // 2  得到按下触发值

Release=  (ReadData ^ Trg ^ Cont);       // 3  得到释放触发值

Cont = ReadData;                         // 4  得到所有未释放的键值

}

看完了,你有什么感觉呢?可能还是不懂吧?那下面就附上大神所著文章详细内容,好好品读吧!

f5eb4426879d9c4b4b2deb15679e0746.png新型的按键扫描程序.pdf

阅读(1596) | 评论(0) | 转发(0) |

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值