C语言编程检测按键,单片机检测按键短击,连击c程序

不影响使用.

// 如有朋友发现问题所在请联系我.

/*********************************************************/

#include #define KEY_IO P1 //按键所连的IO口

#define NO_KEY_VALUE 0xf //当按键没有被按下时IO口的值

#define KEY_WOBBLE_TIME 150 //去抖动时间(待定)

#define KEY_OVER_TIME 500 //等待进入连击时间(待定),该常数要比正常

//按键时间要长,防止非目的性进入连击模式

#define KEY_QUICK_TIME 200 //等待按键抬起的连击时间(待定)

typedef unsigned char uchar;

typedef unsigned int uint;

uchar ReadKey(){ //判断哪个键被按下

static uchar lastKey = NO_KEY_VALUE ;

static uint keyCount = 0;

static uint keyOverTime = KEY_OVER_TIME;

uchar keyTemp = NO_KEY_VALUE ;

keyTemp = KEY_IO & NO_KEY_VALUE ; //读取键值

if(keyTemp == NO_KEY_VALUE ){ //无按键按下时

keyCount = 0;

keyOverTime = KEY_OVER_TIME;

return NO_KEY_VALUE ;

}else{ //有按键按下时

if(keyTemp==lastKey){

if(++keyCount == KEY_WOBBLE_TIME){ //不是第1次按下判断抖动是否结束

return keyTemp; //去抖结束,返回键值

}else{

if(keyCount>keyOverTime){

keyCount = 0;

keyOverTime = KEY_QUICK_TIME;

}

return NO_KEY_VALUE ;

}

}else{ //是第1次按下则保存键值,下次执行此函数时与读到的键值作比较

lastKey = keyTemp ; //保存第1次读到的键值

keyCount = 0; //延时计数器清零

keyOverTime = KEY_OVER_TIME ;

return NO_KEY_VALUE ;

}

}

}

/

以上程序例子我用三个按键连在P1^0,P1^1,P1^2,使用中根据实际需要更改

KEY_IO P1 , NO_KEY_VALUE ,KEY_WOBBLE_TIME , KEY_OVER_TIME 500,

#define KEY_QUICK_TIME 200 .

如只需要判断单击,把判断连击的代码删除即可.

抛砖引玉^^

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值