打印

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

[复制链接]
5957|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tsaogh|  楼主 | 2012-11-29 20:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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的时候括号里面是真吗

使用特权

评论回复
5
iusee2011| | 2012-11-29 20:46 | 只看该作者
对,我前面说的while语句的作用是去抖动,就是这个意思,就是再检查一次s2是否真的等于0,如果等于则执行下面的num++。

使用特权

评论回复
6
tsaogh|  楼主 | 2012-11-29 20:53 | 只看该作者
6# iusee2011
谢谢你 我明白了

使用特权

评论回复
7
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);这里等到天荒地老吧^ ^

使用特权

评论回复
8
orangelxlf| | 2012-11-29 21:45 | 只看该作者
这程序不对劲,不能有效消抖,倒是实现了松手检测的功能

使用特权

评论回复
9
liang5319| | 2012-11-29 22:03 | 只看该作者
中间没延时肯定不能消抖啊、、
void keyscan()
{
if(s2==0)//如果S2按下
{
       delay(10);
      if(s2==0)//如果S2按下
   {
                while(s2==0);//等待S2弹起
          num++;
      }
}

}

使用特权

评论回复
10
hjs1618| | 2012-11-30 08:43 | 只看该作者
这程序能用吗?

使用特权

评论回复
11
joyme| | 2012-11-30 09:18 | 只看该作者
不合格的编程

没有去抖,num会被误加很多次

使用特权

评论回复
12
LDTEST| | 2012-11-30 09:20 | 只看该作者
有些键盘不能乱按,用来解锁的?

使用特权

评论回复
13
tsaogh|  楼主 | 2012-11-30 10:00 | 只看该作者
10# liang5319
前辈你好 while(s2==0);//等待S2弹起  你的意思是当s2==0 的时候括号里面为 1,所以就延迟等待,,当s2==1的时候 括号里面等于0,所以跳出 执行 后面的程序吗

使用特权

评论回复
14
whj1988| | 2012-11-30 10:21 | 只看该作者

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

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

这个程序适合回弹按钮。

使用特权

评论回复
15
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也不急了!

使用特权

评论回复
16
T117987893| | 2012-11-30 13:19 | 只看该作者
S2==0,是说S2等于0逻辑,IF(S2==0),while(s2==0);  条件判断,如果条件为真,就执行它们后面的语句

使用特权

评论回复
17
iusee2011| | 2012-11-30 14:00 | 只看该作者
9楼的程序很完美,高手啊,惭愧

使用特权

评论回复
18
wuminglin1989| | 2012-11-30 15:19 | 只看该作者
什么叫做瞎编

使用特权

评论回复
19
ohy3686| | 2012-11-30 16:45 | 只看该作者
按键程序,松开执行。

使用特权

评论回复
20
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

粉丝