按键问题

[复制链接]
 楼主| strang 发表于 2010-11-10 00:04 | 显示全部楼层 |阅读模式
请教个问题。我用普通的IO口控制按键,按一下,加一。然后显示在数码管上。
while(1)
{
if(KEY1==0)
{
DelayMS(10);
if(KEY1==0)
{
count++;
}
}
Display(count);//显示

这个程序是:只要按下去,就一直累加,不能达到要求。请问如何实现?请大虾指教?不尽感激。。。
wangyy608 发表于 2010-11-10 00:26 | 显示全部楼层
少个}
看KEYI的状态?
加上按键松开判断?
xieshenkui 发表于 2010-11-10 12:28 | 显示全部楼层
while(1)
{

}
是死循环,KEY按下去以后,count变量加一,执行完后又要循环开始,这里你的按键还是按下的,所以重复执行,count变量又加一,周而复始,永远不会停,只要你按键按下count变量就一直加。
如LS所说,得加按键松手检测。如果还不懂,加我QQ 一起学习,50383551
金戈铁马 发表于 2010-11-10 14:29 | 显示全部楼层
两个IF(KEY1==0)?
改一个=1估计就行了
focuson 发表于 2010-11-10 15:00 | 显示全部楼层
两个IF(KEY1==0) 是为了消抖。
sytu_chyq 发表于 2010-11-10 16:01 | 显示全部楼层
再加个等待按键松开
while(key1 == 0);
 楼主| strang 发表于 2010-11-10 19:08 | 显示全部楼层
to 2楼:在这里粘贴的时候少了个“}”,谢谢你的提醒,按键松开状态我不知道怎么写、
to 3楼:谢谢关注。你说的没错。按下去的时候是一直累加的。
to 5楼和7楼:加了个while(key1 == 0);已经实现了设计要求。

再次感谢楼上几位的热心帮忙,谢谢!
老鱼探戈 发表于 2010-11-11 20:00 | 显示全部楼层
最看不惯的就是用delay();做延时了
给你一段程序参考:

#define     PKeyIn     P2^0
bit   FLastStatus;

void GetKey(void);
{
     if(!FClk_64ms)   return;   //64ms检测一次按键。 这个标志的产生自己先想想
     if(FLastStatus!=PKeyIn)
     {
             FLastStatus=PKeyIn;
              if(FLastStatus==0)
              {  count++;  
                 ....................
              }
     }
}
    Display(count);//显示
code-03 发表于 2010-11-13 08:40 | 显示全部楼层
没加松手检测啊,有的喜欢按下键执行程序,有的喜欢按下键松手后执行,看程序要求和自己习惯、、、
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:技术工程师
简介:

48

主题

3253

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部