5359|12

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

一个大家在程序中很容易忽略的bug [复制链接]

要求:
     当一个按健按下时,执行所要完成的动作,而当此动作完成后,按健还继续按着的话,不执行原重复的动作,也就是说按健按下执行一次动作,当按健一直按下时,不重复执行原动作,直到按健断开为止,
   以下为此要求写的这段程序,程序中的bug很容易发现,不符合要求
  main()
{
   initialport();
   while(1}
    {
      bit flag=1;
      if(P1^0==0&&flag==1)
      {
        flag=0;
        dosomething();
      }
      else flag=1;
      anotherthing();
    }
}
大家都发表一下自己的高见,互相学习参考一下,免的以后走弯路,

最新回复

接分是王道!  详情 回复 发表于 2008-5-1 02:02
点赞 关注

回复
举报

96

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
main()
{
   initialport();
   while(1)
   {      
       if(P1^0==0)  
          dosomething();  
       while(!P1^0)
          ;
   }
}

看看这个能否满足你的要求
不知道按键后会不会做不同的事,上面只说了你只要求MCU做一件事的情况。
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
或者将
while(!P1^0)
    ;

改一下
while(!P1^0)
    anotherthing();  

 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
设一个全局变量作标志。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
你可以判别按键抬起,此时才识别为一次按键

或者检测到按键时置一个标志,按键抬起时才清这个标志,再检测按键的时候判断这个标志,决定是否识别
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
边沿触发,延时防抖
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

7
 
边沿触发,延时防抖
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
1. first key pressed

2.check repeat time------------

 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
来个比较复杂的,
检验下降沿
#define HI_LEVEL (0)
#define LO_LEVEL (1)

sbit P10=P1^0;
bit Falling_edge_G;
static bit Test4, Test3, Test2, Test1, Test0;

void PluseCheck()  //call this function every 20ms
{
   Test4 = Test3;
   Test3 = Test2;
   Test2 = Test1;
   Test1 = Test0;
   // Get latest test result
   Test0 = P10;
   // Required result:
   // Test4 == HI_LEVEL
   // Test3 == HI_LEVEL
   // Test1 == LO_LEVEL
   // Test0 == LO_LEVEL

   if ((Test4 == HI_LEVEL) &&
       (Test3 == HI_LEVEL) &&
       (Test1 == LO_LEVEL) &&
       (Test0 == LO_LEVEL))
      {
      // Falling edge detected
      Falling_edge_G = 1;
      }
   else
      {
      // Default
      Falling_edge_G = 0;
      }
}
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 
四楼的比较简单实用
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

11
 
其实,可以用while跟踪到真的对按键释放。。。。

或是在定时扫键盘时,连续多次的按键都视为未释放

呵呵

 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 
这一版块,太没人气了,是不是大家都成大侠了

如果成大侠了,也常回家看看嘛,家里太冷清了

据说努力顶帖也是一种美德,但我只想大家常回家看看

毕竟每天都有新手需要帮忙,而我能帮的只能是把帖子顶起来
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
接分是王道!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表