fangmcu 发表于 2008-1-1 15:53:45

请教马老师在你的新书中,Demo_11_4练习中,两个按键消抖问题??

在P342页,两个按键K1和K2,当按K1按下,10ms延时后,如果K1仍按下则返回K1的返回值,但此时是K2按下(误动作)不是K1按下(K1松手),则返回K2的值,那么这样看来K2没有10ms延时去抖了!!
谢谢!!

fangmcu 发表于 2008-1-2 08:40:59

顶一顶!!

fugeone 发表于 2008-1-2 15:24:26

不知道可不可以直接把那个键盘扫描函数放在中断中执行,不用TIMEOK 标志

machao 发表于 2008-1-2 19:01:00

回LZ位:

这段程序没有考虑2个键同时按下的情况,但可以做稍微的修改,就能处理2键同时按下的情况了.

unsigned char read_key(void)
{
    static unsigned char key_state = 0,key_old;
    unsigned char key_press,key_return = key_no;

    key_press = key_input & key_mask;        // 读按键I/O电平
    switch (key_state)
    {
        case key_state_0:                                // 按键初始态
          if (key_press != key_mask)
             {
               key_old = key_press;                  
               key_state = key_state_1;
            }            
          break;                                          // 键被按下,状态转换到键确认态
        case key_state_1:                                // 按键确认态
          if (key_press == key_old)
          {
                if (key_press == 0b01000000) key_return = key_k1;
                else if (key_press == 0b10000000) key_return = key_k2;
                  else key_return = key_k3;   // 2个键按下
                key_state = key_state_2;        // 状态转换到键释放态
             }
             else
                key_state = key_state_0;        // 按键已抬起,转换到按键初始态
             break;
        case key_state_2:
             if (key_press == key_mask) key_state = key_state_0;
             break;                                                //按键已释放,转换到按键初始态
    }
    return key_return;
}

回2楼:
    键盘扫描函数可以放在中断中执行,但缺点是:
1.中断函数名不能返回结果
2.增加了中断执行的时间,如果有其它中断的话,就会延误中断的响应.能够不使用中断嵌套是最好的方法,这样每个中断的服务就要快.按键扫描耽误几个ms是没有问题的.一次按键的过程通常为300ms左右,不会丢失的.

主要考虑第2点,所以不提倡按键扫描放在中断中处理.

fangmcu 发表于 2008-1-2 22:00:13

谢谢,马老师!!!

fugeone 发表于 2008-5-9 18:15:04

谢谢,回复的太晚了,已经完成多键处理和连_发了

349242603 发表于 2008-7-24 20:27:24

记号

csg0203 发表于 2008-8-7 17:35:53

记号

yinhe 发表于 2008-9-11 21:35:22

记号

maomaomao007 发表于 2011-7-29 16:39:10

我最近在培训单片机,,,,讲师说,,机械开关接外部中断,,,如果采用脉冲触发方式中断,就不需要去抖动,,,我觉得不对,,,不知道你们们觉得呢??
页: [1]
查看完整版本: 请教马老师在你的新书中,Demo_11_4练习中,两个按键消抖问题??