搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 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[cnt];

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

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-11-8 15:08:58 | 显示全部楼层
这个分析起来就很简单了

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

  4.   void Delays ();
  5.    void main ()
  6.   {
  7.           unsigned char cnt=0;
  8.         bit backup=1;
  9.         bit keyup=1;
  10.          P0=ledchar[cnt];

  11.         while (1)
  12.         {
  13.         P0=ledchar[cnt];
  14.         keyup=key;
  15.         if(keyup!=backup)
  16.         {
  17.           Delays ();
  18.           if(keyup==key)
  19.           {
  20.             if(backup==0)
  21.                 {
  22.                   cnt++;
  23.                   if(cnt>=10)
  24.                   cnt=0;
  25.                 }
  26.                          P0=ledchar[cnt];
  27.           }
  28.         }
  29.          backup=key;
  30.    }
  31.   }

  32.   void Delays()
  33.   {
  34.           unsigned int i = 1000;
  35.         
  36.         while(i--);
  37.   }
复制代码



        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[cnt];  //然后给数据.
          }
        }
         backup=key; //然后 backup = 0

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

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


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


        

出0入0汤圆

 楼主| 发表于 2015-11-8 15:12:48 | 显示全部楼层
sweet_136 发表于 2015-11-8 15:08
这个分析起来就很简单了

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

出0入0汤圆

发表于 2015-11-8 15:14:28 | 显示全部楼层
毕延吉 发表于 2015-11-8 15:12
我又重新变了一次,奇迹般的又好使了;

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

出0入0汤圆

发表于 2015-11-9 20:24:15 | 显示全部楼层
代码写的很好

出0入10汤圆

发表于 2015-12-2 18:03:26 来自手机 | 显示全部楼层
用定时器扫描按键,效率高灵敏度可控
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 12:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表