找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2373|回复: 8
打印 上一主题 下一主题
收起左侧

怎么多按几次按键,LED灯的亮灭出现差错了??

[复制链接]
跳转到指定楼层
楼主
ID:67897 发表于 2014-10-25 21:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
         #define uchar unsigned char
         void delayms(void);
         sbit led=P0^0;
         sbit k1=P1^0;
         void main()
         {
                  P0=0x00;
                while(1)
                {
                         if(k1==0)
                        {
                                delayms();
                                P0=0x01;
                        }
                                if(k1==0)
                                {
                                        delayms();
                                        P0=0x00;
                                }
                }
         }
         void delayms(void)
         {
                   uchar a,b,c;
                 for(a=1;a>0;a--)
                         for(b=75;b>0;b--)
                                for(c=135;c>0;c--);
         }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:19715 发表于 2014-10-25 23:04 | 只看该作者
按键按下可能执行: P0=0x01;
  或者是执行: P0=0x00;
不一定
回复

使用道具 举报

板凳
ID:19715 发表于 2014-10-25 23:08 | 只看该作者
重复执行P0=0x01;
你是不知道的,但是其实按键按下已经响应了
重复执行P0=0x00
也是一样不知道,也是响应了

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:67897 发表于 2014-10-26 09:31 | 只看该作者
明白 发表于 2014-10-25 23:08
重复执行P0=0x01;
你是不知道的,但是其实按键按下已经响应了
重复执行P0=0x00

那请问一下应该怎么修改程序呢??
回复

使用道具 举报

5#
ID:66032 发表于 2014-10-26 15:28 | 只看该作者
你没有按键状态松手检查
#include<reg51.h>
         #define uchar unsigned char
         void delayms(void);
         sbit led=P0^0;
         sbit k1=P1^0;
         void main()
         {
                 P0=0x00;
                while(1)
                {
                         if(k1==0)
                        {
                               delayms();
                                if(k1==0)
                                 {
                                       P0 ^=0x01;
                                       while(!K1);
                                 }
                         }
                }
         }
回复

使用道具 举报

6#
ID:19715 发表于 2014-10-26 23:42 | 只看该作者
lwj10086 发表于 2014-10-26 09:31
那请问一下应该怎么修改程序呢??

#include<reg51.h>
         #define uchar unsigned char
         void delayms(void);
         sbit led=P0^0;
         sbit k1=P1^0;
         void main()
         {
                  P0=0x00;
                while(1)
                {         
                        while(k1)delayms(5);
                           P0=0x01;
                        while(!k1)delayms(5);                           
                        while(k1)delayms(5);
                             P0=0x00;
                        while(!k1)delayms(5);                  
                }
         }
         void delayms(void)
         {
                   uchar a,b,c;
                 for(a=1;a>0;a--)
                         for(b=75;b>0;b--)
                                for(c=135;c>0;c--);
         }


回复

使用道具 举报

7#
ID:66840 发表于 2014-10-27 08:17 | 只看该作者
#include<reg51.h>
#define uchar unsigned char
void delayms(void);
sbit led=P0^0;
sbit k1=P1^0;
void main()
{
        while(1)
        {
                while(k1==0)//判断按键是否按下
                {
                        while(k1==1)//判断按下是否释放
                        {
                                delayms();
                                led = !led;
                        }
                }
        }
}
void delayms(void)
{
    uchar a,b,c;
    for(a=1;a>0;a--)
    for(b=75;b>0;b--)
    for(c=135;c>0;c--);              
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

8#
ID:97425 发表于 2016-3-13 23:51 | 只看该作者
按键没有去除抖动
回复

使用道具 举报

9#
ID:104472 发表于 2016-3-14 13:51 | 只看该作者
程序跑飞,按键无法判断现在状态
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表