每次只能检测到短按,长按检测不了,请问是什么原因呢?
你看看你的longkeytemp的定时类型,我怀疑你定义的是char类型,因为值大于了128,所以又会从0开始计数,永远达不到150,应该将数据定义成int型或者是unsigned char类型,不知道我说的对不对,你可以先看一下。如果数据类型定义没有问题的话,最好的是仿真调试一下,看看这个变量为什么不会再增大,建议你再在longkeytemp后面再加一句if(longkeytemp >=200) longkeytemp = 200;
给他增加一个上限,不然可能会导致变量增加的太大溢出了。
你keybuf和keyflag定义在什么地方?
而且感觉你的逻辑都有问题,检测按键需要用到中断吗?
还不如直接在你的while循环中完成。
主循环中通过KEY_SCAN判断是KEY0还是KEY1按下;同时定时器每5ms中断一次,如果按键还处于按下状态就长按键暂存值+1;在3到100之间,是短按;150以上是长按。
看下来,觉得逻辑没问题,我都怀疑是不是你LED0的硬件管脚配置错了。另外,不知道是有意为之,还是逻辑问题,100-150之间的longkeytemp值是无效状态,这个不好。
具体问题是长按会误检测短按吗?
你试过跟踪你的longkeytemp没有,长按的结果是什么呢?
建议你参考这个程序-安富莱的按键检测代码。这个是我见到过最经典的按键检测方式。
我也将这种方式用到了我的项目中。
【安富莱STM32-V6开发板试用体验】+1.STM32F429之经典按键检测http://bbs.icxbk.com/thread-102588-1-1.html(出处: ICKEY BBS)