打印
[STM8]

按键的问题

[复制链接]
2300|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Cjy_JDxy|  楼主 | 2018-2-7 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{

    KeyCurrent=((GPIO_ReadInputData(GPIOB)&0xc0)>>6);


   if(KeyCurrent!=KeyOld)  //如果两次值不等,说明按键情况发生了改变
    {
     KeyNoChangedTime=0;       //按键按下情况为0
     KeyOld=KeyCurrent;        //保存当前按键情况
     //return;  //·μ??
    }
   else
    {
     KeyNoChangedTime++;             //按下时间累计
     if(KeyNoChangedTime>=1)         //如果按下时间足够
      {
       KeyNoChangedTime=1;
       KeyPress=KeyOld;      //保存按键
       KeyDown|=(~KeyLast)&(KeyPress); //求出新按下的键
       KeyUp|=KeyLast&(~KeyPress);     //求出新释放的键
       KeyLast=KeyPress;                     //保存当前按键情况
      }
    }
    Key();
   TIM2_ClearITPendingBit(TIM2_IT_UPDATE);
}


我用STM8S207C8T6写程序,开发环境IAR,用定时器中断检测按键。
可是按键反应很迟钝。请高手帮忙看看,谢谢!

沙发
mmuuss586| | 2018-2-7 11:37 | 只看该作者
按下时间计时改短些看看;

使用特权

评论回复
板凳
yklstudent| | 2018-2-7 14:55 | 只看该作者
定时器中断频率多少?

使用特权

评论回复
地板
Cjy_JDxy|  楼主 | 2018-2-7 15:01 | 只看该作者
yklstudent 发表于 2018-2-7 14:55
定时器中断频率多少?

10ms,现在好了。用keyDown判断就可以了

使用特权

评论回复
5
quickman| | 2018-2-7 22:43 | 只看该作者
外部中断检测最简答。

使用特权

评论回复
6
quickman| | 2018-2-7 22:47 | 只看该作者
mmuuss586 发表于 2018-2-7 11:37
按下时间计时改短些看看;

改短了可能会占用太多资源吧。

使用特权

评论回复
7
zhuomuniao110| | 2018-2-8 11:13 | 只看该作者
搞的这么复杂,当然迟钝了。

使用特权

评论回复
8
Cjy_JDxy|  楼主 | 2018-2-8 11:18 | 只看该作者
zhuomuniao110 发表于 2018-2-8 11:13
搞的这么复杂,当然迟钝了。

那你说该怎么写

使用特权

评论回复
9
zhuomuniao110| | 2018-2-8 11:23 | 只看该作者
Cjy_JDxy 发表于 2018-2-8 11:18
那你说该怎么写

中断发生后,直接就读出来中断发生的情况,剩下的处理放外面,别在中断处理。都在中断处理会让系统停止其他的工作,让人觉得慢了。

使用特权

评论回复
10
quickman| | 2018-2-8 17:00 | 只看该作者
为什么要使用定时器?

使用特权

评论回复
11
jstgotodo| | 2018-2-8 17:00 | 只看该作者
楼主还是使用外部中断吧。

使用特权

评论回复
12
iamaiqiyi| | 2018-2-8 17:00 | 只看该作者
定时器的频率多大?

使用特权

评论回复
13
quickman| | 2018-2-8 17:06 | 只看该作者
定时器占用需要占用太多资源。

使用特权

评论回复
14
jstgotodo| | 2018-2-8 17:06 | 只看该作者
外部中断响应比较及时。

使用特权

评论回复
15
iamaiqiyi| | 2018-2-8 17:06 | 只看该作者
只能定时器频率增大才可以。

使用特权

评论回复
16
Cjy_JDxy|  楼主 | 2018-2-8 17:40 | 只看该作者
quickman 发表于 2018-2-8 17:00
为什么要使用定时器?

不用定时器,用延时吗

使用特权

评论回复
17
Cjy_JDxy|  楼主 | 2018-2-8 17:40 | 只看该作者
iamaiqiyi 发表于 2018-2-8 17:00
定时器的频率多大?

10ms

使用特权

评论回复
18
caijie001| | 2018-2-9 08:15 | 只看该作者
用外部中断,检测到下降沿就开启计时,当上升沿来了就停止计时,把时间读出来,建议参考正点原子输入捕获那一章节的代码,

使用特权

评论回复
19
qinlu123| | 2018-2-9 14:20 | 只看该作者
我有好用的按键驱动,独立以及矩阵。非阻塞式写法保证流畅不卡顿。

使用特权

评论回复
20
m564522634| | 2018-2-9 14:40 | 只看该作者
zhuomuniao110 发表于 2018-2-8 11:23
中断发生后,直接就读出来中断发生的情况,剩下的处理放外面,别在中断处理。都在中断处理会让系统停止其 ...

按键因为抖动的原因会多次进入中断,除非你第一次进入中断后就将中断检测关了处理玩按键后在打开,说实话感觉 没有 定时中断好用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3520

帖子

19

粉丝