[STM8]

按键的问题

[复制链接]
2283|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判断就可以了

使用特权

评论回复
quickman| | 2018-2-7 22:43 | 显示全部楼层
外部中断检测最简答。

使用特权

评论回复
quickman| | 2018-2-7 22:47 | 显示全部楼层
mmuuss586 发表于 2018-2-7 11:37
按下时间计时改短些看看;

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

使用特权

评论回复
zhuomuniao110| | 2018-2-8 11:13 | 显示全部楼层
搞的这么复杂,当然迟钝了。

使用特权

评论回复
Cjy_JDxy|  楼主 | 2018-2-8 11:18 | 显示全部楼层
zhuomuniao110 发表于 2018-2-8 11:13
搞的这么复杂,当然迟钝了。

那你说该怎么写

使用特权

评论回复
zhuomuniao110| | 2018-2-8 11:23 | 显示全部楼层
Cjy_JDxy 发表于 2018-2-8 11:18
那你说该怎么写

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

使用特权

评论回复
quickman| | 2018-2-8 17:00 | 显示全部楼层
为什么要使用定时器?

使用特权

评论回复
jstgotodo| | 2018-2-8 17:00 | 显示全部楼层
楼主还是使用外部中断吧。

使用特权

评论回复
iamaiqiyi| | 2018-2-8 17:00 | 显示全部楼层
定时器的频率多大?

使用特权

评论回复
quickman| | 2018-2-8 17:06 | 显示全部楼层
定时器占用需要占用太多资源。

使用特权

评论回复
jstgotodo| | 2018-2-8 17:06 | 显示全部楼层
外部中断响应比较及时。

使用特权

评论回复
iamaiqiyi| | 2018-2-8 17:06 | 显示全部楼层
只能定时器频率增大才可以。

使用特权

评论回复
Cjy_JDxy|  楼主 | 2018-2-8 17:40 | 显示全部楼层
quickman 发表于 2018-2-8 17:00
为什么要使用定时器?

不用定时器,用延时吗

使用特权

评论回复
Cjy_JDxy|  楼主 | 2018-2-8 17:40 | 显示全部楼层
iamaiqiyi 发表于 2018-2-8 17:00
定时器的频率多大?

10ms

使用特权

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

使用特权

评论回复
qinlu123| | 2018-2-9 14:20 | 显示全部楼层
我有好用的按键驱动,独立以及矩阵。非阻塞式写法保证流畅不卡顿。

使用特权

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

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

使用特权

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

本版积分规则

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

553

主题

3520

帖子

19

粉丝