单片机/MCU论坛
直播中

十成

11年用户 104经验值
擅长:可编程逻辑 光电显示 EDA/IC设计 处理器/DSP
私信 关注
[问答]

按键扫描

if(key1==0)
         {  
                delay(1);
              if(key1==0)  
                          {
                         
                                  uthvalue++;
                          
                         
                          }         while(!key1);
             }
程序里的按键扫描扫不出来,这是我的扫描部分,扫描前后的程序都能运行

回帖(4)

Jack

2014-4-19 23:12:46
本帖最后由 Jack315 于 2014-4-19 23:14 编辑

从程序看是单键判断。。。

一般按键都有个“抖动”的问题:当按键按下时,端口的电平会在高低电平间来回“抖动”(持续时间在10ms~50ms之间),从而给软件判断按键状态带来困扰,因此,需要有“去抖动”的措施。“去抖动”功能可以由硬件或软件来实现。硬件实现的方法是是在按键(开关)的两端并联一个电容(0.1uF)。软件的实现方法如下:

unsigned char Count=0; // 8-bit unsigned

while (1) // main loop
{
  ...
  if (Key == 0) // Low detected.
  {
    if (Count < 255) Count++;
  }
  else // High detected.
  {
    if (Count > 0) Count--;
  }

  if (Count > 128) // Key pressed.
  {
    // Actions for key pressed.
  }
  else // Key released.
  {
    // Actions for key released, if any.
  }
  ...
};
举报

陈锐文

2014-4-20 00:53:29
引用: Jack315 发表于 2014-4-19 23:12
从程序看是单键判断。。。

一般按键都有个“抖动”的问题:当按键按下时,端口的电平会在高低电平间来回“ ...

按键抖动时间没有这么久吧,一般为5ms~10ms。
举报

Jack

2014-4-20 01:42:09
引用: 依然落叶飘零 发表于 2014-4-20 00:53
按键抖动时间没有这么久吧,一般为5ms~10ms。

具体的抖动时间视按键各异。早期教科书上给出的时间为30ms~50ms。现在的小型开关确实在10ms左右。

大侠果然心细!不过这个数据只是给LZ一个概念,一般对去“去抖动”措施不会有很大的影响。
举报

十成

2014-4-20 13:43:55
谢谢各位,问题已解决,非程序原因
举报

更多回帖

发帖
×
20
完善资料,
赚取积分