| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4752 人关注过本帖
标题:51 单片机消斗问题
只看楼主 加入收藏
小代帅帅
Rank: 1
来 自:北京昌平
等 级:新手上路
帖 子:92
专家分:7
注 册:2013-5-11
结帖率:89.66%
收藏
已结贴  问题点数:20 回复次数:6 
51 单片机消斗问题
请过往牛人帮帮忙!学习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;
            }
        }
    }
}
搜索更多相关主题的帖子: include 单片机 资料 
2014-10-07 11:53
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:20 
牛人木出现
2014-10-07 17:15
小代帅帅
Rank: 1
来 自:北京昌平
等 级:新手上路
帖 子:92
专家分:7
注 册:2013-5-11
收藏
得分:0 
回复 2 楼 tlliqi
图片附件: 游客没有浏览图片的权限,请 登录注册
你的帖子还有分数那么多,那你应该也是牛人吧!哈哈!说说意见呗

别用你的常规和常识来诋毁我卓越的创造力和另类的行为······
2014-10-09 21:11
birder
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-9-9
收藏
得分:0 
不知道是什么设备上的程序。觉得这个程序好像不太完整。最好把完整的发上来。
2014-10-16 09:09
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:0 
额 这是不知道消抖的含义啊,按键的时候 因为是机械接触,会有机械抖动的产生,导致单片机口线出现大量的高低电平切换,delay消抖,就是等delay后,机械接触稳定后再看单片机口线状态
2014-10-30 14:11
七夜之华
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
威 望:5
帖 子:82
专家分:103
注 册:2014-9-7
收藏
得分:0 
话说这是标准c++编写的c-51程序,感情你没看过c++书吧?
##########if(s2==20)这条语句#########即为 条件判断语句。s2是否为20.若为20则继续执行,不然即跳出。

#############################################
##########################################
因为不懂、才要学习、只有学习、才有进步。
2014-11-06 12:47
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
收藏
得分:0 
这个代码里的 if(s2==20) 不是语法问题,确确实实是一个错误。应该改成 if(s2==0) 来判断按键是否在消抖处理后,依然处于按下状态。

消抖,在按钮这样的元件中,执行消抖的目的,就是消除或减轻由于电路本身带来的突发脉冲干扰,防止误动作。消抖在电路中,通常采取低通滤波的措施,说白点,就是按键回路中给接个小容量电容。在软件上通常采取上面那种延时再次判断的方法,通常延时时间为10毫秒。
2015-03-31 09:42
快速回复:51 单片机消斗问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033020 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved