请问这个程序是什么意思, if(s2==0),while(s2==0);什么意思

[复制链接]
 楼主| tsaogh 发表于 2012-11-29 20:02 | 显示全部楼层 |阅读模式
void keyscan()
{
if(s2==0)
{
  while(s2==0);
  num++;
}
if(s3==0)
{
  while(s3==0);
  num=0;
}
}
 楼主| tsaogh 发表于 2012-11-29 20:02 | 显示全部楼层
在线等啊
iusee2011 发表于 2012-11-29 20:34 | 显示全部楼层
这个程序是键盘扫描程序,就是如果有按键S2按下的话,num变量就加1,如果按键s3按下,则变量num清零,程序中的while语句的作用是去抖动。
 楼主| tsaogh 发表于 2012-11-29 20:40 | 显示全部楼层
4# iusee2011

前辈你好 我理解你的意思,while(1)表示程序在此不动,while(0),表示跳出
那请问while(s2==0)中 当s2==0时候表示什么意思?是s2==0的时候括号里面是真吗
iusee2011 发表于 2012-11-29 20:46 | 显示全部楼层
对,我前面说的while语句的作用是去抖动,就是这个意思,就是再检查一次s2是否真的等于0,如果等于则执行下面的num++。
 楼主| tsaogh 发表于 2012-11-29 20:53 | 显示全部楼层
6# iusee2011
谢谢你 我明白了
chenbb8 发表于 2012-11-29 21:03 | 显示全部楼层
void keyscan()
{
if(s2==0)//如果S2按下
{
  while(s2==0);//等待S2弹起
  num++;
}
if(s3==0)//如果S3按下
{
  while(s3==0);//等待S3弹起
  num=0;
}
}
这个按键扫描程序并没有做到按键的消抖,并且属于阻塞型的程序
假如你的S2按键一直按下去,你的程序就不用跑了……
在while(s2==0);这里等到天荒地老吧^ ^
orangelxlf 发表于 2012-11-29 21:45 | 显示全部楼层
这程序不对劲,不能有效消抖,倒是实现了松手检测的功能
liang5319 发表于 2012-11-29 22:03 | 显示全部楼层
中间没延时肯定不能消抖啊、、
void keyscan()
{
if(s2==0)//如果S2按下
{
       delay(10);
      if(s2==0)//如果S2按下
   {
                while(s2==0);//等待S2弹起
          num++;
      }
}

}
hjs1618 发表于 2012-11-30 08:43 | 显示全部楼层
这程序能用吗?
joyme 发表于 2012-11-30 09:18 | 显示全部楼层
不合格的编程

没有去抖,num会被误加很多次
LDTEST 发表于 2012-11-30 09:20 | 显示全部楼层
有些键盘不能乱按,用来解锁的?
 楼主| tsaogh 发表于 2012-11-30 10:00 | 显示全部楼层
10# liang5319
前辈你好 while(s2==0);//等待S2弹起  你的意思是当s2==0 的时候括号里面为 1,所以就延迟等待,,当s2==1的时候 括号里面等于0,所以跳出 执行 后面的程序吗
whj1988 发表于 2012-11-30 10:21 | 显示全部楼层

void keyscan()
{
if(s2==0)
{
  while(s2==0);
  num++;
}
这段程序可以去除按键抖动的,当按键按下去,I/O管脚识别0电平,一直保持,等弹起来后再加1

下面那段将程序是S3按键按下去,等按键弹起来后num值清零,
我写按键就是那样写的。

这个程序适合回弹按钮。
ZG11211 发表于 2012-11-30 13:13 | 显示全部楼层
本帖最后由 ZG11211 于 2012-11-30 13:17 编辑

void keyscan()
{
bit lock;
if(s2&&!lock)lock=1;
if(!s2&&lock)
{
  lock=0;
  num++;
}
用了这个状态机,保证你心不慌,手不抖,MCU也不急了!
T117987893 发表于 2012-11-30 13:19 | 显示全部楼层
S2==0,是说S2等于0逻辑,IF(S2==0),while(s2==0);  条件判断,如果条件为真,就执行它们后面的语句
iusee2011 发表于 2012-11-30 14:00 | 显示全部楼层
9楼的程序很完美,高手啊,惭愧
wuminglin1989 发表于 2012-11-30 15:19 | 显示全部楼层
什么叫做瞎编
ohy3686 发表于 2012-11-30 16:45 | 显示全部楼层
按键程序,松开执行。
shiyan1532 发表于 2012-11-30 18:16 | 显示全部楼层
void keyscan()  键盘扫描子程序
{
if(s2==0)    如果S2按键被按下 单片机IO口检测到低电平
{
  delayms(5);
  if(S2==0)  再次确认S2是否被按下,一般按键检测为了防止短时间内的抖动导致误触发单片机动作,需要稍作延时,再判断一次
{
     num++; 这个条件语句内你可以决定是按下就把num加一,还是等按键被松开num才加1.
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

61

帖子

0

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