打印

按键问题

[复制链接]
1957|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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估计就行了

使用特权

评论回复
5
focuson| | 2010-11-10 15:00 | 只看该作者
两个IF(KEY1==0) 是为了消抖。

使用特权

评论回复
6
sytu_chyq| | 2010-11-10 16:01 | 只看该作者
再加个等待按键松开
while(key1 == 0);

使用特权

评论回复
7
strang|  楼主 | 2010-11-10 19:08 | 只看该作者
to 2楼:在这里粘贴的时候少了个“}”,谢谢你的提醒,按键松开状态我不知道怎么写、
to 3楼:谢谢关注。你说的没错。按下去的时候是一直累加的。
to 5楼和7楼:加了个while(key1 == 0);已经实现了设计要求。

再次感谢楼上几位的热心帮忙,谢谢!

使用特权

评论回复
8
老鱼探戈| | 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);//显示

使用特权

评论回复
9
code-03| | 2010-11-13 08:40 | 只看该作者
没加松手检测啊,有的喜欢按下键执行程序,有的喜欢按下键松手后执行,看程序要求和自己习惯、、、

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:技术工程师
简介:

48

主题

3141

帖子

9

粉丝