注册 登录
编程论坛 单片机编程

51 单片机消斗问题

小代帅帅 发布于 2014-10-07 11:53, 4752 次点击
请过往牛人帮帮忙!学习51单片机过程中看到这样一条语句delay(20),delay()函数是定义的延时函数,就是两个for语句执行循环空操作的那种。通过查找资料知道这是一条消斗语句,但是不知道这条语句有什么功效,把这条语句删除之后发现程序不能正常执行,这是怎么回事呢?还有就是if(s2==20)这条语句不明白是什么意思!请牛人指教一下我的这两个疑问!下边是那个代码,希望能得到牛人的帮助!非常感谢!!
#include<reg52.h>

#define uchar unsigned char
uchar num;

sbit beep=P2^3;
sbit led=P1^0;
sbit s2=P3^4;

void delay(uchar i)
{
    uchar j,k;
    for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}

void main()
{
    while(1)
    {
        if(s2==0)
        {
            delay(20);         //消抖
            if(s2==20)
            {
                while(!s2);     //等待按键松开
                num++;
            }
            switch(num)
            {
                case 1: led=0;    beep=1; break;
                case 2: beep=0;    led=1;    num=0; break;
            }
        }
    }
}
6 回复
#2
tlliqi2014-10-07 17:15
牛人木出现
#3
小代帅帅2014-10-09 21:11
回复 2 楼 tlliqi
只有本站会员才能查看附件,请 登录
你的帖子还有分数那么多,那你应该也是牛人吧!哈哈!说说意见呗
#4
birder2014-10-16 09:09
不知道是什么设备上的程序。觉得这个程序好像不太完整。最好把完整的发上来。
#5
wyw198808092014-10-30 14:11
额 这是不知道消抖的含义啊,按键的时候 因为是机械接触,会有机械抖动的产生,导致单片机口线出现大量的高低电平切换,delay消抖,就是等delay后,机械接触稳定后再看单片机口线状态
#6
七夜之华2014-11-06 12:47
话说这是标准c++编写的c-51程序,感情你没看过c++书吧?
##########if(s2==20)这条语句#########即为 条件判断语句。s2是否为20.若为20则继续执行,不然即跳出。
#7
AleTiff2015-03-31 09:42
这个代码里的 if(s2==20) 不是语法问题,确确实实是一个错误。应该改成 if(s2==0) 来判断按键是否在消抖处理后,依然处于按下状态。

消抖,在按钮这样的元件中,执行消抖的目的,就是消除或减轻由于电路本身带来的突发脉冲干扰,防止误动作。消抖在电路中,通常采取低通滤波的措施,说白点,就是按键回路中给接个小容量电容。在软件上通常采取上面那种延时再次判断的方法,通常延时时间为10毫秒。
1