毕延吉 发表于 2015-11-8 14:28:24

这是一个独立按键实验,为什么反应不是特别灵敏

#include <reg52.h>
sbit key=P1^1;
unsigned char code ledchar[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

void Delays ();
   void main ()
{
        unsigned char cnt=0;
        bit backup=1;
        bit keyup=1;
       P0=ledchar;

        while (1)
        {
        P0=ledchar;
        keyup=key;
        if(keyup!=backup)
        {
          Delays ();
          if(keyup==key)
          {
          if(backup==0)
                {
                  cnt++;
                  if(cnt>=10)
                  cnt=0;
                }
                       P0=ledchar;
          }
        }
       backup=key;
   }
}

void Delays()
{
        unsigned int i = 1000;
       
        while(i--);
}
有的时候需要按三四次才能变数

sweet_136 发表于 2015-11-8 15:08:58

这个分析起来就很简单了

#include <reg52.h>
sbit key=P1^1;
unsigned char code ledchar[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

void Delays ();
   void main ()
{
          unsigned char cnt=0;
      bit backup=1;
      bit keyup=1;
         P0=ledchar;

      while (1)
      {
      P0=ledchar;
      keyup=key;
      if(keyup!=backup)
      {
          Delays ();
          if(keyup==key)
          {
            if(backup==0)
                {
                  cnt++;
                  if(cnt>=10)
                  cnt=0;
                }
                         P0=ledchar;
          }
      }
         backup=key;
   }
}

void Delays()
{
          unsigned int i = 1000;
      
      while(i--);
}


      keyup=key;         //如果此时按下.那么执行 keyup = 0= key ;
      if(keyup!=backup)
      {
          Delays ();
          if(keyup==key)//这里也执行. 都为0.
          {
            if(backup==0) //这里就没执行了. backup = 1
                {
                  cnt++;
                  if(cnt>=10)
                  cnt=0;
                }
                         P0=ledchar;//然后给数据.
          }
      }
         backup=key; //然后 backup = 0

之后.在返回到 if(keyup!=backup)那么此时 0 !=0 ..然后就一直没反映....因为一直都是0=0 .这个是你按下按键的时候.数据也没变化

在然后呢,, 你松开按键.
keyup = key = 1;
然后if(backup==0) 成立. P0的数据改变了.
然后也是一样.你松开了.数据就一直不变.只改变一次.


你的意思是, 按键按下去的时候不变. 松开就改变一次数据.
额...代码貌似是正确的. 你把哪个延迟改小点试试..


      

毕延吉 发表于 2015-11-8 15:12:48

sweet_136 发表于 2015-11-8 15:08
这个分析起来就很简单了




我又重新变了一次,奇迹般的又好使了;

sweet_136 发表于 2015-11-8 15:14:28

毕延吉 发表于 2015-11-8 15:12
我又重新变了一次,奇迹般的又好使了;

不错.代码写的很好..加油.有潜力..

汪凯露露 发表于 2015-11-9 20:24:15

代码写的很好

zxq_9781 发表于 2015-12-2 18:03:26

用定时器扫描按键,效率高灵敏度可控
页: [1]
查看完整版本: 这是一个独立按键实验,为什么反应不是特别灵敏